aboutsummaryrefslogtreecommitdiff
path: root/runtime/syntax
diff options
context:
space:
mode:
authorJosh Rahm <joshuarahm@gmail.com>2024-11-19 22:57:13 +0000
committerJosh Rahm <joshuarahm@gmail.com>2024-11-19 22:57:13 +0000
commit9be89f131f87608f224f0ee06d199fcd09d32176 (patch)
tree11022dcfa9e08cb4ac5581b16734196128688d48 /runtime/syntax
parentff7ed8f586589d620a806c3758fac4a47a8e7e15 (diff)
parent88085c2e80a7e3ac29aabb6b5420377eed99b8b6 (diff)
downloadrneovim-9be89f131f87608f224f0ee06d199fcd09d32176.tar.gz
rneovim-9be89f131f87608f224f0ee06d199fcd09d32176.tar.bz2
rneovim-9be89f131f87608f224f0ee06d199fcd09d32176.zip
Merge remote-tracking branch 'upstream/master' into mix_20240309
Diffstat (limited to 'runtime/syntax')
-rw-r--r--runtime/syntax/antlr4.vim30
-rw-r--r--runtime/syntax/asy.vim243
-rw-r--r--runtime/syntax/checkhealth.vim6
-rw-r--r--runtime/syntax/chicken.vim18
-rw-r--r--runtime/syntax/csv.vim38
-rw-r--r--runtime/syntax/deb822sources.vim2
-rw-r--r--runtime/syntax/debcopyright.vim4
-rw-r--r--runtime/syntax/dockerfile.vim4
-rw-r--r--runtime/syntax/dosbatch.vim9
-rw-r--r--runtime/syntax/dosini.vim6
-rw-r--r--runtime/syntax/dune.vim3
-rw-r--r--runtime/syntax/fstab.vim22
-rw-r--r--runtime/syntax/glsl.vim752
-rw-r--r--runtime/syntax/goaccess.vim34
-rw-r--r--runtime/syntax/hare.vim188
-rw-r--r--runtime/syntax/haredoc.vim32
-rw-r--r--runtime/syntax/hcl.vim66
-rw-r--r--runtime/syntax/help.vim10
-rw-r--r--runtime/syntax/hollywood.vim16
-rw-r--r--runtime/syntax/html.vim5
-rw-r--r--runtime/syntax/htmlangular.vim18
-rw-r--r--runtime/syntax/i3config.vim6
-rw-r--r--runtime/syntax/idlang.vim13
-rw-r--r--runtime/syntax/indent.vim4
-rw-r--r--runtime/syntax/java.vim762
-rw-r--r--runtime/syntax/javascript.vim9
-rw-r--r--runtime/syntax/jinja.vim86
-rw-r--r--runtime/syntax/kconfig.vim4
-rw-r--r--runtime/syntax/kdl.vim48
-rw-r--r--runtime/syntax/kivy.vim10
-rw-r--r--runtime/syntax/lc.vim2
-rw-r--r--runtime/syntax/logindefs.vim27
-rw-r--r--runtime/syntax/lyrics.vim4
-rw-r--r--runtime/syntax/make.vim21
-rw-r--r--runtime/syntax/mediawiki.vim292
-rw-r--r--runtime/syntax/mma.vim2
-rw-r--r--runtime/syntax/mysql.vim314
-rw-r--r--runtime/syntax/ocaml.vim407
-rw-r--r--runtime/syntax/opam.vim52
-rw-r--r--runtime/syntax/progress.vim14
-rw-r--r--runtime/syntax/query.lua4
-rw-r--r--runtime/syntax/rasi.vim298
-rw-r--r--runtime/syntax/salt.vim16
-rw-r--r--runtime/syntax/scheme.vim21
-rw-r--r--runtime/syntax/sdc.vim46
-rw-r--r--runtime/syntax/shared/debversions.vim9
-rw-r--r--runtime/syntax/shared/typescriptcommon.vim192
-rw-r--r--runtime/syntax/spec.vim3
-rw-r--r--runtime/syntax/stylus.vim12
-rw-r--r--runtime/syntax/sudoers.vim17
-rw-r--r--runtime/syntax/swayconfig.vim10
-rw-r--r--runtime/syntax/terraform.vim17
-rw-r--r--runtime/syntax/thrift.vim74
-rw-r--r--runtime/syntax/tmux.vim14
-rw-r--r--runtime/syntax/tsv.vim12
-rw-r--r--runtime/syntax/typescript.vim2
-rw-r--r--runtime/syntax/typescriptreact.vim7
-rw-r--r--runtime/syntax/typst.vim472
-rw-r--r--runtime/syntax/vim.vim450
-rw-r--r--runtime/syntax/yaml.vim2
-rw-r--r--runtime/syntax/zathurarc.vim4
61 files changed, 4389 insertions, 876 deletions
diff --git a/runtime/syntax/antlr4.vim b/runtime/syntax/antlr4.vim
new file mode 100644
index 0000000000..33cc865ccc
--- /dev/null
+++ b/runtime/syntax/antlr4.vim
@@ -0,0 +1,30 @@
+" Vim syntax file
+" Language: ANTLR4, ANother Tool for Language Recognition v4 <www.antlr.org>
+" Maintainer: Yinzuo Jiang <jiangyinzuo@foxmail.com>
+" Last Change: 2024 July 09
+
+" quit when a syntax file was already loaded
+if exists("b:current_syntax")
+ finish
+endif
+
+" Keywords. See https://github.com/antlr/antlr4/blob/4.13.1/doc/lexicon.md
+syn keyword antlr4Include import
+" https://github.com/antlr/antlr4/blob/4.13.1/doc/options.md
+" https://github.com/antlr/antlr4/blob/4.13.1/doc/grammars.md
+syn keyword antlr4Structure fragment lexer parser grammar options channels tokens mode
+syn keyword antlr4Statement returns locals
+syn keyword antlr4Exceptions throws catch finally
+
+" Comments.
+syn keyword antlr4Todo contained TODO FIXME XXX NOTE
+syn region antlr4Comment start="//" end="$" contains=antlr4Todo,@Spell
+syn region antlr4Comment start="/\*" end="\*/" contains=antlr4Todo,@Spell
+
+hi def link antlr4Include Include
+hi def link antlr4Structure Structure
+hi def link antlr4Statement Statement
+hi def link antlr4Exceptions Structure
+hi def link antlr4Comment Comment
+
+let b:current_syntax = "antlr4"
diff --git a/runtime/syntax/asy.vim b/runtime/syntax/asy.vim
new file mode 100644
index 0000000000..ed2bf712f5
--- /dev/null
+++ b/runtime/syntax/asy.vim
@@ -0,0 +1,243 @@
+" Vim syntax file
+" Language: Asymptote
+" Maintainer: Avid Seeker <avidseeker7@protonmail.com>
+" Andy Hammerlindl
+" Last Change: 2022 Jan 05
+
+" Hacked together from Bram Moolenaar's C syntax file, and Claudio Fleiner's
+" Java syntax file.
+
+if exists("b:current_syntax")
+ finish
+endif
+
+" useful C/C++/Java keywords
+syn keyword asyStatement break return continue unravel
+syn keyword asyConditional if else
+syn keyword asyRepeat while for do
+syn keyword asyExternal access from import include
+syn keyword asyOperator new operator
+
+" basic asymptote keywords
+syn keyword asyConstant VERSION
+syn keyword asyConstant true false default infinity inf nan
+syn keyword asyConstant null nullframe nullpath nullpen
+syn keyword asyConstant intMin intMax realMin realMax
+syn keyword asyConstant realEpsilon realDigits
+syn keyword asyPathSpec and cycle controls tension atleast curl
+syn keyword asyStorageClass static public restricted private explicit
+syn keyword asyStructure struct typedef
+syn keyword asyType void bool bool3 int real string file
+syn keyword asyType pair triple transform guide path pen frame
+syn keyword asyType picture
+
+" module specific keywords
+if exists("asy_syn_plain")
+ syn keyword asyConstant currentpicture currentpen defaultpen
+ syn keyword asyConstant inch inches cm mm bp pt up down right left
+ syn keyword asyConstant E NE N NW W SW S SE
+ syn keyword asyConstant ENE NNE NNW WNW WSW SSW SSE ESE
+ syn keyword asyConstant I pi twopi
+ syn keyword asyConstant CCW CW
+ syn keyword asyConstant undefined sqrtEpsilon Align mantissaBits
+ syn keyword asyConstant identity zeroTransform invert
+ syn keyword asyConstant stdin stdout
+ syn keyword asyConstant unitsquare unitcircle circleprecision
+ syn keyword asyConstant solid dotted Dotted dashed dashdotted
+ syn keyword asyConstant longdashed longdashdotted
+ syn keyword asyConstant squarecap roundcap extendcap
+ syn keyword asyConstant miterjoin roundjoin beveljoin
+ syn keyword asyConstant zerowinding evenodd basealign nobasealign
+ syn keyword asyConstant black white gray red green blue Cyan Magenta
+ syn keyword asyConstant Yellow Black cyan magenta yellow palered
+ syn keyword asyConstant palegreen paleblue palecyan palemagenta
+ syn keyword asyConstant paleyellow palegray lightred lightgreen
+ syn keyword asyConstant lightblue lightcyan lightmagenta lightyellow
+ syn keyword asyConstant lightgray mediumred mediumgreen mediumblue
+ syn keyword asyConstant mediumcyan mediummagenta mediumyellow
+ syn keyword asyConstant mediumgray heavyred heavygreen heavyblue
+ syn keyword asyConstant heavycyan heavymagenta lightolive heavygray
+ syn keyword asyConstant deepred deepgreen deepblue deepcyan
+ syn keyword asyConstant deepmagenta deepyellow deepgray darkred
+ syn keyword asyConstant darkgreen darkblue darkcyan darkmagenta
+ syn keyword asyConstant darkolive darkgray orange fuchsia chartreuse
+ syn keyword asyConstant springgreen purple royalblue salmon brown
+ syn keyword asyConstant olive darkbrown pink palegrey lightgrey
+ syn keyword asyConstant mediumgrey grey heavygrey deepgrey darkgrey
+
+ if exists("asy_syn_texcolors")
+ syn keyword asyConstant GreenYellow Yellow Goldenrod Dandelion
+ syn keyword asyConstant Apricot Peach Melon YellowOrange Orange
+ syn keyword asyConstant BurntOrange Bittersweet RedOrange Mahogany
+ syn keyword asyConstant Maroon BrickRed Red OrangeRed RubineRed
+ syn keyword asyConstant WildStrawberry Salmon CarnationPink Magenta
+ syn keyword asyConstant VioletRed Rhodamine Mulberry RedViolet
+ syn keyword asyConstant Fuchsia Lavender Thistle Orchid DarkOrchid
+ syn keyword asyConstant Purple Plum Violet RoyalPurple BlueViolet
+ syn keyword asyConstant Periwinkle CadetBlue CornflowerBlue
+ syn keyword asyConstant MidnightBlue NavyBlue RoyalBlue Blue
+ syn keyword asyConstant Cerulean Cyan ProcessBlue SkyBlue Turquoise
+ syn keyword asyConstant TealBlue Aquamarine BlueGreen Emerald
+ syn keyword asyConstant JungleGreen SeaGreen Green ForestGreen
+ syn keyword asyConstant PineGreen LimeGreen YellowGreen SpringGreen
+ syn keyword asyConstant OliveGreen RawSienna Sepia Brown Tan Gray
+ syn keyword asyConstant Black White
+ endif
+
+ if exists("asy_syn_x11colors")
+ syn keyword asyConstant AliceBlue AntiqueWhite Aqua Aquamarine Azure
+ syn keyword asyConstant Beige Bisque Black BlanchedAlmond Blue
+ syn keyword asyConstant BlueViolet Brown BurlyWood CadetBlue
+ syn keyword asyConstant Chartreuse Chocolate Coral CornflowerBlue
+ syn keyword asyConstant Cornsilk Crimson Cyan DarkBlue DarkCyan
+ syn keyword asyConstant DarkGoldenrod DarkGray DarkGreen DarkKhaki
+ syn keyword asyConstant DarkMagenta DarkOliveGreen DarkOrange
+ syn keyword asyConstant DarkOrchid DarkRed DarkSalmon DarkSeaGreen
+ syn keyword asyConstant DarkSlateBlue DarkSlateGray DarkTurquoise
+ syn keyword asyConstant DarkViolet DeepPink DeepSkyBlue DimGray
+ syn keyword asyConstant DodgerBlue FireBrick FloralWhite ForestGreen
+ syn keyword asyConstant Fuchsia Gainsboro GhostWhite Gold Goldenrod
+ syn keyword asyConstant Gray Green GreenYellow Honeydew HotPink
+ syn keyword asyConstant IndianRed Indigo Ivory Khaki Lavender
+ syn keyword asyConstant LavenderBlush LawnGreen LemonChiffon
+ syn keyword asyConstant LightBlue LightCoral LightCyan
+ syn keyword asyConstant LightGoldenrodYellow LightGreen LightGrey
+ syn keyword asyConstant LightPink LightSalmon LightSeaGreen
+ syn keyword asyConstant LightSkyBlue LightSlateGray LightSteelBlue
+ syn keyword asyConstant LightYellow Lime LimeGreen Linen Magenta
+ syn keyword asyConstant Maroon MediumAquamarine MediumBlue
+ syn keyword asyConstant MediumOrchid MediumPurple MediumSeaGreen
+ syn keyword asyConstant MediumSlateBlue MediumSpringGreen
+ syn keyword asyConstant MediumTurquoise MediumVioletRed MidnightBlue
+ syn keyword asyConstant MintCream MistyRose Moccasin NavajoWhite
+ syn keyword asyConstant Navy OldLace Olive OliveDrab Orange
+ syn keyword asyConstant OrangeRed Orchid PaleGoldenrod PaleGreen
+ syn keyword asyConstant PaleTurquoise PaleVioletRed PapayaWhip
+ syn keyword asyConstant PeachPuff Peru Pink Plum PowderBlue Purple
+ syn keyword asyConstant Red RosyBrown RoyalBlue SaddleBrown Salmon
+ syn keyword asyConstant SandyBrown SeaGreen Seashell Sienna Silver
+ syn keyword asyConstant SkyBlue SlateBlue SlateGray Snow SpringGreen
+ syn keyword asyConstant SteelBlue Tan Teal Thistle Tomato Turquoise
+ syn keyword asyConstant Violet Wheat White WhiteSmoke Yellow
+ syn keyword asyConstant YellowGreen
+ endif
+
+ if exists("asy_syn_three")
+ syn keyword asyType path3 guide3 transform3
+ syn keyword asyType projection light material patch surface tube
+ syn keyword asyConstant currentprojection currentlight defaultrender
+ syn keyword asyConstant identity4 O X Y Z
+ syn keyword asyConstant nolight nullpens
+ syn keyword asyConstant unitsphere unithemisphere unitplane octant1
+ syn keyword asyConstant unitcone unitsolidcone unitcube unitcylinder
+ syn keyword asyConstant unitdisk unittube
+ endif
+endif
+
+
+" string constants
+syn region asyCString start=+'+ end=+'+ skip=+\\\\\|\\'+ contains=asyCSpecial
+syn match asyCSpecial display contained +\\\(['"?\\abfnrtv]\|\o\{1,3}\)+
+syn match asyCSpecial display contained +\\\(x[0-9A-F]\{1,2\}\|$\)+
+" double quoted strings only special character is \"
+syn region asyString start=+"+ end=+"+ skip=+\\\\\|\\"+ contains=asySpecial
+syn match asySpecial display contained +\(\\\)\@1<!\(\\\\\)*\zs\\"+
+
+
+" number constants
+syn match asyNumbers display transparent "\<\d\|\.\d"
+ \ contains=asyNumber,asyNumberError
+syn match asyNumber display contained "\d*\.\=\d*\(e[-+]\=\d\+\)\="
+" highlight number constants with two '.' or with '.' after an 'e'
+syn match asyNumberError display contained "\d*\.\(\d\|e[-+]\=\)*\.[0-9.]*"
+syn match asyNumberError display contained "\d*e[-+]\=\d*\.[0-9.]*"
+syn match asyNumberError display contained "\d*e[-+]\=\(e[-+]\=\)*\.[0-9.]*"
+
+
+" comments and comment strings
+syn keyword asyTodo contained TODO FIXME XXX
+syn sync ccomment asyComment minlines=15
+if exists("asy_comment_strings")
+ " A comment can contain asyString, asyCString, and asyNumber. But a "*/"
+ " inside a asy*String in a asyComment DOES end the comment! So we need to
+ " use a special type of asy*String: asyComment*String, which also ends on
+ " "*/", and sees a "*" at the start of the line as comment again.
+ " Unfortunately this doesn't very well work for // type of comments :-(
+ syn match asyCommentSkip contained "^\s*\*\($\|\s\+\)"
+ syn region asyCommentString contained start=+"+ skip=+\\\\\|\\"+ end=+"+
+ \ end=+\*/+me=s-1
+ \ contains=asySpecial,asyCommentSkip
+ syn region asyCommentCString contained start=+'+ skip=+\\\\\|\\'+ end=+'+
+ \ end=+\*/+me=s-1
+ \ contains=asyCSpecial,asyCommentSkip
+ syn region asyCommentLString contained start=+"+ skip=+\\\\\|\\"+ end=+"+
+ \ end="$" contains=asySpecial
+ syn region asyCommentLCString contained start=+'+ skip=+\\\\\|\\'+ end=+'+
+ \ end="$" contains=asyCSpecial
+ syn region asyCommentL start="//" skip="\\$" end="$" keepend
+ \ contains=asyTodo,asyCommentLString,
+ \ asyCommentLCString,asyNumbers
+ syn region asyComment matchgroup=asyComment start="/\*" end="\*/"
+ \ contains=asyTodo,asyCommentStartError,
+ \ asyCommentString,asyCommentCString,asyNumbers
+else
+ syn region asyCommentL start="//" skip="\\$" end="$" keepend
+ \ contains=asyTodo
+ syn region asyComment matchgroup=asyComment start="/\*" end="\*/"
+ \ contains=asyTodo,asyCommentStartError
+endif
+
+" highlight common errors when starting/ending C comments
+syn match asyCommentError display "\*/"
+syn match asyCommentStartError display "/\*"me=e-1 contained
+
+
+" delimiter matching errors
+syn region asyCurly transparent start='{' end='}'
+ \ contains=TOP,asyCurlyError
+syn region asyBrack transparent start='\[' end='\]' matchgroup=asyError
+ \ end=';' contains=TOP,asyBrackError
+syn region asyParen transparent start='(' end=')' matchgroup=asyError
+ \ end=';' contains=TOP,asyParenError
+syn match asyCurlyError display '}'
+syn match asyBrackError display '\]'
+syn match asyParenError display ')'
+" for (;;) constructs are exceptions that allow ; inside parenthesis
+syn region asyParen transparent matchgroup=asyParen
+ \ start='\(for\s*\)\@<=(' end=')'
+ \ contains=TOP,asyParenError
+
+" Define the default highlighting.
+hi def link asyCommentL asyComment
+hi def link asyConditional Conditional
+hi def link asyRepeat Repeat
+hi def link asyNumber Number
+hi def link asyNumberError asyError
+hi def link asyCurlyError asyError
+hi def link asyBracketError asyError
+hi def link asyParenError asyError
+hi def link asyCommentError asyError
+hi def link asyCommentStartError asyError
+hi def link asyOperator Operator
+hi def link asyStructure Structure
+hi def link asyStorageClass StorageClass
+hi def link asyExternal Include
+hi def link asyDefine Macro
+hi def link asyError Error
+hi def link asyStatement Statement
+hi def link asyType Type
+hi def link asyConstant Constant
+hi def link asyCommentString asyString
+hi def link asyCommentCString asyString
+hi def link asyCommentLString asyString
+hi def link asyCommentLCString asyString
+hi def link asyCommentSkip asyComment
+hi def link asyString String
+hi def link asyCString String
+hi def link asyComment Comment
+hi def link asySpecial SpecialChar
+hi def link asyCSpecial SpecialChar
+hi def link asyTodo Todo
+hi def link asyPathSpec Statement
+
+let b:current_syntax = "asy"
diff --git a/runtime/syntax/checkhealth.vim b/runtime/syntax/checkhealth.vim
index 2fd0aed601..a4f6e016cb 100644
--- a/runtime/syntax/checkhealth.vim
+++ b/runtime/syntax/checkhealth.vim
@@ -14,7 +14,9 @@ syn case match
syn keyword DiagnosticError ERROR[:]
syn keyword DiagnosticWarn WARNING[:]
syn keyword DiagnosticOk OK[:]
-syn match helpSectionDelim "^======*\n.*$"
-syn match healthHeadingChar "=" conceal cchar=─ contained containedin=helpSectionDelim
+" Note: hs=e starts higlighting on the title line (instead of the "===" line).
+syn match helpSectionDelim /^======*\n.*$/hs=e
+highlight helpSectionDelim gui=reverse cterm=reverse
+syn match healthHeadingChar "=" conceal cchar= contained containedin=helpSectionDelim
let b:current_syntax = "checkhealth"
diff --git a/runtime/syntax/chicken.vim b/runtime/syntax/chicken.vim
index f53d872e74..958fc1f361 100644
--- a/runtime/syntax/chicken.vim
+++ b/runtime/syntax/chicken.vim
@@ -1,13 +1,13 @@
" Vim syntax file
-" Language: Scheme (CHICKEN)
-" Last Change: 2021 Oct 01
-" Author: Evan Hanson <evhan@foldling.org>
-" Maintainer: Evan Hanson <evhan@foldling.org>
-" Repository: https://git.foldling.org/vim-scheme.git
-" URL: https://foldling.org/vim/syntax/chicken.vim
-" Notes: This is supplemental syntax, to be loaded after the core Scheme
-" syntax file (syntax/scheme.vim). Enable it by setting b:is_chicken=1
-" and filetype=scheme.
+" Language: Scheme (CHICKEN)
+" Last Change: 2024 Jun 21
+" Author: Evan Hanson <evhan@foldling.org>
+" Maintainer: Evan Hanson <evhan@foldling.org>
+" Repository: https://git.foldling.org/vim-scheme.git
+" URL: https://foldling.org/vim/syntax/chicken.vim
+" Notes: This is supplemental syntax, to be loaded after the core
+" Scheme syntax file (syntax/scheme.vim). Enable it by
+" setting b:is_chicken=1 and filetype=scheme.
" Only to be used on top of the Scheme syntax.
if !exists('b:did_scheme_syntax')
diff --git a/runtime/syntax/csv.vim b/runtime/syntax/csv.vim
new file mode 100644
index 0000000000..6295c3e29a
--- /dev/null
+++ b/runtime/syntax/csv.vim
@@ -0,0 +1,38 @@
+" Maintainer: Maxim Kim <habamax@gmail.com>
+" Converted from vim9script
+" Last Update: 2024-06-18
+
+if exists("b:current_syntax")
+ finish
+endif
+
+let s:delimiter = get(b:, "csv_delimiter", ",")
+
+" generate bunch of following syntaxes:
+" syntax match csvCol8 /.\{-}\(,\|$\)/ nextgroup=escCsvCol0,csvCol0
+" syntax region escCsvCol8 start=/ *"\([^"]*""\)*[^"]*/ end=/" *\(,\|$\)/ nextgroup=escCsvCol0,csvCol0
+for s:col in range(8, 0, -1)
+ let s:ncol = (s:col == 8 ? 0 : s:col + 1)
+ exe $'syntax match csvCol{s:col}' .. ' /.\{-}\(' .. s:delimiter .. '\|$\)/ nextgroup=escCsvCol' .. s:ncol .. ',csvCol' .. s:ncol
+ exe $'syntax region escCsvCol{s:col}' .. ' start=/ *"\([^"]*""\)*[^"]*/ end=/" *\(' .. s:delimiter .. '\|$\)/ nextgroup=escCsvCol' .. s:ncol .. ',csvCol' .. s:ncol
+endfor
+
+hi def link csvCol1 Statement
+hi def link csvCol2 Constant
+hi def link csvCol3 Type
+hi def link csvCol4 PreProc
+hi def link csvCol5 Identifier
+hi def link csvCol6 Special
+hi def link csvCol7 String
+hi def link csvCol8 Comment
+
+hi def link escCsvCol1 csvCol1
+hi def link escCsvCol2 csvCol2
+hi def link escCsvCol3 csvCol3
+hi def link escCsvCol4 csvCol4
+hi def link escCsvCol5 csvCol5
+hi def link escCsvCol6 csvCol6
+hi def link escCsvCol7 csvCol7
+hi def link escCsvCol8 csvCol8
+
+let b:current_syntax = "csv"
diff --git a/runtime/syntax/deb822sources.vim b/runtime/syntax/deb822sources.vim
index f7d337fce9..ec45605905 100644
--- a/runtime/syntax/deb822sources.vim
+++ b/runtime/syntax/deb822sources.vim
@@ -40,7 +40,7 @@ syn match deb822sourcesUri '\(https\?://\|ftp://\|[rs]sh://\|debtorre
syn region deb822sourcesStrictField matchgroup=deb822sourcesEntryField start="^\%(Types\|URIs\|Suites\|Components\): *" end="$" contains=deb822sourcesType,deb822sourcesUri,deb822sourcesSupportedSuites,deb822sourcesUnsupportedSuites,deb822sourcesFreeComponent,deb822sourcesNonFreeComponent oneline
syn region deb822sourcesField matchgroup=deb822sourcesOptionField start="^\%(Signed-By\|Check-Valid-Until\|Valid-Until-Min\|Valid-Until-Max\|Date-Max-Future\|InRelease-Path\): *" end="$" oneline
syn region deb822sourcesField matchgroup=deb822sourcesMultiValueOptionField start="^\%(Architectures\|Languages\|Targets\)\%(-Add\|-Remove\)\?: *" end="$" oneline
-syn region deb822sourcesStrictField matchgroup=deb822sourcesBooleanOptionField start="^\%(PDiffs\|Allow-Insecure\|Allow-Weak\|Allow-Downgrade-To-Insecure\|Trusted\|Check-Date\): *" end="$" contains=deb822sourcesYesNo oneline
+syn region deb822sourcesStrictField matchgroup=deb822sourcesBooleanOptionField start="^\%(PDiffs\|Allow-Insecure\|Allow-Weak\|Allow-Downgrade-To-Insecure\|Trusted\|Check-Date\|Enabled\): *" end="$" contains=deb822sourcesYesNo oneline
syn region deb822sourcesStrictField matchgroup=deb822sourcesForceBooleanOptionField start="^\%(By-Hash\): *" end="$" contains=deb822sourcesForce,deb822sourcesYesNo oneline
hi def link deb822sourcesField Default
diff --git a/runtime/syntax/debcopyright.vim b/runtime/syntax/debcopyright.vim
index 6f76b5c868..cb9e8965de 100644
--- a/runtime/syntax/debcopyright.vim
+++ b/runtime/syntax/debcopyright.vim
@@ -1,7 +1,7 @@
" Vim syntax file
" Language: Debian copyright file
" Maintainer: Debian Vim Maintainers
-" Last Change: 2023 Jan 16
+" Last Change: 2024 Jul 28
" URL: https://salsa.debian.org/vim-team/vim-debian/blob/main/syntax/debcopyright.vim
" Standard syntax initialization
@@ -15,7 +15,7 @@ set cpo&vim
syn case match
syn match debcopyrightUrl "\vhttps?://[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?(:\d+)?(/[^[:space:]]*)?$"
-syn match debcopyrightKey "^\%(Format\|Upstream-Name\|Upstream-Contact\|Disclaimer\|Source\|Comment\|Files\|Copyright\|License\|Files-Excluded\%(-[-a-zA-Z0-9]\+\)\=\): *"
+syn match debcopyrightKey "^\%(Format\|Upstream-Name\|Upstream-Contact\|Disclaimer\|Source\|Comment\|Files\|Copyright\|License\|Files-\%(Excluded\|Included\)\%(-[-a-zA-Z0-9]\+\)\=\): *"
syn match debcopyrightEmail "[_=[:alnum:]\.+-]\+@[[:alnum:]\./\-]\+"
syn match debcopyrightEmail "<.\{-}>"
syn match debcopyrightComment "^#.*$" contains=@Spell
diff --git a/runtime/syntax/dockerfile.vim b/runtime/syntax/dockerfile.vim
index ce52e697cd..6ec71fcdb6 100644
--- a/runtime/syntax/dockerfile.vim
+++ b/runtime/syntax/dockerfile.vim
@@ -1,6 +1,6 @@
" dockerfile.vim - Syntax highlighting for Dockerfiles
" Maintainer: Honza Pokorny <https://honza.ca>
-" Last Change: 2020 Feb 11
+" Last Change: 2024 Jul 03
" License: BSD
" https://docs.docker.com/engine/reference/builder/
@@ -34,7 +34,7 @@ syntax region dockerfileJSON contained keepend start=/\v\[/ skip=/\v\\\_./ end
syntax region dockerfileShell contained keepend start=/\v/ skip=/\v\\\_./ end=/\v$/ contains=@Shell
syntax region dockerfileValue contained keepend start=/\v/ skip=/\v\\\_./ end=/\v$/ contains=dockerfileString
-syntax region dockerfileComment start=/\v^\s*#/ end=/\v$/
+syntax region dockerfileComment start=/\v^\s*#/ end=/\v$/ contains=@Spell
set commentstring=#\ %s
hi def link dockerfileString String
diff --git a/runtime/syntax/dosbatch.vim b/runtime/syntax/dosbatch.vim
index 55601996ad..0c3e99be3b 100644
--- a/runtime/syntax/dosbatch.vim
+++ b/runtime/syntax/dosbatch.vim
@@ -3,6 +3,7 @@
" Maintainer: Mike Williams <mrmrdubya@gmail.com>
" Filenames: *.bat
" Last Change: 3rd February 2024
+" 2024 Aug 14 by Vim Project: improve syntax (#15453)
"
" Options Flags:
" dosbatch_cmdextversion - 1 = Windows NT, 2 = Windows 2000 [default]
@@ -45,7 +46,7 @@ syn match dosbatchString "\<echo\([^)>|]\|\^\@<=[)>|]\)*"lc=4 contains=dosbatchV
syn match dosbatchEchoOperator "\<echo\s\+\(on\|off\)\s*$"lc=4
" For embedded commands
-syn match dosbatchCmd "(\s*'[^']*'"lc=1 contains=dosbatchString,dosbatchVariable,dosBatchArgument,@dosbatchNumber,dosbatchImplicit,dosbatchStatement,dosbatchConditional,dosbatchRepeat,dosbatchOperator
+syn match dosbatchCmd "(\s*'[^']*'"lc=1 contains=dosbatchString,dosbatchVariable,dosBatchArgument,@dosbatchNumber,dosbatchImplicit,dosbatchStatement,dosbatchConditional,dosbatchRepeat,dosbatchOperator,dosbatchIfOperator
" Numbers - surround with ws to not include in dir and filenames
syn match dosbatchInteger "[[:space:]=(/:,!~-]\d\+"lc=1
@@ -74,7 +75,7 @@ syn match dosbatchSet "\s\h\w*[+-]\==\{-1}" contains=dosbatchIdentifier,dosbatc
" Args to bat files and for loops, etc
syn match dosbatchArgument "%\(\d\|\*\)"
-syn match dosbatchArgument "%[a-z]\>"
+syn match dosbatchArgument "%%[a-z]\>"
if dosbatch_cmdextversion == 1
syn match dosbatchArgument "%\~[fdpnxs]\+\(\($PATH:\)\=[a-z]\|\d\)\>"
else
@@ -102,9 +103,11 @@ else
syn match dosbatchColonCommentErr contained "\s*:\s*:.*$"
endif
syn match dosbatchColonCommentErr contained "\s*:\s*:[^)]*\(\(\n\s*\)\?)\)\@="
-syn region dosbatchCodeBlock transparent start=+(+ end=+)+ contains=dosbatchString,dosbatchVariable,dosBatchArgument,@dosbatchNumber,dosbatchImplicit,dosbatchStatement,dosbatchConditional,dosbatchRepeat,dosbatchOperator,@dosbatchCodeBlockComment,dosbatchColonCommentErr,dosbatchCodeBlock
+syn region dosbatchCodeBlock transparent start=+(+ end=+)+ contains=dosbatchString,dosbatchVariable,dosBatchArgument,@dosbatchNumber,dosbatchImplicit,dosbatchStatement,dosbatchConditional,dosbatchRepeat,dosbatchOperator,dosbatchIfOperator,@dosbatchCodeBlockComment,dosbatchColonCommentErr,dosbatchCodeBlock
syn match dosbatchCodeBlockErr ")"
+syn sync match dosbatchSyncCodeBlock grouphere NONE "^)\s*$"
+
syn keyword dosbatchImplicit append assoc at attrib break cacls cd chcp chdir
syn keyword dosbatchImplicit chkdsk chkntfs cls cmd color comp compact convert copy
syn keyword dosbatchImplicit date del dir diskcomp diskcopy doskey echo endlocal
diff --git a/runtime/syntax/dosini.vim b/runtime/syntax/dosini.vim
index 66e17ec9af..e8212b6d2e 100644
--- a/runtime/syntax/dosini.vim
+++ b/runtime/syntax/dosini.vim
@@ -1,12 +1,12 @@
" Vim syntax file
" Language: Configuration File (ini file) for MSDOS/MS Windows
-" Version: 2.3
+" Version: 2.4
" Original Author: Sean M. McKee <mckee@misslink.net>
" Previous Maintainer: Nima Talebi <nima@it.net.au>
" Current Maintainer: Hong Xu <hong@topbug.net>
" Homepage: http://www.vim.org/scripts/script.php?script_id=3747
" Repository: https://github.com/xuhdev/syntax-dosini.vim
-" Last Change: 2023 Aug 20
+" Last Change: 2024 Sept 08
" quit when a syntax file was already loaded
@@ -27,7 +27,7 @@ syn match dosiniNumber "=\zs\s*\d\+\s*$"
syn match dosiniNumber "=\zs\s*\d*\.\d\+\s*$"
syn match dosiniNumber "=\zs\s*\d\+e[+-]\=\d\+\s*$"
syn region dosiniHeader start="^\s*\[" end="\]"
-syn match dosiniComment "^[#;].*$"
+syn match dosiniComment "^[#;].*$" contains=@Spell
syn region dosiniSection start="\s*\[.*\]" end="\ze\s*\[.*\]" fold
\ contains=dosiniLabel,dosiniValue,dosiniNumber,dosiniHeader,dosiniComment
diff --git a/runtime/syntax/dune.vim b/runtime/syntax/dune.vim
index b4254057c0..3cfb47fbee 100644
--- a/runtime/syntax/dune.vim
+++ b/runtime/syntax/dune.vim
@@ -4,6 +4,7 @@
" Anton Kochkov <anton.kochkov@gmail.com>
" URL: https://github.com/ocaml/vim-ocaml
" Last Change:
+" 2023 Nov 24 - Add end-of-line strings (Samuel Hym)
" 2019 Feb 27 - Add newer keywords to the syntax (Simon Cruanes)
" 2018 May 8 - Check current_syntax (Kawahara Satoru)
" 2018 Mar 29 - Extend jbuild syntax with more keywords (Petter A. Urkedal)
@@ -38,6 +39,8 @@ syn keyword lispFunc ignore-stdout ignore-stderr ignore-outputs
syn keyword lispFunc with-stdout-to with-stderr-to with-outputs-to
syn keyword lispFunc write-file system bash
+syn region lispString start=+"\\[>|]+ end=+$+ contains=@Spell
+
syn cluster lispBaseListCluster add=duneVar
syn match duneVar '\${[@<^]}' containedin=lispSymbol
syn match duneVar '\${\k\+\(:\k\+\)\?}' containedin=lispSymbol
diff --git a/runtime/syntax/fstab.vim b/runtime/syntax/fstab.vim
index 91150bc37b..64d5bee3d0 100644
--- a/runtime/syntax/fstab.vim
+++ b/runtime/syntax/fstab.vim
@@ -2,8 +2,8 @@
" Language: fstab file
" Maintainer: Radu Dineiu <radu.dineiu@gmail.com>
" URL: https://raw.github.com/rid9/vim-fstab/master/syntax/fstab.vim
-" Last Change: 2023 Feb 19
-" Version: 1.6.3
+" Last Change: 2024 Jul 11
+" Version: 1.6.4
"
" Credits:
" David Necas (Yeti) <yeti@physics.muni.cz>
@@ -35,7 +35,7 @@ syn match fsOperator /[,=:#]/
" Device
syn cluster fsDeviceCluster contains=fsOperator,fsDeviceKeyword,fsDeviceError
syn match fsDeviceError /\%([^a-zA-Z0-9_\/#@:\.-]\|^\w\{-}\ze\W\)/ contained
-syn keyword fsDeviceKeyword contained none proc linproc tmpfs devpts devtmpfs sysfs usbfs
+syn keyword fsDeviceKeyword contained none proc linproc tmpfs devpts devtmpfs sysfs usbfs tracefs overlay
syn keyword fsDeviceKeyword contained LABEL nextgroup=fsDeviceLabel
syn keyword fsDeviceKeyword contained UUID nextgroup=fsDeviceUUID
syn keyword fsDeviceKeyword contained PARTLABEL nextgroup=fsDevicePARTLABEL
@@ -56,7 +56,7 @@ syn keyword fsMountPointKeyword contained none swap
" Type
syn cluster fsTypeCluster contains=fsTypeKeyword,fsTypeUnknown
syn match fsTypeUnknown /\s\+\zs\w\+/ contained
-syn keyword fsTypeKeyword contained adfs ados affs anon_inodefs atfs audiofs auto autofs bdev befs bfs btrfs binfmt_misc cd9660 ceph cfs cgroup cifs coda coherent configfs cpuset cramfs debugfs devfs devpts devtmpfs dlmfs e2compr ecryptfs efivarfs efs erofs exfat ext2 ext2fs ext3 ext4 f2fs fdesc ffs filecore fuse fuseblk fusectl gfs2 hfs hfsplus hpfs hugetlbfs iso9660 jffs jffs2 jfs kernfs lfs linprocfs mfs minix mqueue msdos ncpfs nfs nfs4 nfsd nilfs2 none ntfs ntfs3 null nwfs ocfs2 omfs overlay ovlfs pipefs portal proc procfs pstore ptyfs pvfs2 qnx4 qnx6 reiserfs ramfs romfs rpc_pipefs securityfs shm smbfs spufs squashfs sockfs sshfs std subfs swap sysfs sysv tcfs tmpfs ubifs udf ufs umap umsdos union usbfs userfs v9fs vfat virtiofs vs3fs vxfs wrapfs wvfs xenfs xenix xfs zisofs zonefs
+syn keyword fsTypeKeyword contained adfs ados affs anon_inodefs atfs audiofs auto autofs bdev befs bfs btrfs binfmt_misc cd9660 ceph cfs cgroup cifs coda coherent configfs cpuset cramfs debugfs devfs devpts devtmpfs dlmfs e2compr ecryptfs efivarfs efs erofs exfat ext2 ext2fs ext3 ext4 f2fs fdesc ffs filecore fuse fuseblk fusectl gfs2 hfs hfsplus hpfs hugetlbfs iso9660 jffs jffs2 jfs kernfs lfs linprocfs mfs minix mqueue msdos ncpfs nfs nfs4 nfsd nilfs2 none ntfs ntfs3 null nwfs ocfs2 omfs overlay ovlfs pipefs portal proc procfs pstore ptyfs pvfs2 qnx4 qnx6 reiserfs ramfs romfs rpc_pipefs securityfs shm smbfs spufs squashfs sockfs sshfs std subfs swap sysfs sysv tcfs tmpfs tracefs ubifs udf ufs umap umsdos union usbfs userfs v9fs vfat virtiofs vs3fs vxfs wrapfs wvfs xenfs xenix xfs zisofs zonefs
" Options
" -------
@@ -80,10 +80,10 @@ syn match fsOptionsKeywords contained /\<x-systemd\.\%(device-bound\|automount\|
syn match fsOptionsKeywords contained /\<x-initrd\.mount/
syn match fsOptionsKeywords contained /\<cache=/ nextgroup=fsOptionsCache
-syn keyword fsOptionsCache yes no none strict loose fscache mmap
+syn keyword fsOptionsCache contained yes no none strict loose fscache mmap
syn match fsOptionsKeywords contained /\<dax=/ nextgroup=fsOptionsDax
-syn keyword fsOptionsDax inode never always
+syn keyword fsOptionsDax contained inode never always
syn match fsOptionsKeywords contained /\<errors=/ nextgroup=fsOptionsErrors
syn keyword fsOptionsErrors contained continue panic withdraw remount-ro recover zone-ro zone-offline repair
@@ -288,8 +288,15 @@ syn match fsOptionsKeywords contained /\<\%(atime_quantum\|preferred_slot\|local
syn keyword fsOptionsKeywords contained strictatime inode64
" Options: overlay
+syn match fsOptionsKeywords contained /\<\%(index\|uuid\|nfs_export\|metacopy\)=/ nextgroup=fsOptionsOverlayBool
+syn keyword fsOptionsOverlayBool contained on off
+syn match fsOptionsKeywords contained /\<\%(lowerdir\|upperdir\|workdir\)=/ nextgroup=fsOptionsOverlayDir
+syn match fsOptionsOverlayDir contained /[^,[:space:]]*/
syn match fsOptionsKeywords contained /\<redirect_dir=/ nextgroup=fsOptionsOverlayRedirectDir
syn keyword fsOptionsOverlayRedirectDir contained on follow off nofollow
+syn match fsOptionsKeywords contained /\<xino=/ nextgroup=fsOptionsOverlayXino
+syn keyword fsOptionsOverlayXino contained on off auto
+syn keyword fsOptionsKeywords contained userxattr volatile
" Options: proc
syn match fsOptionsKeywords contained /\<\%(hidepid\|subset\)=/ nextgroup=fsOptionsString
@@ -462,7 +469,10 @@ hi def link fsOptionsNumberOctal Number
hi def link fsOptionsNumberSigned Number
hi def link fsOptionsOcfs2Coherency String
hi def link fsOptionsOcfs2ResvLevel Number
+hi def link fsOptionsOverlayBool Boolean
+hi def link fsOptionsOverlayDir String
hi def link fsOptionsOverlayRedirectDir String
+hi def link fsOptionsOverlayXino String
hi def link fsOptionsQnx4Bitmap String
hi def link fsOptionsQnx6Hold String
hi def link fsOptionsQnx6Sync String
diff --git a/runtime/syntax/glsl.vim b/runtime/syntax/glsl.vim
new file mode 100644
index 0000000000..06ffcba625
--- /dev/null
+++ b/runtime/syntax/glsl.vim
@@ -0,0 +1,752 @@
+" Language: OpenGL Shading Language
+" Maintainer: Gregory Anders <greg@gpanders.com>
+" Last Modified: 2024 Jul 21
+" Upstream: https://github.com/tikhomirov/vim-glsl
+
+if exists('b:current_syntax')
+ finish
+endif
+
+" Statements
+syn keyword glslConditional if else switch case default
+syn keyword glslRepeat for while do
+syn keyword glslStatement discard return break continue
+
+" Comments
+syn keyword glslTodo contained TODO FIXME XXX NOTE
+syn region glslCommentL start="//" skip="\\$" end="$" keepend contains=glslTodo,@Spell
+syn region glslComment matchgroup=glslCommentStart start="/\*" end="\*/" extend contains=glslTodo,@Spell
+
+" Preprocessor
+syn region glslPreCondit start="^\s*#\s*\(if\|ifdef\|ifndef\|else\|elif\|endif\)" skip="\\$" end="$" keepend
+syn region glslDefine start="^\s*#\s*\(define\|undef\)" skip="\\$" end="$" keepend
+syn keyword glslTokenConcat ##
+syn keyword glslPredefinedMacro __LINE__ __FILE__ __VERSION__ GL_ES
+syn region glslPreProc start="^\s*#\s*\(error\|pragma\|extension\|version\|line\)" skip="\\$" end="$" keepend
+syn region glslInclude start="^\s*#\s*include" skip="\\$" end="$" keepend
+
+" Folding Blocks
+syn region glslCurlyBlock start="{" end="}" transparent fold
+syn region glslParenBlock start="(" end=")" transparent fold
+
+" Boolean Constants
+syn keyword glslBoolean true false
+
+" Integer Numbers
+syn match glslDecimalInt display "\<\(0\|[1-9]\d*\)[uU]\?"
+syn match glslOctalInt display "\<0\o\+[uU]\?"
+syn match glslHexInt display "\<0[xX]\x\+[uU]\?"
+
+" Float Numbers
+syn match glslFloat display "\<\d\+\.\([eE][+-]\=\d\+\)\=\(lf\|LF\|f\|F\)\="
+syn match glslFloat display "\<\.\d\+\([eE][+-]\=\d\+\)\=\(lf\|LF\|f\|F\)\="
+syn match glslFloat display "\<\d\+[eE][+-]\=\d\+\(lf\|LF\|f\|F\)\="
+syn match glslFloat display "\<\d\+\.\d\+\([eE][+-]\=\d\+\)\=\(lf\|LF\|f\|F\)\="
+
+" Swizzles
+syn match glslSwizzle display /\.[xyzw]\{1,4\}\>/
+syn match glslSwizzle display /\.[rgba]\{1,4\}\>/
+syn match glslSwizzle display /\.[stpq]\{1,4\}\>/
+
+" Structure
+syn keyword glslStructure struct nextgroup=glslIdentifier skipwhite skipempty
+
+syn match glslIdentifier contains=glslIdentifierPrime "\%([a-zA-Z_]\)\%([a-zA-Z0-9_]\)*" display contained
+
+" Types
+syn keyword glslType accelerationStructureEXT
+syn keyword glslType atomic_uint
+syn keyword glslType bool
+syn keyword glslType bvec2
+syn keyword glslType bvec3
+syn keyword glslType bvec4
+syn keyword glslType dmat2
+syn keyword glslType dmat2x2
+syn keyword glslType dmat2x3
+syn keyword glslType dmat2x4
+syn keyword glslType dmat3
+syn keyword glslType dmat3x2
+syn keyword glslType dmat3x3
+syn keyword glslType dmat3x4
+syn keyword glslType dmat4
+syn keyword glslType dmat4x2
+syn keyword glslType dmat4x3
+syn keyword glslType dmat4x4
+syn keyword glslType double
+syn keyword glslType dvec2
+syn keyword glslType dvec3
+syn keyword glslType dvec4
+syn keyword glslType float
+syn keyword glslType iimage1D
+syn keyword glslType iimage1DArray
+syn keyword glslType iimage2D
+syn keyword glslType iimage2DArray
+syn keyword glslType iimage2DMS
+syn keyword glslType iimage2DMSArray
+syn keyword glslType iimage2DRect
+syn keyword glslType iimage3D
+syn keyword glslType iimageBuffer
+syn keyword glslType iimageCube
+syn keyword glslType iimageCubeArray
+syn keyword glslType image1D
+syn keyword glslType image1DArray
+syn keyword glslType image2D
+syn keyword glslType image2DArray
+syn keyword glslType image2DMS
+syn keyword glslType image2DMSArray
+syn keyword glslType image2DRect
+syn keyword glslType image3D
+syn keyword glslType imageBuffer
+syn keyword glslType imageCube
+syn keyword glslType imageCubeArray
+syn keyword glslType int
+syn keyword glslType isampler1D
+syn keyword glslType isampler1DArray
+syn keyword glslType isampler2D
+syn keyword glslType isampler2DArray
+syn keyword glslType isampler2DMS
+syn keyword glslType isampler2DMSArray
+syn keyword glslType isampler2DRect
+syn keyword glslType isampler3D
+syn keyword glslType isamplerBuffer
+syn keyword glslType isamplerCube
+syn keyword glslType isamplerCubeArray
+syn keyword glslType ivec2
+syn keyword glslType ivec3
+syn keyword glslType ivec4
+syn keyword glslType mat2
+syn keyword glslType mat2x2
+syn keyword glslType mat2x3
+syn keyword glslType mat2x4
+syn keyword glslType mat3
+syn keyword glslType mat3x2
+syn keyword glslType mat3x3
+syn keyword glslType mat3x4
+syn keyword glslType mat4
+syn keyword glslType mat4x2
+syn keyword glslType mat4x3
+syn keyword glslType mat4x4
+syn keyword glslType rayQueryEXT
+syn keyword glslType sampler1D
+syn keyword glslType sampler1DArray
+syn keyword glslType sampler1DArrayShadow
+syn keyword glslType sampler1DShadow
+syn keyword glslType sampler2D
+syn keyword glslType sampler2DArray
+syn keyword glslType sampler2DArrayShadow
+syn keyword glslType sampler2DMS
+syn keyword glslType sampler2DMSArray
+syn keyword glslType sampler2DRect
+syn keyword glslType sampler2DRectShadow
+syn keyword glslType sampler2DShadow
+syn keyword glslType sampler3D
+syn keyword glslType samplerBuffer
+syn keyword glslType samplerCube
+syn keyword glslType samplerCubeArray
+syn keyword glslType samplerCubeArrayShadow
+syn keyword glslType samplerCubeShadow
+syn keyword glslType uimage1D
+syn keyword glslType uimage1DArray
+syn keyword glslType uimage2D
+syn keyword glslType uimage2DArray
+syn keyword glslType uimage2DMS
+syn keyword glslType uimage2DMSArray
+syn keyword glslType uimage2DRect
+syn keyword glslType uimage3D
+syn keyword glslType uimageBuffer
+syn keyword glslType uimageCube
+syn keyword glslType uimageCubeArray
+syn keyword glslType uint
+syn keyword glslType usampler1D
+syn keyword glslType usampler1DArray
+syn keyword glslType usampler2D
+syn keyword glslType usampler2DArray
+syn keyword glslType usampler2DMS
+syn keyword glslType usampler2DMSArray
+syn keyword glslType usampler2DRect
+syn keyword glslType usampler3D
+syn keyword glslType usamplerBuffer
+syn keyword glslType usamplerCube
+syn keyword glslType usamplerCubeArray
+syn keyword glslType uvec2
+syn keyword glslType uvec3
+syn keyword glslType uvec4
+syn keyword glslType vec2
+syn keyword glslType vec3
+syn keyword glslType vec4
+syn keyword glslType void
+
+" Qualifiers
+syn keyword glslQualifier align
+syn keyword glslQualifier attribute
+syn keyword glslQualifier binding
+syn keyword glslQualifier buffer
+syn keyword glslQualifier callableDataEXT
+syn keyword glslQualifier callableDataInEXT
+syn keyword glslQualifier ccw
+syn keyword glslQualifier centroid
+syn keyword glslQualifier centroid varying
+syn keyword glslQualifier coherent
+syn keyword glslQualifier column_major
+syn keyword glslQualifier const
+syn keyword glslQualifier cw
+syn keyword glslQualifier depth_any
+syn keyword glslQualifier depth_greater
+syn keyword glslQualifier depth_less
+syn keyword glslQualifier depth_unchanged
+syn keyword glslQualifier early_fragment_tests
+syn keyword glslQualifier equal_spacing
+syn keyword glslQualifier flat
+syn keyword glslQualifier fractional_even_spacing
+syn keyword glslQualifier fractional_odd_spacing
+syn keyword glslQualifier highp
+syn keyword glslQualifier hitAttributeEXT
+syn keyword glslQualifier in
+syn keyword glslQualifier index
+syn keyword glslQualifier inout
+syn keyword glslQualifier invariant
+syn keyword glslQualifier invocations
+syn keyword glslQualifier isolines
+syn keyword glslQualifier layout
+syn keyword glslQualifier line_strip
+syn keyword glslQualifier lines
+syn keyword glslQualifier lines_adjacency
+syn keyword glslQualifier local_size_x
+syn keyword glslQualifier local_size_y
+syn keyword glslQualifier local_size_z
+syn keyword glslQualifier location
+syn keyword glslQualifier lowp
+syn keyword glslQualifier max_vertices
+syn keyword glslQualifier mediump
+syn keyword glslQualifier nonuniformEXT
+syn keyword glslQualifier noperspective
+syn keyword glslQualifier offset
+syn keyword glslQualifier origin_upper_left
+syn keyword glslQualifier out
+syn keyword glslQualifier packed
+syn keyword glslQualifier patch
+syn keyword glslQualifier pixel_center_integer
+syn keyword glslQualifier point_mode
+syn keyword glslQualifier points
+syn keyword glslQualifier precise
+syn keyword glslQualifier precision
+syn keyword glslQualifier quads
+syn keyword glslQualifier r11f_g11f_b10f
+syn keyword glslQualifier r16
+syn keyword glslQualifier r16_snorm
+syn keyword glslQualifier r16f
+syn keyword glslQualifier r16i
+syn keyword glslQualifier r16ui
+syn keyword glslQualifier r32f
+syn keyword glslQualifier r32i
+syn keyword glslQualifier r32ui
+syn keyword glslQualifier r8
+syn keyword glslQualifier r8_snorm
+syn keyword glslQualifier r8i
+syn keyword glslQualifier r8ui
+syn keyword glslQualifier rayPayloadEXT
+syn keyword glslQualifier rayPayloadInEXT
+syn keyword glslQualifier readonly
+syn keyword glslQualifier restrict
+syn keyword glslQualifier rg16
+syn keyword glslQualifier rg16_snorm
+syn keyword glslQualifier rg16f
+syn keyword glslQualifier rg16i
+syn keyword glslQualifier rg16ui
+syn keyword glslQualifier rg32f
+syn keyword glslQualifier rg32i
+syn keyword glslQualifier rg32ui
+syn keyword glslQualifier rg8
+syn keyword glslQualifier rg8_snorm
+syn keyword glslQualifier rg8i
+syn keyword glslQualifier rg8ui
+syn keyword glslQualifier rgb10_a2
+syn keyword glslQualifier rgb10_a2ui
+syn keyword glslQualifier rgba16
+syn keyword glslQualifier rgba16_snorm
+syn keyword glslQualifier rgba16f
+syn keyword glslQualifier rgba16i
+syn keyword glslQualifier rgba16ui
+syn keyword glslQualifier rgba32f
+syn keyword glslQualifier rgba32i
+syn keyword glslQualifier rgba32ui
+syn keyword glslQualifier rgba8
+syn keyword glslQualifier rgba8_snorm
+syn keyword glslQualifier rgba8i
+syn keyword glslQualifier rgba8ui
+syn keyword glslQualifier row_major
+syn keyword glslQualifier sample
+syn keyword glslQualifier shaderRecordEXT
+syn keyword glslQualifier shared
+syn keyword glslQualifier smooth
+syn keyword glslQualifier std140
+syn keyword glslQualifier std430
+syn keyword glslQualifier stream
+syn keyword glslQualifier triangle_strip
+syn keyword glslQualifier triangles
+syn keyword glslQualifier triangles_adjacency
+syn keyword glslQualifier uniform
+syn keyword glslQualifier varying
+syn keyword glslQualifier vertices
+syn keyword glslQualifier volatile
+syn keyword glslQualifier writeonly
+syn keyword glslQualifier xfb_buffer
+syn keyword glslQualifier xfb_offset
+syn keyword glslQualifier xfb_stride
+
+" Built-in Constants
+syn keyword glslBuiltinConstant gl_CullDistance
+syn keyword glslBuiltinConstant gl_HitKindBackFacingTriangleEXT
+syn keyword glslBuiltinConstant gl_HitKindFrontFacingTriangleEXT
+syn keyword glslBuiltinConstant gl_MaxAtomicCounterBindings
+syn keyword glslBuiltinConstant gl_MaxAtomicCounterBufferSize
+syn keyword glslBuiltinConstant gl_MaxClipDistances
+syn keyword glslBuiltinConstant gl_MaxClipPlanes
+syn keyword glslBuiltinConstant gl_MaxCombinedAtomicCounterBuffers
+syn keyword glslBuiltinConstant gl_MaxCombinedAtomicCounters
+syn keyword glslBuiltinConstant gl_MaxCombinedClipAndCullDistances
+syn keyword glslBuiltinConstant gl_MaxCombinedImageUniforms
+syn keyword glslBuiltinConstant gl_MaxCombinedImageUnitsAndFragmentOutputs
+syn keyword glslBuiltinConstant gl_MaxCombinedShaderOutputResources
+syn keyword glslBuiltinConstant gl_MaxCombinedTextureImageUnits
+syn keyword glslBuiltinConstant gl_MaxComputeAtomicCounterBuffers
+syn keyword glslBuiltinConstant gl_MaxComputeAtomicCounters
+syn keyword glslBuiltinConstant gl_MaxComputeImageUniforms
+syn keyword glslBuiltinConstant gl_MaxComputeTextureImageUnits
+syn keyword glslBuiltinConstant gl_MaxComputeUniformComponents
+syn keyword glslBuiltinConstant gl_MaxComputeWorkGroupCount
+syn keyword glslBuiltinConstant gl_MaxComputeWorkGroupSize
+syn keyword glslBuiltinConstant gl_MaxCullDistances
+syn keyword glslBuiltinConstant gl_MaxDrawBuffers
+syn keyword glslBuiltinConstant gl_MaxFragmentAtomicCounterBuffers
+syn keyword glslBuiltinConstant gl_MaxFragmentAtomicCounters
+syn keyword glslBuiltinConstant gl_MaxFragmentImageUniforms
+syn keyword glslBuiltinConstant gl_MaxFragmentInputComponents
+syn keyword glslBuiltinConstant gl_MaxFragmentInputVectors
+syn keyword glslBuiltinConstant gl_MaxFragmentUniformComponents
+syn keyword glslBuiltinConstant gl_MaxFragmentUniformVectors
+syn keyword glslBuiltinConstant gl_MaxGeometryAtomicCounterBuffers
+syn keyword glslBuiltinConstant gl_MaxGeometryAtomicCounters
+syn keyword glslBuiltinConstant gl_MaxGeometryImageUniforms
+syn keyword glslBuiltinConstant gl_MaxGeometryInputComponents
+syn keyword glslBuiltinConstant gl_MaxGeometryOutputComponents
+syn keyword glslBuiltinConstant gl_MaxGeometryOutputVertices
+syn keyword glslBuiltinConstant gl_MaxGeometryTextureImageUnits
+syn keyword glslBuiltinConstant gl_MaxGeometryTotalOutputComponents
+syn keyword glslBuiltinConstant gl_MaxGeometryUniformComponents
+syn keyword glslBuiltinConstant gl_MaxGeometryVaryingComponents
+syn keyword glslBuiltinConstant gl_MaxImageSamples
+syn keyword glslBuiltinConstant gl_MaxImageUnits
+syn keyword glslBuiltinConstant gl_MaxLights
+syn keyword glslBuiltinConstant gl_MaxPatchVertices
+syn keyword glslBuiltinConstant gl_MaxProgramTexelOffset
+syn keyword glslBuiltinConstant gl_MaxSamples
+syn keyword glslBuiltinConstant gl_MaxTessControlAtomicCounterBuffers
+syn keyword glslBuiltinConstant gl_MaxTessControlAtomicCounters
+syn keyword glslBuiltinConstant gl_MaxTessControlImageUniforms
+syn keyword glslBuiltinConstant gl_MaxTessControlInputComponents
+syn keyword glslBuiltinConstant gl_MaxTessControlOutputComponents
+syn keyword glslBuiltinConstant gl_MaxTessControlTextureImageUnits
+syn keyword glslBuiltinConstant gl_MaxTessControlTotalOutputComponents
+syn keyword glslBuiltinConstant gl_MaxTessControlUniformComponents
+syn keyword glslBuiltinConstant gl_MaxTessEvaluationAtomicCounterBuffers
+syn keyword glslBuiltinConstant gl_MaxTessEvaluationAtomicCounters
+syn keyword glslBuiltinConstant gl_MaxTessEvaluationImageUniforms
+syn keyword glslBuiltinConstant gl_MaxTessEvaluationInputComponents
+syn keyword glslBuiltinConstant gl_MaxTessEvaluationOutputComponents
+syn keyword glslBuiltinConstant gl_MaxTessEvaluationTextureImageUnits
+syn keyword glslBuiltinConstant gl_MaxTessEvaluationUniformComponents
+syn keyword glslBuiltinConstant gl_MaxTessGenLevel
+syn keyword glslBuiltinConstant gl_MaxTessPatchComponents
+syn keyword glslBuiltinConstant gl_MaxTextureCoords
+syn keyword glslBuiltinConstant gl_MaxTextureImageUnits
+syn keyword glslBuiltinConstant gl_MaxTextureUnits
+syn keyword glslBuiltinConstant gl_MaxTransformFeedbackBuffers
+syn keyword glslBuiltinConstant gl_MaxTransformFeedbackInterleavedComponents
+syn keyword glslBuiltinConstant gl_MaxVaryingComponents
+syn keyword glslBuiltinConstant gl_MaxVaryingFloats
+syn keyword glslBuiltinConstant gl_MaxVaryingVectors
+syn keyword glslBuiltinConstant gl_MaxVertexAtomicCounterBuffers
+syn keyword glslBuiltinConstant gl_MaxVertexAtomicCounters
+syn keyword glslBuiltinConstant gl_MaxVertexAttribs
+syn keyword glslBuiltinConstant gl_MaxVertexImageUniforms
+syn keyword glslBuiltinConstant gl_MaxVertexOutputComponents
+syn keyword glslBuiltinConstant gl_MaxVertexOutputVectors
+syn keyword glslBuiltinConstant gl_MaxVertexTextureImageUnits
+syn keyword glslBuiltinConstant gl_MaxVertexUniformComponents
+syn keyword glslBuiltinConstant gl_MaxVertexUniformVectors
+syn keyword glslBuiltinConstant gl_MaxViewports
+syn keyword glslBuiltinConstant gl_MinProgramTexelOffset
+syn keyword glslBuiltinConstant gl_RayFlagsCullBackFacingTrianglesEXT
+syn keyword glslBuiltinConstant gl_RayFlagsCullFrontFacingTrianglesEXT
+syn keyword glslBuiltinConstant gl_RayFlagsCullNoOpaqueEXT
+syn keyword glslBuiltinConstant gl_RayFlagsCullOpaqueEXT
+syn keyword glslBuiltinConstant gl_RayFlagsNoOpaqueEXT
+syn keyword glslBuiltinConstant gl_RayFlagsNoneEXT
+syn keyword glslBuiltinConstant gl_RayFlagsOpaqueEXT
+syn keyword glslBuiltinConstant gl_RayFlagsSkipClosestHitShaderEXT
+syn keyword glslBuiltinConstant gl_RayFlagsTerminateOnFirstHitEXT
+syn keyword glslBuiltinConstant gl_RayQueryCandidateIntersectionAABBEXT
+syn keyword glslBuiltinConstant gl_RayQueryCandidateIntersectionTriangleEXT
+syn keyword glslBuiltinConstant gl_RayQueryCommittedIntersectionGeneratedEXT
+syn keyword glslBuiltinConstant gl_RayQueryCommittedIntersectionNoneEXT
+syn keyword glslBuiltinConstant gl_RayQueryCommittedIntersectionTriangleEXT
+
+" Built-in Variables
+syn keyword glslBuiltinVariable gl_BackColor
+syn keyword glslBuiltinVariable gl_BackLightModelProduct
+syn keyword glslBuiltinVariable gl_BackLightProduct
+syn keyword glslBuiltinVariable gl_BackLightProduct
+syn keyword glslBuiltinVariable gl_BackMaterial
+syn keyword glslBuiltinVariable gl_BackSecondaryColor
+syn keyword glslBuiltinVariable gl_ClipDistance
+syn keyword glslBuiltinVariable gl_ClipPlane
+syn keyword glslBuiltinVariable gl_ClipVertex
+syn keyword glslBuiltinVariable gl_Color
+syn keyword glslBuiltinVariable gl_DepthRange
+syn keyword glslBuiltinVariable gl_EyePlaneQ
+syn keyword glslBuiltinVariable gl_EyePlaneR
+syn keyword glslBuiltinVariable gl_EyePlaneS
+syn keyword glslBuiltinVariable gl_EyePlaneT
+syn keyword glslBuiltinVariable gl_Fog
+syn keyword glslBuiltinVariable gl_FogCoord
+syn keyword glslBuiltinVariable gl_FogFragCoord
+syn keyword glslBuiltinVariable gl_FragColor
+syn keyword glslBuiltinVariable gl_FragCoord
+syn keyword glslBuiltinVariable gl_FragData
+syn keyword glslBuiltinVariable gl_FragDepth
+syn keyword glslBuiltinVariable gl_FrontColor
+syn keyword glslBuiltinVariable gl_FrontFacing
+syn keyword glslBuiltinVariable gl_FrontLightModelProduct
+syn keyword glslBuiltinVariable gl_FrontLightProduct
+syn keyword glslBuiltinVariable gl_FrontMaterial
+syn keyword glslBuiltinVariable gl_FrontSecondaryColor
+syn keyword glslBuiltinVariable gl_GeometryIndexEXT
+syn keyword glslBuiltinVariable gl_GlobalInvocationID
+syn keyword glslBuiltinVariable gl_HelperInvocation
+syn keyword glslBuiltinVariable gl_HitKindEXT
+syn keyword glslBuiltinVariable gl_HitTEXT
+syn keyword glslBuiltinVariable gl_IncomingRayFlagsEXT
+syn keyword glslBuiltinVariable gl_InstanceCustomIndexEXT
+syn keyword glslBuiltinVariable gl_InstanceID
+syn keyword glslBuiltinVariable gl_InstanceID
+syn keyword glslBuiltinVariable gl_InvocationID
+syn keyword glslBuiltinVariable gl_LaunchIDEXT
+syn keyword glslBuiltinVariable gl_LaunchSizeEXT
+syn keyword glslBuiltinVariable gl_Layer
+syn keyword glslBuiltinVariable gl_LightModel
+syn keyword glslBuiltinVariable gl_LightSource
+syn keyword glslBuiltinVariable gl_LocalInvocationID
+syn keyword glslBuiltinVariable gl_LocalInvocationIndex
+syn keyword glslBuiltinVariable gl_ModelViewMatrix
+syn keyword glslBuiltinVariable gl_ModelViewMatrixInverse
+syn keyword glslBuiltinVariable gl_ModelViewMatrixInverseTranspose
+syn keyword glslBuiltinVariable gl_ModelViewMatrixTranspose
+syn keyword glslBuiltinVariable gl_ModelViewProjectionMatrix
+syn keyword glslBuiltinVariable gl_ModelViewProjectionMatrixInverse
+syn keyword glslBuiltinVariable gl_ModelViewProjectionMatrixInverseTranspose
+syn keyword glslBuiltinVariable gl_ModelViewProjectionMatrixTranspose
+syn keyword glslBuiltinVariable gl_MultiTexCoord0
+syn keyword glslBuiltinVariable gl_MultiTexCoord1
+syn keyword glslBuiltinVariable gl_MultiTexCoord2
+syn keyword glslBuiltinVariable gl_MultiTexCoord3
+syn keyword glslBuiltinVariable gl_MultiTexCoord4
+syn keyword glslBuiltinVariable gl_MultiTexCoord5
+syn keyword glslBuiltinVariable gl_MultiTexCoord6
+syn keyword glslBuiltinVariable gl_MultiTexCoord7
+syn keyword glslBuiltinVariable gl_Normal
+syn keyword glslBuiltinVariable gl_NormalMatrix
+syn keyword glslBuiltinVariable gl_NormalScale
+syn keyword glslBuiltinVariable gl_NumSamples
+syn keyword glslBuiltinVariable gl_NumWorkGroups
+syn keyword glslBuiltinVariable gl_ObjectPlaneQ
+syn keyword glslBuiltinVariable gl_ObjectPlaneR
+syn keyword glslBuiltinVariable gl_ObjectPlaneS
+syn keyword glslBuiltinVariable gl_ObjectPlaneT
+syn keyword glslBuiltinVariable gl_ObjectRayDirectionEXT
+syn keyword glslBuiltinVariable gl_ObjectRayOriginEXT
+syn keyword glslBuiltinVariable gl_ObjectToWorld3x4EXT
+syn keyword glslBuiltinVariable gl_ObjectToWorldEXT
+syn keyword glslBuiltinVariable gl_PatchVerticesIn
+syn keyword glslBuiltinVariable gl_Point
+syn keyword glslBuiltinVariable gl_PointCoord
+syn keyword glslBuiltinVariable gl_PointSize
+syn keyword glslBuiltinVariable gl_Position
+syn keyword glslBuiltinVariable gl_PrimitiveID
+syn keyword glslBuiltinVariable gl_PrimitiveID
+syn keyword glslBuiltinVariable gl_PrimitiveIDIn
+syn keyword glslBuiltinVariable gl_ProjectionMatrix
+syn keyword glslBuiltinVariable gl_ProjectionMatrixInverse
+syn keyword glslBuiltinVariable gl_ProjectionMatrixInverseTranspose
+syn keyword glslBuiltinVariable gl_ProjectionMatrixTranspose
+syn keyword glslBuiltinVariable gl_RayTmaxEXT
+syn keyword glslBuiltinVariable gl_RayTminEXT
+syn keyword glslBuiltinVariable gl_SampleID
+syn keyword glslBuiltinVariable gl_SampleMask
+syn keyword glslBuiltinVariable gl_SampleMaskIn
+syn keyword glslBuiltinVariable gl_SamplePosition
+syn keyword glslBuiltinVariable gl_SecondaryColor
+syn keyword glslBuiltinVariable gl_TessCoord
+syn keyword glslBuiltinVariable gl_TessLevelInner
+syn keyword glslBuiltinVariable gl_TessLevelOuter
+syn keyword glslBuiltinVariable gl_TexCoord
+syn keyword glslBuiltinVariable gl_TextureEnvColor
+syn keyword glslBuiltinVariable gl_TextureMatrix
+syn keyword glslBuiltinVariable gl_TextureMatrixInverse
+syn keyword glslBuiltinVariable gl_TextureMatrixInverseTranspose
+syn keyword glslBuiltinVariable gl_TextureMatrixTranspose
+syn keyword glslBuiltinVariable gl_Vertex
+syn keyword glslBuiltinVariable gl_VertexID
+syn keyword glslBuiltinVariable gl_VertexIndex
+syn keyword glslBuiltinVariable gl_ViewportIndex
+syn keyword glslBuiltinVariable gl_WorkGroupID
+syn keyword glslBuiltinVariable gl_WorkGroupSize
+syn keyword glslBuiltinVariable gl_WorldRayDirectionEXT
+syn keyword glslBuiltinVariable gl_WorldRayOriginEXT
+syn keyword glslBuiltinVariable gl_WorldToObject3x4EXT
+syn keyword glslBuiltinVariable gl_WorldToObjectEXT
+syn keyword glslBuiltinVariable gl_in
+syn keyword glslBuiltinVariable gl_out
+
+" Built-in Functions
+syn keyword glslBuiltinFunction EmitStreamVertex
+syn keyword glslBuiltinFunction EmitVertex
+syn keyword glslBuiltinFunction EndPrimitive
+syn keyword glslBuiltinFunction EndStreamPrimitive
+syn keyword glslBuiltinFunction abs
+syn keyword glslBuiltinFunction acos
+syn keyword glslBuiltinFunction acosh
+syn keyword glslBuiltinFunction all
+syn keyword glslBuiltinFunction any
+syn keyword glslBuiltinFunction asin
+syn keyword glslBuiltinFunction asinh
+syn keyword glslBuiltinFunction atan
+syn keyword glslBuiltinFunction atanh
+syn keyword glslBuiltinFunction atomicAdd
+syn keyword glslBuiltinFunction atomicAnd
+syn keyword glslBuiltinFunction atomicCompSwap
+syn keyword glslBuiltinFunction atomicCounter
+syn keyword glslBuiltinFunction atomicCounterDecrement
+syn keyword glslBuiltinFunction atomicCounterIncrement
+syn keyword glslBuiltinFunction atomicExchange
+syn keyword glslBuiltinFunction atomicMax
+syn keyword glslBuiltinFunction atomicMin
+syn keyword glslBuiltinFunction atomicOr
+syn keyword glslBuiltinFunction atomicXor
+syn keyword glslBuiltinFunction barrier
+syn keyword glslBuiltinFunction bitCount
+syn keyword glslBuiltinFunction bitfieldExtract
+syn keyword glslBuiltinFunction bitfieldInsert
+syn keyword glslBuiltinFunction bitfieldReverse
+syn keyword glslBuiltinFunction ceil
+syn keyword glslBuiltinFunction clamp
+syn keyword glslBuiltinFunction cos
+syn keyword glslBuiltinFunction cosh
+syn keyword glslBuiltinFunction cross
+syn keyword glslBuiltinFunction dFdx
+syn keyword glslBuiltinFunction dFdxCoarse
+syn keyword glslBuiltinFunction dFdxFine
+syn keyword glslBuiltinFunction dFdy
+syn keyword glslBuiltinFunction dFdyCoarse
+syn keyword glslBuiltinFunction dFdyFine
+syn keyword glslBuiltinFunction degrees
+syn keyword glslBuiltinFunction determinant
+syn keyword glslBuiltinFunction distance
+syn keyword glslBuiltinFunction dot
+syn keyword glslBuiltinFunction equal
+syn keyword glslBuiltinFunction executeCallableEXT
+syn keyword glslBuiltinFunction exp
+syn keyword glslBuiltinFunction exp2
+syn keyword glslBuiltinFunction faceforward
+syn keyword glslBuiltinFunction findLSB
+syn keyword glslBuiltinFunction findMSB
+syn keyword glslBuiltinFunction floatBitsToInt
+syn keyword glslBuiltinFunction floatBitsToUint
+syn keyword glslBuiltinFunction floor
+syn keyword glslBuiltinFunction fma
+syn keyword glslBuiltinFunction fract
+syn keyword glslBuiltinFunction frexp
+syn keyword glslBuiltinFunction ftransform
+syn keyword glslBuiltinFunction fwidth
+syn keyword glslBuiltinFunction fwidthCoarse
+syn keyword glslBuiltinFunction fwidthFine
+syn keyword glslBuiltinFunction greaterThan
+syn keyword glslBuiltinFunction greaterThanEqual
+syn keyword glslBuiltinFunction groupMemoryBarrier
+syn keyword glslBuiltinFunction ignoreIntersectionEXT
+syn keyword glslBuiltinFunction imageAtomicAdd
+syn keyword glslBuiltinFunction imageAtomicAnd
+syn keyword glslBuiltinFunction imageAtomicCompSwap
+syn keyword glslBuiltinFunction imageAtomicExchange
+syn keyword glslBuiltinFunction imageAtomicMax
+syn keyword glslBuiltinFunction imageAtomicMin
+syn keyword glslBuiltinFunction imageAtomicOr
+syn keyword glslBuiltinFunction imageAtomicXor
+syn keyword glslBuiltinFunction imageLoad
+syn keyword glslBuiltinFunction imageSize
+syn keyword glslBuiltinFunction imageStore
+syn keyword glslBuiltinFunction imulExtended
+syn keyword glslBuiltinFunction intBitsToFloat
+syn keyword glslBuiltinFunction interpolateAtCentroid
+syn keyword glslBuiltinFunction interpolateAtOffset
+syn keyword glslBuiltinFunction interpolateAtSample
+syn keyword glslBuiltinFunction inverse
+syn keyword glslBuiltinFunction inversesqrt
+syn keyword glslBuiltinFunction isinf
+syn keyword glslBuiltinFunction isnan
+syn keyword glslBuiltinFunction ldexp
+syn keyword glslBuiltinFunction length
+syn keyword glslBuiltinFunction lessThan
+syn keyword glslBuiltinFunction lessThanEqual
+syn keyword glslBuiltinFunction log
+syn keyword glslBuiltinFunction log2
+syn keyword glslBuiltinFunction matrixCompMult
+syn keyword glslBuiltinFunction max
+syn keyword glslBuiltinFunction memoryBarrier
+syn keyword glslBuiltinFunction memoryBarrierAtomicCounter
+syn keyword glslBuiltinFunction memoryBarrierBuffer
+syn keyword glslBuiltinFunction memoryBarrierImage
+syn keyword glslBuiltinFunction memoryBarrierShared
+syn keyword glslBuiltinFunction min
+syn keyword glslBuiltinFunction mix
+syn keyword glslBuiltinFunction mod
+syn keyword glslBuiltinFunction modf
+syn keyword glslBuiltinFunction noise1
+syn keyword glslBuiltinFunction noise2
+syn keyword glslBuiltinFunction noise3
+syn keyword glslBuiltinFunction noise4
+syn keyword glslBuiltinFunction normalize
+syn keyword glslBuiltinFunction not
+syn keyword glslBuiltinFunction notEqual
+syn keyword glslBuiltinFunction outerProduct
+syn keyword glslBuiltinFunction packDouble2x32
+syn keyword glslBuiltinFunction packHalf2x16
+syn keyword glslBuiltinFunction packSnorm2x16
+syn keyword glslBuiltinFunction packSnorm4x8
+syn keyword glslBuiltinFunction packUnorm2x16
+syn keyword glslBuiltinFunction packUnorm4x8
+syn keyword glslBuiltinFunction pow
+syn keyword glslBuiltinFunction radians
+syn keyword glslBuiltinFunction rayQueryConfirmIntersectionEXT
+syn keyword glslBuiltinFunction rayQueryGenerateIntersectionEXT
+syn keyword glslBuiltinFunction rayQueryGetIntersectionBarycentricsEXT
+syn keyword glslBuiltinFunction rayQueryGetIntersectionCandidateAABBOpaqueEXT
+syn keyword glslBuiltinFunction rayQueryGetIntersectionFrontFaceEXT
+syn keyword glslBuiltinFunction rayQueryGetIntersectionGeometryIndexEXT
+syn keyword glslBuiltinFunction rayQueryGetIntersectionInstanceCustomIndexEXT
+syn keyword glslBuiltinFunction rayQueryGetIntersectionInstanceIdEXT
+syn keyword glslBuiltinFunction rayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetEXT
+syn keyword glslBuiltinFunction rayQueryGetIntersectionObjectRayDirectionEXT
+syn keyword glslBuiltinFunction rayQueryGetIntersectionObjectRayOriginEXT
+syn keyword glslBuiltinFunction rayQueryGetIntersectionObjectToWorldEXT
+syn keyword glslBuiltinFunction rayQueryGetIntersectionPrimitiveIndexEXT
+syn keyword glslBuiltinFunction rayQueryGetIntersectionTEXT
+syn keyword glslBuiltinFunction rayQueryGetIntersectionTypeEXT
+syn keyword glslBuiltinFunction rayQueryGetIntersectionWorldToObjectEXT
+syn keyword glslBuiltinFunction rayQueryGetRayFlagsEXT
+syn keyword glslBuiltinFunction rayQueryGetRayTMinEXT
+syn keyword glslBuiltinFunction rayQueryGetWorldRayDirectionEXT
+syn keyword glslBuiltinFunction rayQueryGetWorldRayOriginEXT
+syn keyword glslBuiltinFunction rayQueryInitializeEXT
+syn keyword glslBuiltinFunction rayQueryProceedEXT
+syn keyword glslBuiltinFunction rayQueryTerminateEXT
+syn keyword glslBuiltinFunction reflect
+syn keyword glslBuiltinFunction refract
+syn keyword glslBuiltinFunction reportIntersectionEXT
+syn keyword glslBuiltinFunction round
+syn keyword glslBuiltinFunction roundEven
+syn keyword glslBuiltinFunction shadow1D
+syn keyword glslBuiltinFunction shadow1DLod
+syn keyword glslBuiltinFunction shadow1DProj
+syn keyword glslBuiltinFunction shadow1DProjLod
+syn keyword glslBuiltinFunction shadow2D
+syn keyword glslBuiltinFunction shadow2DLod
+syn keyword glslBuiltinFunction shadow2DProj
+syn keyword glslBuiltinFunction shadow2DProjLod
+syn keyword glslBuiltinFunction sign
+syn keyword glslBuiltinFunction sin
+syn keyword glslBuiltinFunction sinh
+syn keyword glslBuiltinFunction smoothstep
+syn keyword glslBuiltinFunction sqrt
+syn keyword glslBuiltinFunction step
+syn keyword glslBuiltinFunction tan
+syn keyword glslBuiltinFunction tanh
+syn keyword glslBuiltinFunction terminateRayEXT
+syn keyword glslBuiltinFunction texelFetch
+syn keyword glslBuiltinFunction texelFetchOffset
+syn keyword glslBuiltinFunction texture
+syn keyword glslBuiltinFunction texture1D
+syn keyword glslBuiltinFunction texture1DLod
+syn keyword glslBuiltinFunction texture1DProj
+syn keyword glslBuiltinFunction texture1DProjLod
+syn keyword glslBuiltinFunction texture2D
+syn keyword glslBuiltinFunction texture2DLod
+syn keyword glslBuiltinFunction texture2DProj
+syn keyword glslBuiltinFunction texture2DProjLod
+syn keyword glslBuiltinFunction texture3D
+syn keyword glslBuiltinFunction texture3DLod
+syn keyword glslBuiltinFunction texture3DProj
+syn keyword glslBuiltinFunction texture3DProjLod
+syn keyword glslBuiltinFunction textureCube
+syn keyword glslBuiltinFunction textureCubeLod
+syn keyword glslBuiltinFunction textureGather
+syn keyword glslBuiltinFunction textureGatherOffset
+syn keyword glslBuiltinFunction textureGatherOffsets
+syn keyword glslBuiltinFunction textureGrad
+syn keyword glslBuiltinFunction textureGradOffset
+syn keyword glslBuiltinFunction textureLod
+syn keyword glslBuiltinFunction textureLodOffset
+syn keyword glslBuiltinFunction textureOffset
+syn keyword glslBuiltinFunction textureProj
+syn keyword glslBuiltinFunction textureProjGrad
+syn keyword glslBuiltinFunction textureProjGradOffset
+syn keyword glslBuiltinFunction textureProjLod
+syn keyword glslBuiltinFunction textureProjLodOffset
+syn keyword glslBuiltinFunction textureProjOffset
+syn keyword glslBuiltinFunction textureQueryLevels
+syn keyword glslBuiltinFunction textureQueryLod
+syn keyword glslBuiltinFunction textureSize
+syn keyword glslBuiltinFunction traceRayEXT
+syn keyword glslBuiltinFunction transpose
+syn keyword glslBuiltinFunction trunc
+syn keyword glslBuiltinFunction uaddCarry
+syn keyword glslBuiltinFunction uintBitsToFloat
+syn keyword glslBuiltinFunction umulExtended
+syn keyword glslBuiltinFunction unpackDouble2x32
+syn keyword glslBuiltinFunction unpackHalf2x16
+syn keyword glslBuiltinFunction unpackSnorm2x16
+syn keyword glslBuiltinFunction unpackSnorm4x8
+syn keyword glslBuiltinFunction unpackUnorm2x16
+syn keyword glslBuiltinFunction unpackUnorm4x8
+syn keyword glslBuiltinFunction usubBorrow
+
+hi def link glslConditional Conditional
+hi def link glslRepeat Repeat
+hi def link glslStatement Statement
+hi def link glslTodo Todo
+hi def link glslCommentL glslComment
+hi def link glslCommentStart glslComment
+hi def link glslComment Comment
+hi def link glslPreCondit PreCondit
+hi def link glslDefine Define
+hi def link glslTokenConcat glslPreProc
+hi def link glslPredefinedMacro Macro
+hi def link glslPreProc PreProc
+hi def link glslInclude Include
+hi def link glslBoolean Boolean
+hi def link glslDecimalInt glslInteger
+hi def link glslOctalInt glslInteger
+hi def link glslHexInt glslInteger
+hi def link glslInteger Number
+hi def link glslFloat Float
+hi def link glslIdentifierPrime glslIdentifier
+hi def link glslIdentifier Identifier
+hi def link glslStructure Structure
+hi def link glslType Type
+hi def link glslQualifier StorageClass
+hi def link glslBuiltinConstant Constant
+hi def link glslBuiltinFunction Function
+hi def link glslBuiltinVariable Identifier
+hi def link glslSwizzle Identifier
+
+let b:current_syntax = 'glsl'
diff --git a/runtime/syntax/goaccess.vim b/runtime/syntax/goaccess.vim
new file mode 100644
index 0000000000..4ca8f6d921
--- /dev/null
+++ b/runtime/syntax/goaccess.vim
@@ -0,0 +1,34 @@
+" Vim syntax file
+" Language: GoAccess configuration
+" Maintainer: Adam Monsen <haircut@gmail.com>
+" Last Change: 2024 Aug 1
+" Remark: see https://goaccess.io/man#configuration
+"
+" The GoAccess configuration file syntax is line-separated settings. Settings
+" are space-separated key value pairs. Comments are any line starting with a
+" hash mark.
+" Example: https://github.com/allinurl/goaccess/blob/master/config/goaccess.conf
+"
+" This syntax definition supports todo/fixme highlighting in comments, and
+" special (Keyword) highlighting if a setting's value is 'true' or 'false'.
+"
+" TODO: a value is required, so use extreme highlighting (e.g. bright red
+" background) if a setting is missing a value.
+
+if exists("b:current_syntax")
+ finish
+endif
+
+syn match goaccessSettingName '^[a-z-]\+' nextgroup=goaccessSettingValue
+syn match goaccessSettingValue '\s\+.\+$' contains=goaccessKeyword
+syn match goaccessComment "^#.*$" contains=goaccessTodo,@Spell
+syn keyword goaccessTodo TODO FIXME contained
+syn keyword goaccessKeyword true false contained
+
+hi def link goaccessSettingName Type
+hi def link goaccessSettingValue String
+hi def link goaccessComment Comment
+hi def link goaccessTodo Todo
+hi def link goaccessKeyword Keyword
+
+let b:current_syntax = "goaccess"
diff --git a/runtime/syntax/hare.vim b/runtime/syntax/hare.vim
index 07cf33fb11..4c7ae92486 100644
--- a/runtime/syntax/hare.vim
+++ b/runtime/syntax/hare.vim
@@ -1,119 +1,142 @@
-" PRELUDE {{{1
-" Vim syntax file
-" Language: Hare
-" Maintainer: Amelia Clarke <me@rsaihe.dev>
-" Last Change: 2022-09-21
+" Vim syntax file.
+" Language: Hare
+" Maintainer: Amelia Clarke <selene@perilune.dev>
+" Last Change: 2024-05-10
+" Upstream: https://git.sr.ht/~sircmpwn/hare.vim
-if exists("b:current_syntax")
+if exists('b:current_syntax')
finish
endif
-let b:current_syntax = "hare"
+syn include @haredoc syntax/haredoc.vim
+let b:current_syntax = 'hare'
-" SYNTAX {{{1
+" Syntax {{{1
syn case match
+syn iskeyword @,48-57,@-@,_
-" KEYWORDS {{{2
-syn keyword hareConditional if else match switch
+" Keywords {{{2
+syn keyword hareConditional else if match switch
+syn keyword hareDefine def
+syn keyword hareInclude use
syn keyword hareKeyword break continue return yield
+syn keyword hareKeyword case
+syn keyword hareKeyword const let
syn keyword hareKeyword defer
+syn keyword hareKeyword export static
syn keyword hareKeyword fn
-syn keyword hareKeyword let
-syn keyword hareLabel case
syn keyword hareOperator as is
syn keyword hareRepeat for
-syn keyword hareStorageClass const def export nullable static
-syn keyword hareStructure enum struct union
syn keyword hareTypedef type
-" C ABI.
-syn keyword hareKeyword vastart vaarg vaend
-
-" BUILTINS {{{2
-syn keyword hareBuiltin abort
+" Attributes.
+syn keyword hareAttribute @fini @init @test
+syn keyword hareAttribute @offset @packed
+syn keyword hareAttribute @symbol
+syn keyword hareAttribute @threadlocal
+
+" Builtins.
+syn keyword hareBuiltin abort assert
+syn keyword hareBuiltin align len offset
syn keyword hareBuiltin alloc free
syn keyword hareBuiltin append delete insert
-syn keyword hareBuiltin assert
-syn keyword hareBuiltin len offset
+syn keyword hareBuiltin vaarg vaend vastart
-" TYPES {{{2
+" Types {{{2
syn keyword hareType bool
-syn keyword hareType char str
+syn keyword hareType done
syn keyword hareType f32 f64
-syn keyword hareType u8 u16 u32 u64 i8 i16 i32 i64
-syn keyword hareType uint int
-syn keyword hareType rune
+syn keyword hareType i8 i16 i32 i64 int
+syn keyword hareType never
+syn keyword hareType opaque
+syn keyword hareType rune str
+syn keyword hareType u8 u16 u32 u64 uint
syn keyword hareType uintptr
+syn keyword hareType valist
syn keyword hareType void
-" C ABI.
-syn keyword hareType valist
+" Other types.
+syn keyword hareStorageClass nullable
+syn keyword hareStructure enum struct union
-" LITERALS {{{2
-syn keyword hareBoolean true false
-syn keyword hareNull null
-
-" Number literals.
-syn match hareNumber "\v(\.@1<!|\.\.)\zs<\d+([Ee][+-]?\d+)?(z|[iu](8|16|32|64)?)?>" display
-syn match hareNumber "\v(\.@1<!|\.\.)\zs<0b[01]+(z|[iu](8|16|32|64)?)?>" display
-syn match hareNumber "\v(\.@1<!|\.\.)\zs<0o\o+(z|[iu](8|16|32|64)?)?>" display
-syn match hareNumber "\v(\.@1<!|\.\.)\zs<0x\x+(z|[iu](8|16|32|64)?)?>" display
-
-" Floating-point number literals.
-syn match hareFloat "\v<\d+\.\d+([Ee][+-]?\d+)?(f32|f64)?>" display
-syn match hareFloat "\v<\d+([Ee][+-]?\d+)?(f32|f64)>" display
-
-" String and rune literals.
-syn match hareEscape "\\[\\'"0abfnrtv]" contained display
-syn match hareEscape "\v\\(x\x{2}|u\x{4}|U\x{8})" contained display
-syn match hareFormat "\v\{\d*(\%\d*|(:[ 0+-]?\d*(\.\d+)?[Xbox]?))?}" contained display
-syn match hareFormat "\({{\|}}\)" contained display
-syn region hareRune start="'" end="'\|$" skip="\\'" contains=hareEscape display extend
-syn region hareString start=+"+ end=+"\|$+ skip=+\\"+ contains=hareEscape,hareFormat display extend
-syn region hareString start="`" end="`\|$" contains=hareFormat display
-
-" MISCELLANEOUS {{{2
-syn keyword hareTodo FIXME TODO XXX contained
+" Literals {{{2
+syn keyword hareBoolean false true
+syn keyword hareConstant null
-" Attributes.
-syn match hareAttribute "@[a-z]*"
+" Integer literals.
+syn match hareNumber '\v<%(0|[1-9]%(_?\d)*)%([Ee]\+?\d+)?%([iu]%(8|16|32|64)?|z)?>' display
+syn match hareNumber '\v<0b[01]%(_?[01])*%([iu]%(8|16|32|64)?|z)?>' display
+syn match hareNumber '\v<0o\o%(_?\o)*%([iu]%(8|16|32|64)?|z)?>' display
+syn match hareNumber '\v<0x\x%(_?\x)*%([iu]%(8|16|32|64)?|z)?>' display
-" Blocks.
-syn region hareBlock start="{" end="}" fold transparent
+" Floating-point literals.
+syn match hareFloat '\v<%(0|[1-9]%(_?\d)*)\.\d%(_?\d)*%([Ee][+-]?\d+)?%(f32|f64)?>' display
+syn match hareFloat '\v<%(0|[1-9]%(_?\d)*)%([Ee][+-]?\d+)?%(f32|f64)>' display
+syn match hareFloat '\v<0x\x%(_?\x)*%(\.\x%(_?\x)*)?[Pp][+-]?\d+%(f32|f64)?>' display
+
+" Rune and string literals.
+syn region hareRune start="'" skip="\\'" end="'" contains=hareEscape
+syn region hareString start='"' skip='\\"' end='"' contains=hareEscape,hareFormat
+syn region hareString start='`' end='`' contains=hareFormat
+
+" Escape sequences.
+syn match hareEscape '\\[0abfnrtv\\'"]' contained
+syn match hareEscape '\v\\%(x\x{2}|u\x{4}|U\x{8})' contained display
+
+" Format sequences.
+syn match hareFormat '\v\{\d*%(:%(\.?\d+|[ +\-=Xbefgox]|F[.2ESUs]|_%(.|\\%([0abfnrtv\\'"]|x\x{2}|u\x{4}|U\x{8})))*)?}' contained contains=hareEscape display
+syn match hareFormat '{\d*%\d*}' contained display
+syn match hareFormat '{{\|}}' contained display
+
+" Miscellaneous {{{2
" Comments.
-syn region hareComment start="//" end="$" contains=hareCommentDoc,hareTodo,@Spell display keepend
-syn region hareCommentDoc start="\[\[" end="]]\|\ze\_s" contained display
+syn region hareComment start='//' end='$' contains=hareTodo,@haredoc,@Spell display
+syn keyword hareTodo FIXME TODO XXX contained
+
+" Identifiers.
+syn match hareDelimiter '::' display
+syn match hareName '\<\h\w*\>' nextgroup=@harePostfix skipempty skipwhite transparent
-" The size keyword can be either a builtin or a type.
-syn match hareBuiltin "\v<size>\ze(\_s*//.*\_$)*\_s*\(" contains=hareComment
-syn match hareType "\v<size>((\_s*//.*\_$)*\_s*\()@!" contains=hareComment
+" Labels.
+syn match hareLabel ':\h\w*\>' display
-" Trailing whitespace.
-syn match hareSpaceError "\v\s+$" display excludenl
-syn match hareSpaceError "\v\zs +\ze\t" display
+" Match `size` as a type unless it is followed by an open paren.
+syn match hareType '\<size\>' display
+syn match hareBuiltin '\<size\ze(' display
-" Use statement.
-syn region hareUse start="\v^\s*\zsuse>" end=";" contains=hareComment display
+" Postfix expressions.
+syn cluster harePostfix contains=hareErrorTest,hareField,hareIndex,hareParens
+syn match hareErrorTest '!=\@!' contained nextgroup=@harePostfix skipempty skipwhite
+syn match hareErrorTest '?' nextgroup=@harePostfix skipempty skipwhite
+syn match hareField '\.\w*\>'hs=s+1 contained contains=hareNumber nextgroup=@harePostfix skipempty skipwhite
+syn region hareIndex start='\[' end=']' contained nextgroup=@harePostfix skipempty skipwhite transparent
+syn region hareParens start='(' end=')' nextgroup=@harePostfix skipempty skipwhite transparent
-syn match hareErrorAssertion "\v(^([^/]|//@!)*\)\_s*)@<=!\=@!"
-syn match hareQuestionMark "?"
+" Whitespace errors.
+syn match hareSpaceError '^ \+\ze\t' display
+syn match hareSpaceError excludenl '\s\+$' containedin=ALL display
-" DEFAULT HIGHLIGHTING {{{1
-hi def link hareAttribute Keyword
+" Folding {{{3
+syn region hareBlock start='{' end='}' fold transparent
+
+" Default highlighting {{{1
+hi def link hareAttribute PreProc
hi def link hareBoolean Boolean
-hi def link hareBuiltin Function
+hi def link hareBuiltin Operator
hi def link hareComment Comment
-hi def link hareCommentDoc SpecialComment
hi def link hareConditional Conditional
+hi def link hareConstant Constant
+hi def link hareDefine Define
+hi def link hareDelimiter Delimiter
+hi def link hareErrorTest Special
hi def link hareEscape SpecialChar
hi def link hareFloat Float
hi def link hareFormat SpecialChar
+hi def link hareInclude Include
hi def link hareKeyword Keyword
-hi def link hareLabel Label
-hi def link hareNull Constant
+hi def link hareLabel Special
hi def link hareNumber Number
hi def link hareOperator Operator
-hi def link hareQuestionMark Special
hi def link hareRepeat Repeat
hi def link hareRune Character
hi def link hareStorageClass StorageClass
@@ -122,12 +145,13 @@ hi def link hareStructure Structure
hi def link hareTodo Todo
hi def link hareType Type
hi def link hareTypedef Typedef
-hi def link hareUse PreProc
-hi def link hareSpaceError Error
-autocmd InsertEnter * hi link hareSpaceError NONE
-autocmd InsertLeave * hi link hareSpaceError Error
+" Highlight embedded haredoc references.
+hi! def link haredocRefValid SpecialComment
-hi def hareErrorAssertion ctermfg=red cterm=bold guifg=red gui=bold
+" Highlight whitespace errors by default.
+if get(g:, 'hare_space_error', 1)
+ hi def link hareSpaceError Error
+endif
-" vim: tabstop=8 shiftwidth=2 expandtab
+" vim: et sts=2 sw=2 ts=8
diff --git a/runtime/syntax/haredoc.vim b/runtime/syntax/haredoc.vim
new file mode 100644
index 0000000000..09c99c1d56
--- /dev/null
+++ b/runtime/syntax/haredoc.vim
@@ -0,0 +1,32 @@
+" Vim syntax file.
+" Language: Haredoc (Hare documentation format)
+" Maintainer: Amelia Clarke <selene@perilune.dev>
+" Last Change: 2024-05-10
+" Upstream: https://git.sr.ht/~selene/hare.vim
+
+if exists('b:current_syntax')
+ finish
+endif
+let b:current_syntax = 'haredoc'
+
+" Syntax {{{1
+syn case match
+syn iskeyword @,48-57,_
+
+" Code samples.
+syn region haredocCodeSample excludenl start='\t\zs' end='$' contains=@NoSpell display
+
+" References to other declarations and modules.
+syn region haredocRef start='\[\[' end=']]' contains=haredocRefValid,@NoSpell display keepend oneline
+syn match haredocRefValid '\v\[\[\h\w*%(::\h\w*)*%(::)?]]' contained contains=@NoSpell display
+
+" Miscellaneous.
+syn keyword haredocTodo FIXME TODO XXX
+
+" Default highlighting {{{1
+hi def link haredocCodeSample Comment
+hi def link haredocRef Error
+hi def link haredocRefValid Special
+hi def link haredocTodo Todo
+
+" vim: et sts=2 sw=2 ts=8
diff --git a/runtime/syntax/hcl.vim b/runtime/syntax/hcl.vim
new file mode 100644
index 0000000000..5e9349ab38
--- /dev/null
+++ b/runtime/syntax/hcl.vim
@@ -0,0 +1,66 @@
+" Vim syntax file
+" Language: HCL
+" Maintainer: Gregory Anders
+" Upstream: https://github.com/hashivim/vim-terraform
+" Last Change: 2024-09-03
+
+if exists('b:current_syntax')
+ finish
+endif
+
+syn iskeyword a-z,A-Z,48-57,_,-
+
+syn case match
+
+" A block is introduced by a type, some number of labels - which are either
+" strings or identifiers - and an opening curly brace. Match the type.
+syn match hclBlockType /^\s*\zs\K\k*\ze\s\+\(\("\K\k*"\|\K\k*\)\s\+\)*{/
+
+" An attribute name is an identifier followed by an equals sign.
+syn match hclAttributeAssignment /\(\K\k*\.\)*\K\k*\s\+=\s/ contains=hclAttributeName
+syn match hclAttributeName /\<\K\k*\>/ contained
+
+syn keyword hclValueBool true false
+
+syn keyword hclTodo contained TODO FIXME XXX BUG
+syn region hclComment start="/\*" end="\*/" contains=hclTodo,@Spell
+syn region hclComment start="#" end="$" contains=hclTodo,@Spell
+syn region hclComment start="//" end="$" contains=hclTodo,@Spell
+
+""" misc.
+syn match hclValueDec "\<[0-9]\+\([kKmMgG]b\?\)\?\>"
+syn match hclValueHexaDec "\<0x[0-9a-f]\+\([kKmMgG]b\?\)\?\>"
+syn match hclBraces "[\[\]]"
+
+""" skip \" and \\ in strings.
+syn region hclValueString start=/"/ skip=/\\\\\|\\"/ end=/"/ contains=hclStringInterp
+syn region hclStringInterp matchgroup=hclBraces start=/\(^\|[^$]\)\$\zs{/ end=/}/ contained contains=ALLBUT,hclAttributeName
+syn region hclHereDocText start=/<<-\?\z([a-z0-9A-Z]\+\)/ end=/^\s*\z1/ contains=hclStringInterp
+
+"" Functions.
+syn match hclFunction "[a-z0-9]\+(\@="
+
+""" HCL2
+syn keyword hclRepeat for in
+syn keyword hclConditional if
+syn keyword hclValueNull null
+
+" enable block folding
+syn region hclBlockBody matchgroup=hclBraces start="{" end="}" fold transparent
+
+hi def link hclComment Comment
+hi def link hclTodo Todo
+hi def link hclBraces Delimiter
+hi def link hclAttributeName Identifier
+hi def link hclBlockType Type
+hi def link hclValueBool Boolean
+hi def link hclValueDec Number
+hi def link hclValueHexaDec Number
+hi def link hclValueString String
+hi def link hclHereDocText String
+hi def link hclFunction Function
+hi def link hclRepeat Repeat
+hi def link hclConditional Conditional
+hi def link hclValueNull Constant
+
+let b:current_syntax = 'hcl'
diff --git a/runtime/syntax/help.vim b/runtime/syntax/help.vim
index fced5e7dd1..fd128bb0b5 100644
--- a/runtime/syntax/help.vim
+++ b/runtime/syntax/help.vim
@@ -1,7 +1,7 @@
" Vim syntax file
" Language: Vim help file
" Maintainer: The Vim Project <https://github.com/vim/vim>
-" Last Change: 2023 Aug 10
+" Last Change: 2024 Oct 05
" Former Maintainer: Bram Moolenaar <Bram@vim.org>
" Quit when a (custom) syntax file was already loaded
@@ -15,7 +15,7 @@ set cpo&vim
syn match helpHeadline "^[A-Z.][-A-Z0-9 .,()_']*?\=\ze\(\s\+\*\|$\)"
syn match helpSectionDelim "^===.*===$"
syn match helpSectionDelim "^---.*--$"
-" Neovim: support language annotation in codeblocks
+" Nvim: support language annotation in codeblocks
if has("conceal")
syn region helpExample matchgroup=helpIgnore start=" >[a-z0-9]*$" start="^>[a-z0-9]*$" end="^[^ \t]"me=e-1 end="^<" concealends
else
@@ -60,10 +60,14 @@ syn match helpSpecial "\<N\.\s"me=e-2
syn match helpSpecial "(N\>"ms=s+1
syn match helpSpecial "\[N]"
-" avoid highlighting N N in help.txt
+" avoid highlighting N N in quickref.txt
syn match helpSpecial "N N"he=s+1
syn match helpSpecial "Nth"me=e-2
syn match helpSpecial "N-1"me=e-2
+" highlighting N of cinoptions-values in indent.txt
+syn match helpSpecial "^\t-\?\zsNs\?\s"me=s+1
+" highlighting N of cinoptions-values in indent.txt
+syn match helpSpecial "^\t[>enf{}^L:=lbghNEpti+cC/(uUwWkmMjJ)*#P]N\s"ms=s+2,me=e-1
syn match helpSpecial "{[-_a-zA-Z0-9'"*+/:%#=[\]<>.,]\+}"
syn match helpSpecial "\s\[[-a-z^A-Z0-9_]\{2,}]"ms=s+1
syn match helpSpecial "<[-a-zA-Z0-9_]\+>"
diff --git a/runtime/syntax/hollywood.vim b/runtime/syntax/hollywood.vim
index 7846d5230f..16df9fa736 100644
--- a/runtime/syntax/hollywood.vim
+++ b/runtime/syntax/hollywood.vim
@@ -2,7 +2,7 @@
" Language: Hollywood 10.0
" Maintainer: Ola Sder <rolfkopman@gmail.com>
" First Author: Tom Crecelius <holly@net-eclipse.net>
-" Last Change: 2023 Mar 22
+" Last Change: 2024 Jun 20
" Highlighting Issues:
" Depending on your colour schema, Strings or Comments might be highlighted in
" a way, you don't like. If so, try one of the following settings after
@@ -30,7 +30,7 @@ let s:cpo_save = &cpo
set cpo&vim
if !exists("hw_version")
- let hw_version = 9
+ let hw_version = 10
let hw_subversion = 0
elseif !exists("hw_subversion")
let hw_subversion = 0
@@ -54,9 +54,9 @@ syn match hwError "\<\%(If\|End\|Else\|ElseIf\|Then\|Until\|In\|EndIf\|EndSwitc
syn region hwFunctionBlock transparent matchgroup=hwFunction start="\<Function\>" end="\<EndFunction\>" contains=ALLBUT,hwTodo,hwSpecial,hwElseIf,hwElse,hwIn,hwStep,hwFallThrough,hwLineStatement
" If .. Then
-syn region hwIfThen transparent matchgroup=hwCond start="\<If\>" end="\<Then\>\{-}"me=e-4 skipwhite skipempty
+syn region hwIfThen transparent matchgroup=hwCond start="\<If\>" end="\<Then\>\{-}"me=e-4 oneline skipwhite skipempty
" Then ... Else
-syn region hwThenElse transparent matchgroup=hwCond start="\<Then\>" end="$" end="\<Else\>" contains=ALLBUT,hwTodo,hwSpecial,hwIn,hwStep,hwLineStatement,hwIfEndIf,hwElseEndif,hwIfThen,hwThenElse skipwhite skipempty
+syn region hwThenElse transparent matchgroup=hwCond start="\<Then\>" end="$" end="\<Else\>" contains=hwFunction,hwUserFunction,hwElseIf,hwStatement,hwConstant containedin=hwIfThen oneline skipwhite skipempty
" If .. EndIf
syn region hwIfEndIf transparent matchgroup=hwCond start="\<If\>\(\(.\{-}Then.\{-}\)\@!\)" end="\<EndIf\>" contains=ALLBUT,hwTodo,hwSpecial,hwIn,hwStep,hwLineStatement skipwhite skipempty
@@ -98,6 +98,12 @@ syn region hwForTo transparent matchgroup=hwRepeat start="\<For\>" end="\<To\>"m
" To .. Next
syn region hwToNext transparent matchgroup=hwRepeat start="\<To\>" end="\<Next\>" contains=ALLBUT,hwTodo,hwSpecial,hwElseIf,hwElse,hwIn,hwLineStatement skipwhite skipempty
+" For .. In
+syn region hwForIn transparent matchgroup=hwRepeat start="\<For\>\(\(.\{-}To.\{-}\)\@!\)" end="\<In\>"me=e-2, skipwhite skipempty nextgroup=hwInNext
+
+" In .. Next
+syn region hwInNext transparent matchgroup=hwRepeat start="\<In\>" end="\<Next\>" contains=ALLBUT,hwTodo,hwSpecial,hwElseIf,hwElse,hwLineStatement skipwhite skipempty
+
syn keyword hwStep contained Step
syn keyword hwIn contained In
@@ -116,7 +122,7 @@ syn match hwConstant "#\<\%(ACTIVEWINDOW\|ADF_ANIM\|ADF_FX\|ADF_MOVEOBJECT\|ALL\
syn keyword hwFunction Abs ACos ActivateDisplay Add AddArcToPath AddBoxToPath AddCircleToPath AddEllipseToPath AddFontPath AddIconImage AddMove AddStr AddTab AddTextToPath AllocConsoleColor AllocMem AllocMemFromPointer AllocMemFromVirtualFile AppendPath ApplyPatch Arc ArcDistortBrush ARGB ArrayToStr Asc ASin Assert AsyncDrawFrame ATan ATan2 BarrelDistortBrush Base64Str Beep BeepConsole BeginAnimStream BeginDoubleBuffer BeginRefresh BGPicToBrush BinStr BitClear BitComplement BitSet BitTest BitXor Blue BlurBrush Box BreakEventHandler BreakWhileMouseOn BrushToBGPic BrushToGray BrushToMonochrome BrushToPenArray BrushToRGBArray ByteAsc ByteChr ByteLen ByteOffset ByteStrStr ByteVal CallJavaMethod CancelAsyncDraw CancelAsyncOperation CanonizePath Cast Ceil ChangeApplicationIcon ChangeBrushTransparency ChangeDirectory ChangeDisplayMode ChangeDisplaySize ChangeInterval CharcoalBrush CharOffset CharWidth CheckEvent CheckEvents Chr Circle ClearClipboard ClearConsole ClearConsoleStyle ClearEvents ClearInterval ClearMove ClearObjectData ClearPath ClearScreen ClearSerialQueue ClearTimeout CloseAmigaGuide CloseAnim CloseAudio CloseCatalog CloseConnection CloseConsole CloseDirectory CloseDisplay CloseFile CloseFont CloseMusic ClosePath CloseResourceMonitor CloseSerialPort CloseServer CloseUDPObject CloseVideo Cls CollectGarbage Collision ColorRequest CompareDates CompareStr CompressFile Concat ConfigureJoystick ConsolePrint ConsolePrintChr ConsolePrintNR ConsolePrompt ContinueAsyncOperation ContrastBrush ContrastPalette ConvertStr ConvertToBrush CopyAnim CopyBGPic CopyBrush CopyConsoleWindow CopyFile CopyLayer CopyMem CopyObjectData CopyPalette CopyPath CopyPens CopySample CopySprite CopyTable CopyTextObject Cos CountDirectoryEntries CountJoysticks CountStr CRC32 CRC32Str CreateAnim CreateBGPic CreateBorderBrush CreateBrush CreateButton CreateClipRegion CreateConsoleWindow CreateCoroutine CreateDisplay CreateFont CreateGradientBGPic CreateGradientBrush CreateIcon CreateKeyDown CreateLayer CreateList CreateMenu CreateMusic CreatePalette CreatePointer CreatePort CreateRainbowBGPic CreateRexxPort CreateSample CreateServer CreateShadowBrush CreateShortcut CreateSprite CreateTextObject CreateTexturedBGPic CreateTexturedBrush CreateUDPObject CropBrush CtrlCQuit CurveTo CyclePalette DateToTimestamp DateToUTC DebugOutput DebugPrint DebugPrintNR DebugPrompt DebugStr DebugVal DecomposeConsoleChr DecompressFile DecreasePointer DefineVirtualFile DefineVirtualFileFromString Deg DeleteAlphaChannel DeleteButton DeleteConsoleChr DeleteConsoleLine DeleteFile DeleteMask DeletePrefs DeselectMenuItem DeserializeTable DirectoryItems DisableAdvancedConsole DisableButton DisableEvent DisableEventHandler DisableLayers DisableLineHook DisableMenuItem DisablePlugin DisablePrecalculation DisableVWait DisplayAnimFrame DisplayBGPic DisplayBGPicPart DisplayBGPicPartFX DisplayBrush DisplayBrushFX DisplayBrushPart DisplaySprite DisplayTextObject DisplayTextObjectFX DisplayTransitionFX DisplayVideoFrame Div DoMove DownloadFile DrawConsoleBorder DrawConsoleBox DrawConsoleHLine DrawConsoleVLine DrawPath DumpButtons DumpLayers DumpMem DumpVideo DumpVideoTime EdgeBrush Ellipse EmbossBrush EmptyStr EnableAdvancedConsole EnableButton EnableEvent EnableEventHandler EnableLayers EnableLineHook EnableMenuItem EnablePlugin EnablePrecalculation EnableVWait End EndDoubleBuffer EndianSwap EndRefresh EndSelect EndsWith Eof EraseConsole Error EscapeQuit Eval Execute Exists ExitOnError Exp ExtendBrush ExtractPalette FileAttributes FileLength FileLines FilePart FilePos FileRequest FileSize FileToString FillMem FillMusicBuffer FindStr FinishAnimStream FinishAsyncDraw FlashConsole Flip FlipBrush FlipSprite FloodFill Floor FlushFile FlushMusicBuffer FlushSerialPort FontRequest ForcePathUse ForceSound ForceVideoDriver ForceVideoMode ForEach ForEachI FormatConsoleLine FormatDate FormatNumber FormatStr Frac FreeAnim FreeBGPic FreeBrush FreeClipRegion FreeConsoleColor FreeConsoleWindow FreeDisplay FreeEventCache FreeGlyphCache FreeIcon FreeLayers FreeMem FreeMenu FreeModule FreePalette FreePath FreePointer FreeSample FreeSprite FreeTextObject FrExp FullPath GammaBrush GammaPalette GCInfo GetAllocConsoleColor GetAnimFrame GetApplicationInfo GetApplicationList GetAsset GetAttribute GetAvailableFonts GetBaudRate GetBestPen GetBrushLink GetBrushPen GetBulletColor GetCatalogString GetChannels GetCharMaps GetClipboard GetCommandLine GetConnectionIP GetConnectionPort GetConnectionProtocol GetConsoleBackground GetConsoleChr GetConsoleColor GetConsoleControlChr GetConsoleCursor GetConsoleOrigin GetConsoleSize GetConsoleStr GetConsoleStyle GetConsoleWindow GetConstant GetCoroutineStatus GetCountryInfo GetCurrentDirectory GetCurrentPoint GetDash GetDataBits GetDate GetDateNum GetDefaultAdapter GetDefaultEncoding GetDefaultLoader GetDirectoryEntry GetDisplayModes GetDTR GetEnv GetErrorName GetEventCode GetFileArgument GetFileAttributes GetFillRule GetFillStyle GetFlowControl GetFontColor GetFontStyle GetFormStyle GetFPSLimit GetFreePen GetFrontScreen GetHostName GetIconProperties GetItem GetKerningPair GetLanguageInfo GetLastError GetLayerAtPos GetLayerGroupMembers GetLayerGroups GetLayerPen GetLayerStyle GetLineCap GetLineJoin GetLineWidth GetLocaleInfo GetLocalInterfaces GetLocalIP GetLocalPort GetLocalProtocol GetMACAddress GetMemoryInfo GetMemPointer GetMemString GetMetaTable GetMiterLimit GetMonitors GetObjectData GetObjects GetObjectType GetPalettePen GetParity GetPathExtents GetPatternPosition GetPen GetPlugins GetProgramDirectory GetProgramInfo GetPubScreens GetRandomColor GetRandomFX GetRawArguments GetRealColor GetRTS GetSampleData GetSerializeMode GetShortcutPath GetSongPosition GetStartDirectory GetStopBits GetSystemCountry GetSystemInfo GetSystemLanguage GetTempFileName GetTime GetTimer GetTimestamp GetTimeZone GetType GetVersion GetVideoFrame GetVolumeInfo GetVolumeName GetWeekday Gosub Goto GrabDesktop Green GroupLayer HasItem HaveConsole HaveFreeChannel HaveItem HaveObject HaveObjectData HavePlugin HaveVolume HexStr HideConsoleCursor HideDisplay HideKeyboard HideLayer HideLayerFX HidePointer HideScreen Hypot IgnoreCase IIf ImageRequest IncreasePointer InitConsoleColor InKeyStr InsertConsoleChr InsertConsoleLine InsertConsoleStr InsertItem InsertLayer InsertSample InsertStr InstallEventHandler Int Intersection InvertAlphaChannel InvertBrush InvertMask InvertPalette IPairs IsAbsolutePath IsAlNum IsAlpha IsAnim IsAnimPlaying IsBrushEmpty IsChannelPlaying IsCntrl IsDigit IsDirectory IsFinite IsGraph IsInf IsKeyDown IsLeftMouse IsLower IsMenuItemDisabled IsMenuItemSelected IsMidMouse IsModule IsMusic IsMusicPlaying IsNan IsNil IsOnline IsPathEmpty IsPicture IsPrint IsPunct IsRightMouse IsSample IsSamplePlaying IsSound IsSpace IsTableEmpty IsUnicode IsUpper IsVideo IsVideoPlaying IsXDigit JoyAxisX JoyAxisY JoyAxisZ JoyButton JoyDir JoyFire Label JoyHat LayerExists LayerGroupExists LayerToBack LayerToFront Ld LdExp LeftMouseQuit LeftStr LegacyControl Limit Line LineTo ListItems ListRequest Ln LoadAnim LoadAnimFrame LoadBGPic LoadBrush LoadIcon LoadModule LoadPalette LoadPlugin LoadPrefs LoadSample LoadSprite Locate Log LowerStr MakeButton MakeConsoleChr MakeDate MakeDirectory MakeHostPath MatchPattern Matrix2D Max MD5 MD5Str MemToTable MergeLayers MidStr Min MixBrush MixRGB MixSample Mod ModifyAnimFrames ModifyButton ModifyKeyDown ModifyLayerFrames ModulateBrush ModulatePalette MonitorDirectory MouseX MouseY MoveAnim MoveBrush MoveConsoleWindow MoveDisplay MoveFile MoveLayer MovePointer MoveSprite MoveTextObject MoveTo Mul NearlyEqual NextDirectoryEntry NextFrame NextItem NormalizePath NPrint OilPaintBrush OpenAmigaGuide OpenAnim OpenAudio OpenCatalog OpenConnection OpenConsole OpenDirectory OpenDisplay OpenFile OpenFont OpenMusic OpenResourceMonitor OpenSerialPort OpenURL OpenVideo Pack PadNum Pairs PaletteToGray ParseDate PathItems PathPart PathRequest PathToBrush PatternFindStr PatternFindStrDirect PatternFindStrShort PatternReplaceStr PauseLayer PauseModule PauseMusic PauseTimer PauseVideo Peek PeekClipboard PenArrayToBrush PerformSelector PermissionRequest PerspectiveDistortBrush Pi PixelateBrush PlayAnim PlayAnimDisk PlayLayer PlayModule PlayMusic PlaySample PlaySubsong PlayVideo Plot Poke PolarDistortBrush PollSerialQueue Polygon PopupMenu Pow Print QuantizeBrush Rad RaiseOnError RasterizeBrush RawDiv RawEqual RawGet RawSet ReadBrushPixel ReadByte ReadBytes ReadChr ReadConsoleKey ReadConsoleStr ReadDirectory ReadFloat ReadFunction ReadInt ReadLine ReadMem ReadPen ReadPixel ReadRegistryKey ReadSerialData ReadShort ReadString ReadTable ReceiveData ReceiveUDPData Red ReduceAlphaChannel RefreshConsole RefreshDisplay RefreshLayer RelCurveTo RelLineTo RelMoveTo RemapBrush RemoveBrushPalette RemoveButton RemoveIconImage RemoveItem RemoveKeyDown RemoveLayer RemoveLayerFX RemoveLayers RemoveSprite RemoveSprites Rename RenderLayer RepeatStr ReplaceColors ReplaceStr ResetKeyStates ResetTabs ResetTimer ResolveHostName ResumeCoroutine ResumeLayer ResumeModule ResumeMusic ResumeTimer ResumeVideo ReverseFindStr ReverseStr RewindDirectory RGB RGBArrayToBrush RightStr Rnd RndF RndStrong Rol Ror RotateBrush RotateLayer RotateTextObject Round Rt Run RunCallback RunRexxScript Sar SaveAnim SaveBrush SaveIcon SavePalette SavePrefs SaveSample SaveSnapshot ScaleAnim ScaleBGPic ScaleBrush ScaleLayer ScaleSprite ScaleTextObject ScrollConsole Seek SeekLayer SeekMusic SeekVideo SelectAlphaChannel SelectAnim SelectBGPic SelectBrush SelectConsoleWindow SelectDisplay SelectLayer SelectMask SelectMenuItem SelectPalette SendApplicationMessage SendData SendMessage SendRexxCommand SendUDPData SepiaToneBrush SerializeTable SetAllocConsoleColor SetAlphaIntensity SetAnimFrameDelay SetAttribute SetBaudRate SetBorderPen SetBrushDepth SetBrushPalette SetBrushPen SetBrushTransparency SetBrushTransparentPen SetBulletColor SetBulletPen SetChannelVolume SetClipboard SetClipRegion SetConsoleBackground SetConsoleColor SetConsoleCursor SetConsoleOptions SetConsoleStyle SetConsoleTitle SetCycleTable SetDash SetDataBits SetDefaultAdapter SetDefaultEncoding SetDefaultLoader SetDepth SetDisplayAttributes SetDitherMode SetDrawPen SetDrawTagsDefault SetDTR SetEnv SetEventTimeout SetFileAttributes SetFileEncoding SetFillRule SetFillStyle SetFlowControl SetFont SetFontColor SetFontStyle SetFormStyle SetFPSLimit SetGradientPalette SetIconProperties SetInterval SetIOMode SetLayerAnchor SetLayerBorder SetLayerDepth SetLayerFilter SetLayerLight SetLayerName SetLayerPalette SetLayerPen SetLayerShadow SetLayerStyle SetLayerTint SetLayerTransparency SetLayerTransparentPen SetLayerVolume SetLayerZPos SetLineCap SetLineJoin SetLineWidth SetListItems SetMargins SetMaskMode SetMasterVolume SetMetaTable SetMiterLimit SetMusicVolume SetNetworkProtocol SetNetworkTimeout SetObjectData SetPalette SetPaletteDepth SetPaletteMode SetPalettePen SetPaletteTransparentPen SetPanning SetParity SetPen SetPitch SetPointer SetRTS SetScreenTitle SetSerializeMode SetSerializeOptions SetShadowPen SetSpriteZPos SetStandardIconImage SetStandardPalette SetStopBits SetSubtitle SetTimeout SetTimerElapse SetTitle SetTransparentPen SetTransparentThreshold SetTrayIcon SetVarType SetVectorEngine SetVideoPosition SetVideoSize SetVideoVolume SetVolume SetWBIcon Sgn SharpenBrush Shl ShowConsoleCursor ShowDisplay ShowKeyboard ShowLayer ShowLayerFX ShowNotification ShowPointer ShowRinghioMessage ShowScreen ShowToast Shr Sin Sleep SolarizeBrush SolarizePalette Sort SplitStr Sqrt StartConsoleColorMode StartPath StartSubPath StartsWith StartTimer StopAnim StopChannel StopLayer StopModule StopMusic StopSample StopTimer StopVideo StringRequest StringToFile StripStr StrLen StrStr StrToArray Sub SwapLayers SwirlBrush SystemRequest TableItems TableToMem Tan TextExtent TextHeight TextOut TextWidth TimerElapsed TimestampToDate TintBrush TintPalette ToHostName ToIP ToNumber ToString TouchConsoleWindow ToUserData TransformBox TransformBrush TransformLayer TransformPoint TransformTextObject TranslateLayer TranslatePath TrimBrush TrimStr UndefineVirtualStringFile Undo UndoFX UngroupLayer UnleftStr UnmidStr Unpack UnrightStr UnsetEnv UploadFile UpperStr Usage UseCarriageReturn UseFont UTCToDate Val ValidateDate ValidateStr Vibrate VWait Wait WaitAnimEnd WaitEvent WaitKeyDown WaitLeftMouse WaitMidMouse WaitMusicEnd WaitPatternPosition WaitRightMouse WaitSampleEnd WaitSongPosition WaitTimer WaterRippleBrush WhileKeyDown WhileMouseDown WhileMouseOn WhileRightMouseDown Wrap WriteAnimFrame WriteBrushPixel WriteByte WriteBytes WriteChr WriteFloat WriteFunction WriteInt WriteLine WriteMem WritePen WriteRegistryKey WriteSerialData WriteShort WriteString WriteTable YieldCoroutine
" user-defined constants
-syn match hwUserConstant "#\<\u\+\>"
+syn match hwUserConstant "#\<\(\u\|_\|-\|\d\)\+\>\$\?"
" user-defined functions
syn match hwUserFunction "\<p_\w\{-1,}\>("me=e-1
diff --git a/runtime/syntax/html.vim b/runtime/syntax/html.vim
index c975ae8620..ca7c7f1cdd 100644
--- a/runtime/syntax/html.vim
+++ b/runtime/syntax/html.vim
@@ -4,6 +4,7 @@
" Previous Maintainers: Jorge Maldonado Ventura <jorgesumle@freakspot.net>
" Claudio Fleiner <claudio@fleiner.com>
" Last Change: 2023 Nov 28
+" 2024 Jul 30 by Vim Project: increase syn-sync-minlines to 250
" See :help html.vim for some comments and a description of the options
@@ -191,7 +192,7 @@ syn keyword htmlArg contained step title translate typemustmatch
syn match htmlArg contained "\<data-\h\%(\w\|[-.]\)*\%(\_s*=\)\@="
" special characters
-syn match htmlSpecialChar "&#\=[0-9A-Za-z]\{1,8};"
+syn match htmlSpecialChar "&#\=[0-9A-Za-z]\{1,32};"
" Comments (the real ones or the old netscape ones)
if exists("html_wrong_comments")
@@ -320,7 +321,7 @@ if main_syntax == "html"
syn sync match htmlHighlight groupthere NONE "<[/a-zA-Z]"
syn sync match htmlHighlight groupthere javaScript "<script"
syn sync match htmlHighlightSkip "^.*['\"].*$"
- syn sync minlines=10
+ exe "syn sync minlines=" . get(g:, 'html_minlines', 250)
endif
" Folding
diff --git a/runtime/syntax/htmlangular.vim b/runtime/syntax/htmlangular.vim
new file mode 100644
index 0000000000..021e61f9b1
--- /dev/null
+++ b/runtime/syntax/htmlangular.vim
@@ -0,0 +1,18 @@
+" Vim syntax file
+" Language: Angular HTML template
+" Maintainer: Dennis van den Berg <dennis@vdberg.dev>
+" Last Change: 2024 Aug 22
+
+" quit when a syntax file was already loaded
+if exists("b:current_syntax")
+ finish
+endif
+
+if !exists("main_syntax")
+ let main_syntax = 'html'
+endif
+
+runtime! syntax/html.vim
+unlet b:current_syntax
+
+let b:current_syntax = "htmlangular"
diff --git a/runtime/syntax/i3config.vim b/runtime/syntax/i3config.vim
index f4d789e418..c95cb879ad 100644
--- a/runtime/syntax/i3config.vim
+++ b/runtime/syntax/i3config.vim
@@ -2,8 +2,8 @@
" Language: i3 config file
" Original Author: Josef Litos (JosefLitos/i3config.vim)
" Maintainer: Quentin Hibon (github user hiqua)
-" Version: 1.2.3
-" Last Change: 2024-05-23
+" Version: 1.2.4
+" Last Change: 2024-05-24
" References:
" http://i3wm.org/docs/userguide.html#configuring
@@ -67,7 +67,7 @@ syn keyword i3ConfigBindKeyword bindsym bindcode contained skipwhite nextgroup=i
syn region i3ConfigModeBlock matchgroup=i3ConfigKeyword start=/mode\ze\( --pango_markup\)\? \([^'" {]\+\|'[^']\+'\|".\+"\)\s\+{$/ end=/^}\zs$/ contained contains=i3ConfigShParam,@i3ConfigStrVar,i3ConfigBindKeyword,i3ConfigComment,i3ConfigParen fold keepend extend
" 4.7 Floating modifier
-syn match i3ConfigKeyword /^floating_modifier [$0-9A-Za-z]*$/ contains=i3ConfigVariable,i3ConfigBindModkey
+syn match i3ConfigKeyword /floating_modifier [$A-Z][0-9A-Za-z]*$/ contained contains=i3ConfigVariable,i3ConfigBindModkey
" 4.8 Floating window size
syn keyword i3ConfigSizeSpecial x contained
diff --git a/runtime/syntax/idlang.vim b/runtime/syntax/idlang.vim
index 14e976ce05..f7bfcb203a 100644
--- a/runtime/syntax/idlang.vim
+++ b/runtime/syntax/idlang.vim
@@ -1,7 +1,8 @@
" Interactive Data Language syntax file (IDL, too [:-)]
" Maintainer: Aleksandar Jelenak <ajelenak AT yahoo.com>
-" Last change: 2011 Apr 11
-" Created by: Hermann Rochholz <Hermann.Rochholz AT gmx.de>
+" Created By: Hermann Rochholz <Hermann.Rochholz AT gmx.de>
+" Last Change: 2011 Apr 11
+" 2024 Sep 10 by Vim Project: update syntax script, #15419
" Remove any old syntax stuff hanging around
" quit when a syntax file was already loaded
@@ -16,7 +17,7 @@ syn match idlangStatement "^\s*function\s"
syn keyword idlangStatement return continue mod do break
syn keyword idlangStatement compile_opt forward_function goto
syn keyword idlangStatement begin common end of
-syn keyword idlangStatement inherits on_ioerror begin
+syn keyword idlangStatement inherits on_error on_ioerror begin
syn keyword idlangConditional if else then for while case switch
syn keyword idlangConditional endcase endelse endfor endswitch
@@ -82,7 +83,7 @@ syn keyword idlangRoutine CALL_EXTERNAL CALL_FUNCTION CALL_METHOD
syn keyword idlangRoutine CALL_PROCEDURE CATCH CD CEIL CHEBYSHEV CHECK_MATH
syn keyword idlangRoutine CHISQR_CVF CHISQR_PDF CHOLDC CHOLSOL CINDGEN
syn keyword idlangRoutine CIR_3PNT CLOSE CLUST_WTS CLUSTER COLOR_CONVERT
-syn keyword idlangRoutine COLOR_QUAN COLORMAP_APPLICABLE COMFIT COMMON
+syn keyword idlangRoutine COLOR_QUAN COLORMAP_APPLICABLE COMFIT
syn keyword idlangRoutine COMPLEX COMPLEXARR COMPLEXROUND
syn keyword idlangRoutine COMPUTE_MESH_NORMALS COND CONGRID CONJ
syn keyword idlangRoutine CONSTRAINED_MIN CONTOUR CONVERT_COORD CONVOL
@@ -98,7 +99,7 @@ syn keyword idlangRoutine CW_PALETTE_EDITOR_GET CW_PALETTE_EDITOR_SET
syn keyword idlangRoutine CW_PDMENU CW_RGBSLIDER CW_TMPL CW_ZOOM DBLARR
syn keyword idlangRoutine DCINDGEN DCOMPLEX DCOMPLEXARR DEFINE_KEY DEFROI
syn keyword idlangRoutine DEFSYSV DELETE_SYMBOL DELLOG DELVAR DERIV DERIVSIG
-syn keyword idlangRoutine DETERM DEVICE DFPMIN DIALOG_MESSAGE
+syn keyword idlangRoutine DETERM DEVICE DFPMIN DIAG_MATRIX DIALOG_MESSAGE
syn keyword idlangRoutine DIALOG_PICKFILE DIALOG_PRINTERSETUP
syn keyword idlangRoutine DIALOG_PRINTJOB DIALOG_READ_IMAGE
syn keyword idlangRoutine DIALOG_WRITE_IMAGE DIGITAL_FILTER DILATE DINDGEN
@@ -155,7 +156,7 @@ syn keyword idlangRoutine MPEG_PUT MPEG_SAVE MSG_CAT_CLOSE MSG_CAT_COMPILE
syn keyword idlangRoutine MSG_CAT_OPEN MULTI N_ELEMENTS N_PARAMS N_TAGS
syn keyword idlangRoutine NEWTON NORM OBJ_CLASS OBJ_DESTROY OBJ_ISA OBJ_NEW
syn keyword idlangRoutine OBJ_VALID OBJARR ON_ERROR ON_IOERROR ONLINE_HELP
-syn keyword idlangRoutine OPEN OPENR OPENW OPLOT OPLOTERR P_CORRELATE
+syn keyword idlangRoutine OPEN OPENR OPENW OPENU OPLOT OPLOTERR P_CORRELATE
syn keyword idlangRoutine PARTICLE_TRACE PCOMP PLOT PLOT_3DBOX PLOT_FIELD
syn keyword idlangRoutine PLOTERR PLOTS PNT_LINE POINT_LUN POLAR_CONTOUR
syn keyword idlangRoutine POLAR_SURFACE POLY POLY_2D POLY_AREA POLY_FIT
diff --git a/runtime/syntax/indent.vim b/runtime/syntax/indent.vim
index b2a1a0c85f..921a0a8ad0 100644
--- a/runtime/syntax/indent.vim
+++ b/runtime/syntax/indent.vim
@@ -2,7 +2,7 @@
" Language: indent(1) configuration file
" Maintainer: Doug Kearns <dougkearns@gmail.com>
" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
-" Last Change: 2021 Nov 17
+" Last Change: 2024 Sep 29
" indent_is_bsd: If exists, will change somewhat to match BSD implementation
"
" TODO: is the deny-all (a la lilo.vim nice or no?)...
@@ -34,7 +34,7 @@ endif
syn match indentOptions '-\%(bli\|c\%([bl]i\|[dip]\)\=\|di\=\|ip\=\|lc\=\|pp\=i\|sbi\|ts\|-\%(brace-indent\|comment-indentation\|case-brace-indentation\|declaration-comment-column\|continuation-indentation\|case-indentation\|else-endif-column\|line-comments-indentation\|declaration-indentation\|indent-level\|parameter-indentation\|line-length\|comment-line-length\|paren-indentation\|preprocessor-indentation\|struct-brace-indentation\|tab-size\)\)'
\ nextgroup=indentNumber skipwhite skipempty
-syn match indentNumber display contained '\d\+\>'
+syn match indentNumber display contained '-\=\d\+\>'
syn match indentOptions '-T'
\ nextgroup=indentIdent skipwhite skipempty
diff --git a/runtime/syntax/java.vim b/runtime/syntax/java.vim
index 9867b147c2..307fc26349 100644
--- a/runtime/syntax/java.vim
+++ b/runtime/syntax/java.vim
@@ -3,18 +3,33 @@
" Maintainer: Aliaksei Budavei <0x000c70 AT gmail DOT com>
" Former Maintainer: Claudio Fleiner <claudio@fleiner.com>
" Repository: https://github.com/zzzyxwvut/java-vim.git
-" Last Change: 2024 May 10
+" Last Change: 2024 Oct 03
-" Please check :help java.vim for comments on some of the options available.
+" Please check ":help java.vim" for comments on some of the options
+" available.
-" quit when a syntax file was already loaded
-if !exists("main_syntax")
- if exists("b:current_syntax")
- finish
+" Do not aggregate syntax items from circular inclusion.
+if exists("b:current_syntax")
+ finish
+endif
+
+if exists("g:main_syntax")
+ " Reject attendant circularity for every :syn-included syntax file,
+ " but ACCEPT FAILURE when "g:main_syntax" is set to "java".
+ if g:main_syntax == 'html'
+ if !exists("g:java_ignore_html")
+ let g:java_ignore_html = 1
+ let s:clear_java_ignore_html = 1
+ endif
+ elseif g:main_syntax == 'markdown'
+ if !exists("g:java_ignore_markdown")
+ let g:java_ignore_markdown = 1
+ let s:clear_java_ignore_markdown = 1
+ endif
endif
- " we define it here so that included files can test for it
- let main_syntax='java'
- syn region javaFold start="{" end="}" transparent fold
+else
+ " Allow syntax files that include this file test for its inclusion.
+ let g:main_syntax = 'java'
endif
let s:cpo_save = &cpo
@@ -31,6 +46,10 @@ function! s:ff.RightConstant(x, y) abort
return a:y
endfunction
+function! s:ff.IsRequestedPreviewFeature(n) abort
+ return exists("g:java_syntax_previews") && index(g:java_syntax_previews, a:n) + 1
+endfunction
+
if !exists("*s:ReportOnce")
function s:ReportOnce(message) abort
echomsg 'syntax/java.vim: ' . a:message
@@ -40,6 +59,28 @@ else
endfunction
endif
+if exists("g:java_foldtext_show_first_or_second_line")
+ function! s:LazyPrefix(prefix, dashes, count) abort
+ return empty(a:prefix)
+ \ ? printf('+-%s%3d lines: ', a:dashes, a:count)
+ \ : a:prefix
+ endfunction
+
+ function! JavaSyntaxFoldTextExpr() abort
+ " Piggyback on NGETTEXT.
+ let summary = foldtext()
+ return getline(v:foldstart) !~ '/\*\+\s*$'
+ \ ? summary
+ \ : s:LazyPrefix(matchstr(summary, '^+-\+\s*\d\+\s.\{-1,}:\s'),
+ \ v:folddashes,
+ \ (v:foldend - v:foldstart + 1)) .
+ \ getline(v:foldstart + 1)
+ endfunction
+
+ " E120 for "fdt=s:JavaSyntaxFoldTextExpr()" before v8.2.3900.
+ setlocal foldtext=JavaSyntaxFoldTextExpr()
+endif
+
" Admit the ASCII dollar sign to keyword characters (JLS-17, §3.8):
try
exec 'syntax iskeyword ' . &l:iskeyword . ',$'
@@ -54,7 +95,6 @@ syn match javaError "<<<\|\.\.\|=>\|||=\|&&=\|\*\/"
" use separate name so that it can be deleted in javacc.vim
syn match javaError2 "#\|=<"
-hi def link javaError2 javaError
" Keywords (JLS-17, §3.9):
syn keyword javaExternal native package
@@ -68,6 +108,13 @@ syn keyword javaTypedef this super
syn keyword javaOperator new instanceof
syn match javaOperator "\<var\>\%(\s*(\)\@!"
+if s:ff.IsRequestedPreviewFeature(476)
+ " Module imports can be used in any source file.
+ syn match javaExternal "\<import\s\+module\>" contains=javaModuleImport
+ syn keyword javaModuleImport contained module
+ hi def link javaModuleImport Statement
+endif
+
" Since the yield statement, which could take a parenthesised operand,
" and _qualified_ yield methods get along within the switch block
" (JLS-17, §3.8), it seems futile to make a region definition for this
@@ -76,18 +123,18 @@ syn match javaOperator "\<var\>\%(\s*(\)\@!"
" if necessary, on the line before that (h: \@<=), trying to match
" neither a method reference nor a qualified method invocation.
try
- syn match javaOperator "\%(\%(::\|\.\)[[:space:]\n]*\)\@80<!\<yield\>"
+ syn match javaOperator "\%(\%(::\|\.\)[[:space:]\n]*\)\@80<!\<yield\>"
let s:ff.Peek = s:ff.LeftConstant
catch /\<E59:/
call s:ReportOnce(v:exception)
- syn match javaOperator "\%(\%(::\|\.\)[[:space:]\n]*\)\@<!\<yield\>"
+ syn match javaOperator "\%(\%(::\|\.\)[[:space:]\n]*\)\@<!\<yield\>"
let s:ff.Peek = s:ff.RightConstant
endtry
syn keyword javaType boolean char byte short int long float double
syn keyword javaType void
syn keyword javaStatement return
-syn keyword javaStorageClass static synchronized transient volatile strictfp serializable
+syn keyword javaStorageClass static synchronized transient volatile strictfp
syn keyword javaExceptions throw try catch finally
syn keyword javaAssert assert
syn keyword javaMethodDecl throws
@@ -99,9 +146,10 @@ syn match javaClassDecl "\<record\>\%(\s*(\)\@!"
syn match javaClassDecl "^class\>"
syn match javaClassDecl "[^.]\s*\<class\>"ms=s+1
syn match javaAnnotation "@\%(\K\k*\.\)*\K\k*\>"
+syn region javaAnnotation transparent matchgroup=javaAnnotationStart start=/@\%(\K\k*\.\)*\K\k*(/ end=/)/ skip=/\/\*.\{-}\*\/\|\/\/.*$/ contains=javaAnnotation,javaParenT,javaBlock,javaString,javaBoolean,javaNumber,javaTypedef,javaComment,javaLineComment
syn match javaClassDecl "@interface\>"
syn keyword javaBranch break continue nextgroup=javaUserLabelRef skipwhite
-syn match javaUserLabelRef "\k\+" contained
+syn match javaUserLabelRef contained "\k\+"
syn match javaVarArg "\.\.\."
syn keyword javaScopeDecl public protected private
syn keyword javaConceptKind abstract final
@@ -109,15 +157,6 @@ syn match javaConceptKind "\<non-sealed\>"
syn match javaConceptKind "\<sealed\>\%(\s*(\)\@!"
syn match javaConceptKind "\<default\>\%(\s*\%(:\|->\)\)\@!"
-" Note that a "module-info" file will be recognised with an arbitrary
-" file extension (or no extension at all) so that more than one such
-" declaration for the same Java module can be maintained for modular
-" testing in a project without attendant confusion for IDEs, with the
-" ".java\=" extension used for a production version and an arbitrary
-" extension used for a testing version.
-let s:module_info_cur_buf = fnamemodify(bufname("%"), ":t") =~ '^module-info\%(\.class\>\)\@!'
-lockvar s:module_info_cur_buf
-
if !(v:version < 704)
" Request the new regexp engine for [:upper:] and [:lower:].
let [s:ff.Engine, s:ff.UpperCase, s:ff.LowerCase] = repeat([s:ff.LeftConstant], 3)
@@ -127,17 +166,68 @@ else
let [s:ff.Engine, s:ff.UpperCase, s:ff.LowerCase] = repeat([s:ff.RightConstant], 3)
endif
-" Java modules (since Java 9, for "module-info.java" file).
-if s:module_info_cur_buf
+if exists("g:java_highlight_signature")
+ let [s:ff.PeekTo, s:ff.PeekFrom, s:ff.GroupArgs] = repeat([s:ff.LeftConstant], 3)
+else
+ let [s:ff.PeekTo, s:ff.PeekFrom, s:ff.GroupArgs] = repeat([s:ff.RightConstant], 3)
+endif
+
+let s:with_html = !exists("g:java_ignore_html")
+let s:with_markdown = !exists("g:java_ignore_markdown")
+lockvar s:with_html s:with_markdown
+
+" Java module declarations (JLS-17, §7.7).
+"
+" Note that a "module-info" file will be recognised with an arbitrary
+" file extension (or no extension at all) so that more than one such
+" declaration for the same Java module can be maintained for modular
+" testing in a project without attendant confusion for IDEs, with the
+" ".java\=" extension used for a production version and an arbitrary
+" extension used for a testing version.
+if fnamemodify(bufname("%"), ":t") =~ '^module-info\>\%(\.class\>\)\@!'
syn keyword javaModuleStorageClass module transitive
syn keyword javaModuleStmt open requires exports opens uses provides
syn keyword javaModuleExternal to with
+ hi def link javaModuleStorageClass StorageClass
+ hi def link javaModuleStmt Statement
+ hi def link javaModuleExternal Include
+
+ if !exists("g:java_ignore_javadoc") && (s:with_html || s:with_markdown) && g:main_syntax != 'jsp'
+ syn match javaDocProvidesTag contained "@provides\_s\+\S\+" contains=javaDocParam
+ syn match javaDocUsesTag contained "@uses\_s\+\S\+" contains=javaDocParam
+ hi def link javaDocProvidesTag Special
+ hi def link javaDocUsesTag Special
+ endif
+endif
+
+" Fancy parameterised types (JLS-17, §4.5).
+"
+" Note that false positives may elsewhere occur whenever an identifier
+" is butted against a less-than operator. Cf. (X<Y) and (X < Y).
+if exists("g:java_highlight_generics")
+ syn keyword javaWildcardBound contained extends super
+
+ " Parameterised types are delegated to javaGenerics (s:ctx.gsg) and
+ " are not matched with javaTypeArgument.
+ exec 'syn match javaTypeArgument contained "' . s:ff.Engine('\%#=2', '') . '?\|\%(\<\%(b\%(oolean\|yte\)\|char\|short\|int\|long\|float\|double\)\[\]\|\%(\<\K\k*\>\.\)*\<' . s:ff.UpperCase('[$_[:upper:]]', '[^a-z0-9]') . '\k*\>\)\%(\[\]\)*"'
+
+ for s:ctx in [{'dsg': 'javaDimExpr', 'gsg': 'javaGenerics', 'ghg': 'javaGenericsC1', 'csg': 'javaGenericsX', 'c': ''},
+ \ {'dsg': 'javaDimExprX', 'gsg': 'javaGenericsX', 'ghg': 'javaGenericsC2', 'csg': 'javaGenerics', 'c': ' contained'}]
+ " Consider array creation expressions of reifiable types.
+ exec 'syn region ' . s:ctx.dsg . ' contained transparent matchgroup=' . s:ctx.ghg . ' start="\[" end="\]" nextgroup=' . s:ctx.dsg . ' skipwhite skipnl'
+ exec 'syn region ' . s:ctx.gsg . s:ctx.c . ' transparent matchgroup=' . s:ctx.ghg . ' start=/' . s:ff.Engine('\%#=2', '') . '\%(\<\K\k*\>\.\)*\<' . s:ff.UpperCase('[$_[:upper:]]', '[^a-z0-9]') . '\k*\><\%([[:space:]\n]*\%([?@]\|\<\%(b\%(oolean\|yte\)\|char\|short\|int\|long\|float\|double\)\[\]\|\%(\<\K\k*\>\.\)*\<' . s:ff.UpperCase('[$_[:upper:]]', '[^a-z0-9]') . '\k*\>\)\)\@=/ end=/>/ contains=' . s:ctx.csg . ',javaAnnotation,javaTypeArgument,javaWildcardBound,javaType,@javaClasses nextgroup=' . s:ctx.dsg . ' skipwhite skipnl'
+ endfor
+
+ unlet s:ctx
+ hi def link javaWildcardBound Question
+ hi def link javaGenericsC1 Function
+ hi def link javaGenericsC2 Type
endif
-if exists("java_highlight_java_lang_ids")
- let java_highlight_all=1
+if exists("g:java_highlight_java_lang_ids")
+ let g:java_highlight_all = 1
endif
-if exists("java_highlight_all") || exists("java_highlight_java") || exists("java_highlight_java_lang")
+if exists("g:java_highlight_all") || exists("g:java_highlight_java") || exists("g:java_highlight_java_lang")
" java.lang.*
"
" The keywords of javaR_JavaLang, javaC_JavaLang, javaE_JavaLang,
@@ -163,9 +253,15 @@ if exists("java_highlight_all") || exists("java_highlight_java") || exists("ja
exec 'syn match javaC_JavaLang "\%(\<ModuleLayer\.\)\@' . s:ff.Peek('12', '') . '<=\<Controller\>"'
exec 'syn match javaC_JavaLang "\%(\<Runtime\.\)\@' . s:ff.Peek('8', '') . '<=\<Version\>"'
exec 'syn match javaC_JavaLang "\%(\<System\.\)\@' . s:ff.Peek('7', '') . '<=\<LoggerFinder\>"'
- exec 'syn match javaC_JavaLang "\%(\<Enum\.\)\@' . s:ff.Peek('5', '') . '<=\<EnumDesc\>"'
- syn keyword javaC_JavaLang Boolean Character Class ClassLoader Compiler Double Float Integer Long Math Number Object Process Runtime SecurityManager String StringBuffer Thread ThreadGroup Byte Short Void InheritableThreadLocal Package RuntimePermission ThreadLocal StrictMath StackTraceElement Enum ProcessBuilder StringBuilder ClassValue Module ModuleLayer StackWalker Record
+ syn keyword javaC_JavaLang Boolean Character ClassLoader Compiler Double Float Integer Long Math Number Object Process Runtime SecurityManager String StringBuffer Thread ThreadGroup Byte Short Void Package RuntimePermission StrictMath StackTraceElement ProcessBuilder StringBuilder Module ModuleLayer StackWalker Record
syn match javaC_JavaLang "\<System\>" " See javaDebug.
+
+ if !exists("g:java_highlight_generics")
+ " The non-interface parameterised names of java.lang members.
+ exec 'syn match javaC_JavaLang "\%(\<Enum\.\)\@' . s:ff.Peek('5', '') . '<=\<EnumDesc\>"'
+ syn keyword javaC_JavaLang Class InheritableThreadLocal ThreadLocal Enum ClassValue
+ endif
+
" As of JDK 21, java.lang.Compiler is no more (deprecated in JDK 9).
syn keyword javaLangDeprecated Compiler
syn cluster javaClasses add=javaC_JavaLang
@@ -181,55 +277,68 @@ if exists("java_highlight_all") || exists("java_highlight_java") || exists("ja
hi def link javaC_Java javaC_
hi def link javaE_Java javaE_
hi def link javaX_Java javaX_
- hi def link javaX_ javaExceptions
- hi def link javaR_ javaExceptions
- hi def link javaE_ javaExceptions
- hi def link javaC_ javaConstant
-
- syn keyword javaLangObject clone equals finalize getClass hashCode
- syn keyword javaLangObject notify notifyAll toString wait
- hi def link javaLangObject javaConstant
+ hi def link javaX_ javaExceptions
+ hi def link javaR_ javaExceptions
+ hi def link javaE_ javaExceptions
+ hi def link javaC_ javaConstant
+
+ syn keyword javaLangObject getClass notify notifyAll wait
+
+ " Lower the syntax priority of overridable java.lang.Object method
+ " names for zero-width matching (define g:java_highlight_signature
+ " and see their base declarations for java.lang.Object):
+ syn match javaLangObject "\<clone\>"
+ syn match javaLangObject "\<equals\>"
+ syn match javaLangObject "\<finalize\>"
+ syn match javaLangObject "\<hashCode\>"
+ syn match javaLangObject "\<toString\>"
+ hi def link javaLangObject javaConstant
endif
if filereadable(expand("<sfile>:p:h") . "/javaid.vim")
source <sfile>:p:h/javaid.vim
endif
-if exists("java_space_errors")
- if !exists("java_no_trail_space_error")
- syn match javaSpaceError "\s\+$"
+if exists("g:java_space_errors")
+ if !exists("g:java_no_trail_space_error")
+ syn match javaSpaceError "\s\+$"
endif
- if !exists("java_no_tab_space_error")
- syn match javaSpaceError " \+\t"me=e-1
+ if !exists("g:java_no_tab_space_error")
+ syn match javaSpaceError " \+\t"me=e-1
endif
+ hi def link javaSpaceError Error
+endif
+
+exec 'syn match javaUserLabel "^\s*\<\K\k*\>\%(\<default\>\)\@' . s:ff.Peek('7', '') . '<!\s*::\@!"he=e-1'
+
+if s:ff.IsRequestedPreviewFeature(455)
+ syn region javaLabelRegion transparent matchgroup=javaLabel start="\<case\>" matchgroup=NONE end=":\|->" contains=javaBoolean,javaNumber,javaCharacter,javaString,javaConstant,@javaClasses,javaGenerics,javaType,javaLabelDefault,javaLabelVarType,javaLabelWhenClause
+else
+ syn region javaLabelRegion transparent matchgroup=javaLabel start="\<case\>" matchgroup=NONE end=":\|->" contains=javaLabelCastType,javaLabelNumber,javaCharacter,javaString,javaConstant,@javaClasses,javaGenerics,javaLabelDefault,javaLabelVarType,javaLabelWhenClause
+ syn keyword javaLabelCastType contained char byte short int
+ syn match javaLabelNumber contained "\<0\>[lL]\@!"
+ syn match javaLabelNumber contained "\<\%(0\%([xX]\x\%(_*\x\)*\|_*\o\%(_*\o\)*\|[bB][01]\%(_*[01]\)*\)\|[1-9]\%(_*\d\)*\)\>[lL]\@!"
+ hi def link javaLabelCastType javaType
+ hi def link javaLabelNumber javaNumber
endif
-exec 'syn match javaUserLabel "^\s*\<\K\k*\>\%(\<default\>\)\@' . s:ff.Peek('7', '') . '<!\s*:"he=e-1'
-syn region javaLabelRegion transparent matchgroup=javaLabel start="\<case\>" matchgroup=NONE end=":\|->" contains=javaLabelCastType,javaLabelNumber,javaCharacter,javaString,javaConstant,@javaClasses,javaLabelDefault,javaLabelVarType,javaLabelWhenClause
syn region javaLabelRegion transparent matchgroup=javaLabel start="\<default\>\%(\s*\%(:\|->\)\)\@=" matchgroup=NONE end=":\|->" oneline
" Consider grouped _default_ _case_ labels, i.e.
" case null, default ->
" case null: default:
syn keyword javaLabelDefault contained default
syn keyword javaLabelVarType contained var
-syn keyword javaLabelCastType contained char byte short int
" Allow for the contingency of the enclosing region not being able to
" _keep_ its _end_, e.g. case ':':.
-syn region javaLabelWhenClause contained transparent matchgroup=javaLabel start="\<when\>" matchgroup=NONE end=":"me=e-1 end="->"me=e-2 contains=TOP,javaExternal
-syn match javaLabelNumber contained "\<0\>[lL]\@!"
-syn match javaLabelNumber contained "\<\%(0\%([xX]\x\%(_*\x\)*\|_*\o\%(_*\o\)*\|[bB][01]\%(_*[01]\)*\)\|[1-9]\%(_*\d\)*\)\>[lL]\@!"
-hi def link javaLabelDefault javaLabel
-hi def link javaLabelVarType javaOperator
-hi def link javaLabelNumber javaNumber
-hi def link javaLabelCastType javaType
+syn region javaLabelWhenClause contained transparent matchgroup=javaLabel start="\<when\>" matchgroup=NONE end=":"me=e-1 end="->"me=e-2 contains=TOP,javaExternal,javaLambdaDef
" Comments
-syn keyword javaTodo contained TODO FIXME XXX
+syn keyword javaTodo contained TODO FIXME XXX
-if exists("java_comment_strings")
- syn region javaCommentString contained start=+"+ end=+"+ end=+$+ end=+\*/+me=s-1,he=s-1 contains=javaSpecial,javaCommentStar,javaSpecialChar,@Spell
- syn region javaCommentString contained start=+"""[ \t\x0c\r]*$+hs=e+1 end=+"""+he=s-1 contains=javaSpecial,javaCommentStar,javaSpecialChar,@Spell,javaSpecialError,javaTextBlockError
- syn region javaComment2String contained start=+"+ end=+$\|"+ contains=javaSpecial,javaSpecialChar,@Spell
+if exists("g:java_comment_strings")
+ syn region javaCommentString contained start=+"+ end=+"+ end=+$+ end=+\*/+me=s-1,he=s-1 contains=javaSpecial,javaCommentStar,javaSpecialChar,@Spell
+ syn region javaCommentString contained start=+"""[ \t\x0c\r]*$+hs=e+1 end=+"""+he=s-1 contains=javaSpecial,javaCommentStar,javaSpecialChar,@Spell,javaSpecialError,javaTextBlockError
+ syn region javaComment2String contained start=+"+ end=+$\|"+ contains=javaSpecial,javaSpecialChar,@Spell
syn match javaCommentCharacter contained "'\\[^']\{1,6\}'" contains=javaSpecialChar
syn match javaCommentCharacter contained "'\\''" contains=javaSpecialChar
syn match javaCommentCharacter contained "'[^\\]'"
@@ -237,27 +346,65 @@ if exists("java_comment_strings")
syn cluster javaCommentSpecial2 add=javaComment2String,javaCommentCharacter,javaNumber,javaStrTempl
endif
-syn region javaComment matchgroup=javaCommentStart start="/\*" end="\*/" contains=@javaCommentSpecial,javaTodo,javaCommentError,javaSpaceError,@Spell
-syn match javaCommentStar contained "^\s*\*[^/]"me=e-1
-syn match javaCommentStar contained "^\s*\*$"
+syn region javaComment matchgroup=javaCommentStart start="/\*" end="\*/" contains=@javaCommentSpecial,javaTodo,javaCommentError,javaSpaceError,@Spell fold
+syn match javaCommentStar contained "^\s*\*[^/]"me=e-1
+syn match javaCommentStar contained "^\s*\*$"
syn match javaLineComment "//.*" contains=@javaCommentSpecial2,javaTodo,javaCommentMarkupTag,javaSpaceError,@Spell
syn match javaCommentMarkupTag contained "@\%(end\|highlight\|link\|replace\|start\)\>" nextgroup=javaCommentMarkupTagAttr,javaSpaceError skipwhite
syn match javaCommentMarkupTagAttr contained "\<region\>" nextgroup=javaCommentMarkupTagAttr,javaSpaceError skipwhite
-exec 'syn region javaCommentMarkupTagAttr contained transparent matchgroup=htmlArg start=/\<\%(re\%(gex\|gion\|placement\)\|substring\|t\%(arget\|ype\)\)\%(\s*=\)\@=/ matchgroup=htmlString end=/\%(=\s*\)\@' . s:ff.Peek('80', '') . '<=\%("[^"]\+"\|' . "\x27[^\x27]\\+\x27" . '\|\%([.-]\|\k\)\+\)/ nextgroup=javaCommentMarkupTagAttr,javaSpaceError skipwhite oneline'
-hi def link javaCommentMarkupTagAttr htmlArg
-hi def link javaCommentString javaString
-hi def link javaComment2String javaString
-hi def link javaCommentCharacter javaCharacter
+exec 'syn region javaCommentMarkupTagAttr contained transparent matchgroup=javaHtmlArg start=/\<\%(re\%(gex\|gion\|placement\)\|substring\|t\%(arget\|ype\)\)\%(\s*=\)\@=/ matchgroup=javaHtmlString end=/\%(=\s*\)\@' . s:ff.Peek('80', '') . '<=\%("[^"]\+"\|' . "\x27[^\x27]\\+\x27" . '\|\%([.-]\|\k\)\+\)/ nextgroup=javaCommentMarkupTagAttr,javaSpaceError skipwhite oneline'
syn match javaCommentError contained "/\*"me=e-1 display
-hi def link javaCommentError javaError
-hi def link javaCommentStart javaComment
-if !exists("java_ignore_javadoc") && main_syntax != 'jsp'
+if !exists("g:java_ignore_javadoc") && (s:with_html || s:with_markdown) && g:main_syntax != 'jsp'
+ " The overridable "html*" and "markdown*" default links must be
+ " defined _before_ the inclusion of the same default links from
+ " "html.vim" and "markdown.vim".
+ if s:with_html || s:with_markdown
+ hi def link htmlComment Special
+ hi def link htmlCommentPart Special
+ hi def link htmlArg Type
+ hi def link htmlString String
+ endif
+
+ if s:with_markdown
+ hi def link markdownCode Special
+ hi def link markdownCodeBlock Special
+ hi def link markdownCodeDelimiter Special
+ hi def link markdownLinkDelimiter Comment
+ endif
+
syntax case ignore
+ " Note that javaDocSeeTag is valid in HTML and Markdown.
+ let s:ff.WithMarkdown = s:ff.RightConstant
+
" Include HTML syntax coloring for Javadoc comments.
- syntax include @javaHtml syntax/html.vim
- unlet b:current_syntax
+ if s:with_html
+ try
+ syntax include @javaHtml syntax/html.vim
+ finally
+ unlet! b:current_syntax
+ endtry
+ endif
+
+ " Include Markdown syntax coloring (v7.2.437) for Javadoc comments.
+ if s:with_markdown
+ try
+ syntax include @javaMarkdown syntax/markdown.vim
+ let s:ff.WithMarkdown = s:ff.LeftConstant
+ catch /\<E48[45]:/
+ call s:ReportOnce(v:exception)
+ unlockvar s:with_markdown
+ let s:with_markdown = 0
+ lockvar s:with_markdown
+ hi clear markdownCode
+ hi clear markdownCodeBlock
+ hi clear markdownCodeDelimiter
+ hi clear markdownLinkDelimiter
+ finally
+ unlet! b:current_syntax
+ endtry
+ endif
" HTML enables spell checking for all text that is not in a syntax
" item (:syntax spell toplevel); instead, limit spell checking to
@@ -268,100 +415,275 @@ if !exists("java_ignore_javadoc") && main_syntax != 'jsp'
call s:ReportOnce(v:exception)
endtry
- syn region javaDocComment start="/\*\*" end="\*/" keepend contains=javaCommentTitle,@javaHtml,javaDocTags,javaDocSeeTag,javaDocCodeTag,javaDocSnippetTag,javaTodo,javaCommentError,javaSpaceError,@Spell
- exec 'syn region javaCommentTitle contained matchgroup=javaDocComment start="/\*\*" matchgroup=javaCommentTitle end="\.$" end="\.[ \t\r]\@=" end="\%(^\s*\**\s*\)\@' . s:ff.Peek('80', '') . '<=@"me=s-2,he=s-1 end="\*/"me=s-1,he=s-1 contains=@javaHtml,javaCommentStar,javaTodo,javaCommentError,javaSpaceError,@Spell,javaDocTags,javaDocSeeTag,javaDocCodeTag,javaDocSnippetTag'
- syn region javaCommentTitle contained matchgroup=javaDocComment start="/\*\*\s*\r\=\n\=\s*\**\s*\%({@return\>\)\@=" matchgroup=javaCommentTitle end="}\%(\s*\.*\)*" contains=@javaHtml,javaCommentStar,javaTodo,javaCommentError,javaSpaceError,@Spell,javaDocTags,javaDocSeeTag,javaDocCodeTag,javaDocSnippetTag
- syn region javaDocTags contained start="{@\%(li\%(teral\|nk\%(plain\)\=\)\|inherit[Dd]oc\|doc[rR]oot\|value\)\>" end="}"
- syn match javaDocTags contained "@\%(param\|exception\|throws\|since\)\s\+\S\+" contains=javaDocParam
- syn match javaDocParam contained "\s\S\+"
- syn match javaDocTags contained "@\%(version\|author\|return\|deprecated\|serial\%(Field\|Data\)\=\)\>"
- syn region javaDocSeeTag contained matchgroup=javaDocTags start="@see\s\+" matchgroup=NONE end="\_."re=e-1 contains=javaDocSeeTagParam
- syn match javaDocSeeTagParam contained @"\_[^"]\+"\|<a\s\+\_.\{-}</a>\|\%(\k\|\.\)*\%(#\k\+\%((\_[^)]*)\)\=\)\=@ contains=@javaHtml extend
+ if s:with_markdown
+ syn region javaMarkdownComment start="///" skip="^\s*///.*$" end="^" keepend contains=javaMarkdownCommentTitle,javaMarkdownShortcutLink,@javaMarkdown,@javaDocTags,javaTodo,@Spell nextgroup=javaMarkdownCommentTitle fold
+ syn match javaMarkdownCommentMask contained "^\s*///"
+ exec 'syn region javaMarkdownCommentTitle contained matchgroup=javaMarkdownComment start="\%(///.*\r\=\n\s*\)\@' . s:ff.Peek('80', '') . '<!///" matchgroup=javaMarkdownCommentTitle end="\.$" end="\.[ \t\r]\@=" end="\n\%(\s*///\s*$\)\@=" end="\%(^\s*///\s*\)\@' . s:ff.Peek('80', '') . '<=@"me=s-2,he=s-1 contains=javaMarkdownShortcutLink,@javaMarkdown,javaMarkdownCommentMask,javaTodo,@Spell,@javaDocTags'
+ exec 'syn region javaMarkdownCommentTitle contained matchgroup=javaMarkdownComment start="\%(///.*\r\=\n\s*\)\@' . s:ff.Peek('80', '') . '<!///\s*\%({@return\>\)\@=" matchgroup=javaMarkdownCommentTitle end="}\%(\s*\.*\)*" contains=javaMarkdownShortcutLink,@javaMarkdown,javaMarkdownCommentMask,javaTodo,@Spell,@javaDocTags,javaTitleSkipBlock'
+ exec 'syn region javaMarkdownCommentTitle contained matchgroup=javaMarkdownComment start="\%(///.*\r\=\n\s*\)\@' . s:ff.Peek('80', '') . '<!///\s*\%({@summary\>\)\@=" matchgroup=javaMarkdownCommentTitle end="}" contains=javaMarkdownShortcutLink,@javaMarkdown,javaMarkdownCommentMask,javaTodo,@Spell,@javaDocTags,javaTitleSkipBlock'
+
+ syn clear markdownId markdownLineStart markdownH1 markdownH2 markdownHeadingRule markdownRule markdownCode markdownCodeBlock markdownIdDeclaration
+ " REDEFINE THE MARKDOWN ITEMS ANCHORED WITH "^", OBSERVING THE
+ " DEFINITION ORDER.
+ syn match markdownLineStart contained "^\s*///\s*[<@]\@!" contains=@markdownBlock,javaMarkdownCommentTitle,javaMarkdownCommentMask nextgroup=@markdownBlock,htmlSpecialChar
+ " See https://spec.commonmark.org/0.31.2/#setext-headings.
+ syn match markdownH1 contained "^\s*/// \{,3}.\+\r\=\n\s*/// \{,3}=\+\s*$" contains=@markdownInline,markdownHeadingRule,markdownAutomaticLink,javaMarkdownCommentMask
+ syn match markdownH2 contained "^\s*/// \{,3}.\+\r\=\n\s*/// \{,3}-\+\s*$" contains=@markdownInline,markdownHeadingRule,markdownAutomaticLink,javaMarkdownCommentMask
+ " See https://spec.commonmark.org/0.31.2/#atx-headings.
+ syn region markdownH1 contained matchgroup=markdownH1Delimiter start=" \{,3}#\s" end="#*\s*$" keepend contains=@markdownInline,markdownAutomaticLink oneline
+ syn region markdownH2 contained matchgroup=markdownH2Delimiter start=" \{,3}##\s" end="#*\s*$" keepend contains=@markdownInline,markdownAutomaticLink oneline
+ syn match markdownHeadingRule contained "^\s*/// \{,3}[=-]\+\s*$" contains=javaMarkdownCommentMask
+ " See https://spec.commonmark.org/0.31.2/#thematic-breaks.
+ syn match markdownRule contained "^\s*/// \{,3}\*\s*\*\%(\s*\*\)\+\s*$" contains=javaMarkdownCommentMask
+ syn match markdownRule contained "^\s*/// \{,3}_\s*_\%(\s*_\)\+\s*$" contains=javaMarkdownCommentMask
+ syn match markdownRule contained "^\s*/// \{,3}-\s*-\%(\s*-\)\+\s*$" contains=javaMarkdownCommentMask
+ " See https://spec.commonmark.org/0.31.2/#indented-code-blocks.
+ syn region markdownCodeBlock contained start="^\s*///\%( \{4,}\|\t\)" end="^\ze\s*///\%(\s*$\| \{,3}\S\)" keepend contains=javaMarkdownCommentMask
+ " See https://spec.commonmark.org/0.31.2/#code-spans.
+ syn region markdownCode contained matchgroup=markdownCodeDelimiter start="\z(`\+\) \=" end=" \=\z1" keepend contains=markdownLineStart,javaMarkdownCommentMask
+ " See https://spec.commonmark.org/0.31.2/#fenced-code-blocks.
+ syn region markdownCodeBlock contained start="^\s*/// \{,3}\z(```\+\)\%(.\{-}[^`]`\)\@!" end="^\s*/// \{,3}\z1`*" keepend contains=javaMarkdownCommentMask
+ syn region markdownCodeBlock contained start="^\s*/// \{,3}\z(\~\~\~\+\)" end="^\s*/// \{,3}\z1\~*" keepend contains=javaMarkdownCommentMask
+ " See https://spec.commonmark.org/0.31.2/#link-reference-definitions.
+ syn region markdownIdDeclaration contained matchgroup=markdownLinkDelimiter start="^\s*/// \{,3\}!\=\[" end="\]:" keepend contains=javaMarkdownCommentMask nextgroup=markdownUrl oneline skipwhite
+ " See https://spec.commonmark.org/0.31.2/#link-label.
+ syn region markdownId contained matchgroup=markdownIdDelimiter start="\[\%([\t ]\]\)\@!" end="\]" contains=javaMarkdownSkipBrackets,javaMarkdownCommentMask
+ " Note that escaped brackets can be unbalanced.
+ syn match javaMarkdownSkipBrackets contained transparent "\\\[\|\\\]"
+ " See https://spec.commonmark.org/0.31.2/#shortcut-reference-link.
+ syn region javaMarkdownShortcutLink contained matchgroup=markdownLinkTextDelimiter start="!\=\[^\@!\%(\_[^][]*\%(\[\_[^][]*\]\_[^][]*\)*]\%([[(]\)\@!\)\@=" end="\]\%([[(]\)\@!" contains=@markdownInline,markdownLineStart,javaMarkdownSkipBrackets,javaMarkdownCommentMask nextgroup=markdownLink,markdownId skipwhite
+
+ for s:name in ['markdownFootnoteDefinition', 'markdownFootnote']
+ if hlexists(s:name)
+ exec 'syn clear ' . s:name
+ endif
+ endfor
+
+ unlet s:name
+
+ " COMBAK: Footnotes are recognised by "markdown.vim", but are not
+ " in CommonMark. See https://pandoc.org/MANUAL.html#footnotes.
+""""syn match markdownFootnoteDefinition contained "^\s*///\s*\[^[^\]]\+\]:" contains=javaMarkdownCommentMask
+
+ hi def link javaMarkdownComment Comment
+ hi def link javaMarkdownCommentMask javaMarkdownComment
+ hi def link javaMarkdownCommentTitle SpecialComment
+ hi def link javaMarkdownShortcutLink htmlLink
+ endif
+
+ if s:with_html
+ syn region javaDocComment start="/\*\*" end="\*/" keepend contains=javaCommentTitle,@javaHtml,@javaDocTags,javaTodo,javaCommentError,javaSpaceError,@Spell fold
+ exec 'syn region javaCommentTitle contained matchgroup=javaDocComment start="/\*\*" matchgroup=javaCommentTitle end="\.$" end="\.[ \t\r]\@=" end="\%(^\s*\**\s*\)\@' . s:ff.Peek('80', '') . '<=@"me=s-2,he=s-1 end="\*/"me=s-1,he=s-1 contains=@javaHtml,javaCommentStar,javaTodo,javaCommentError,javaSpaceError,@Spell,@javaDocTags'
+ syn region javaCommentTitle contained matchgroup=javaDocComment start="/\*\*\s*\r\=\n\=\s*\**\s*\%({@return\>\)\@=" matchgroup=javaCommentTitle end="}\%(\s*\.*\)*" contains=@javaHtml,javaCommentStar,javaTodo,javaCommentError,javaSpaceError,@Spell,@javaDocTags,javaTitleSkipBlock
+ syn region javaCommentTitle contained matchgroup=javaDocComment start="/\*\*\s*\r\=\n\=\s*\**\s*\%({@summary\>\)\@=" matchgroup=javaCommentTitle end="}" contains=@javaHtml,javaCommentStar,javaTodo,javaCommentError,javaSpaceError,@Spell,@javaDocTags,javaTitleSkipBlock
+ hi def link javaDocComment Comment
+ hi def link javaCommentTitle SpecialComment
+ endif
+
+ " The members of javaDocTags are sub-grouped according to the Java
+ " version of their introduction, and sub-group members in turn are
+ " arranged in alphabetical order, so that future newer members can
+ " be pre-sorted and appended without disturbing the current member
+ " placement.
+ " Since they only have significance in javaCommentTitle, neither
+ " javaDocSummaryTag nor javaDocReturnTitleTag are defined.
+ syn cluster javaDocTags contains=javaDocAuthorTag,javaDocDeprecatedTag,javaDocExceptionTag,javaDocParamTag,javaDocReturnTag,javaDocSeeTag,javaDocVersionTag,javaDocSinceTag,javaDocLinkTag,javaDocSerialTag,javaDocSerialDataTag,javaDocSerialFieldTag,javaDocThrowsTag,javaDocDocRootTag,javaDocInheritDocTag,javaDocLinkplainTag,javaDocValueTag,javaDocCodeTag,javaDocLiteralTag,javaDocHiddenTag,javaDocIndexTag,javaDocProvidesTag,javaDocUsesTag,javaDocSystemPropertyTag,javaDocSnippetTag,javaDocSpecTag
+
+ " Anticipate non-standard inline tags in {@return} and {@summary}.
+ syn region javaTitleSkipBlock contained transparent start="{\%(@\%(return\|summary\)\>\)\@!" end="}"
+ syn match javaDocDocRootTag contained "{@docRoot}"
+ syn match javaDocInheritDocTag contained "{@inheritDoc}"
+ syn region javaIndexSkipBlock contained transparent start="{\%(@index\>\)\@!" end="}" contains=javaIndexSkipBlock,javaDocIndexTag
+ syn region javaDocIndexTag contained start="{@index\>" end="}" contains=javaDocIndexTag,javaIndexSkipBlock
+ syn region javaLinkSkipBlock contained transparent start="{\%(@link\>\)\@!" end="}" contains=javaLinkSkipBlock,javaDocLinkTag
+ syn region javaDocLinkTag contained start="{@link\>" end="}" contains=javaDocLinkTag,javaLinkSkipBlock
+ syn region javaLinkplainSkipBlock contained transparent start="{\%(@linkplain\>\)\@!" end="}" contains=javaLinkplainSkipBlock,javaDocLinkplainTag
+ syn region javaDocLinkplainTag contained start="{@linkplain\>" end="}" contains=javaDocLinkplainTag,javaLinkplainSkipBlock
+ syn region javaLiteralSkipBlock contained transparent start="{\%(@literal\>\)\@!" end="}" contains=javaLiteralSkipBlock,javaDocLiteralTag
+ syn region javaDocLiteralTag contained start="{@literal\>" end="}" contains=javaDocLiteralTag,javaLiteralSkipBlock
+ syn region javaSystemPropertySkipBlock contained transparent start="{\%(@systemProperty\>\)\@!" end="}" contains=javaSystemPropertySkipBlock,javaDocSystemPropertyTag
+ syn region javaDocSystemPropertyTag contained start="{@systemProperty\>" end="}" contains=javaDocSystemPropertyTag,javaSystemPropertySkipBlock
+ syn region javaValueSkipBlock contained transparent start="{\%(@value\>\)\@!" end="}" contains=javaValueSkipBlock,javaDocValueTag
+ syn region javaDocValueTag contained start="{@value\>" end="}" contains=javaDocValueTag,javaValueSkipBlock
+
+ syn match javaDocParam contained "\s\zs\S\+"
+ syn match javaDocExceptionTag contained "@exception\s\+\S\+" contains=javaDocParam
+ syn match javaDocParamTag contained "@param\s\+\S\+" contains=javaDocParam
+ syn match javaDocSinceTag contained "@since\s\+\S\+" contains=javaDocParam
+ syn match javaDocThrowsTag contained "@throws\s\+\S\+" contains=javaDocParam
+ syn match javaDocSpecTag contained "@spec\_s\+\S\+\ze\_s\+\S\+" contains=javaDocParam
+
+ syn match javaDocAuthorTag contained "@author\>"
+ syn match javaDocDeprecatedTag contained "@deprecated\>"
+ syn match javaDocHiddenTag contained "@hidden\>"
+ syn match javaDocReturnTag contained "@return\>"
+ syn match javaDocSerialTag contained "@serial\>"
+ syn match javaDocSerialDataTag contained "@serialData\>"
+ syn match javaDocSerialFieldTag contained "@serialField\>"
+ syn match javaDocVersionTag contained "@version\>"
+
+ syn match javaDocSeeTag contained "@see\>\s*" nextgroup=javaDocSeeTag1,javaDocSeeTag2,javaDocSeeTag3,javaDocSeeTag4,javaDocSeeTagStar,javaDocSeeTagSlash skipwhite skipempty
+
+ if s:with_html
+ syn match javaDocSeeTagStar contained "^\s*\*\+\%(\s*{\=@\|/\|$\)\@!" nextgroup=javaDocSeeTag1,javaDocSeeTag2,javaDocSeeTag3,javaDocSeeTag4 skipwhite skipempty
+ hi def link javaDocSeeTagStar javaDocComment
+ endif
+
+ if s:with_markdown
+ syn match javaDocSeeTagSlash contained "^\s*///\%(\s*{\=@\|$\)\@!" nextgroup=javaDocSeeTag1,javaDocSeeTag2,javaDocSeeTag3,javaDocSeeTag4 skipwhite skipempty
+ hi def link javaDocSeeTagSlash javaMarkdownComment
+ endif
+
+ syn match javaDocSeeTag1 contained @"\_[^"]\+"@
+ syn match javaDocSeeTag2 contained @<a\s\+\_.\{-}</a>@ contains=@javaHtml extend
+ exec 'syn match javaDocSeeTag3 contained @[' . s:ff.WithMarkdown('[', '') . '"< \t]\@!\%(\k\|[/.]\)*\%(##\=\k\+\%((\_[^)]*)\)\=\)\=@ nextgroup=javaDocSeeTag3Label skipwhite skipempty'
+ syn match javaDocSeeTag3Label contained @\k\%(\k\+\s*\)*$@
+
+ " COMBAK: No support for type javaDocSeeTag2 in Markdown.
+""if s:with_markdown
+"" syn match javaDocSeeTag4 contained @\[.\+\]\s\=\%(\[.\+\]\|(.\+)\)@ contains=@javaMarkdown extend
+"" hi def link javaDocSeeTag4 Special
+""endif
+
syn region javaCodeSkipBlock contained transparent start="{\%(@code\>\)\@!" end="}" contains=javaCodeSkipBlock,javaDocCodeTag
syn region javaDocCodeTag contained start="{@code\>" end="}" contains=javaDocCodeTag,javaCodeSkipBlock
- exec 'syn region javaDocSnippetTagAttr contained transparent matchgroup=htmlArg start=/\<\%(class\|file\|id\|lang\|region\)\%(\s*=\)\@=/ matchgroup=htmlString end=/:$/ end=/\%(=\s*\)\@' . s:ff.Peek('80', '') . '<=\%("[^"]\+"\|' . "\x27[^\x27]\\+\x27" . '\|\%([.\\/-]\|\k\)\+\)/ nextgroup=javaDocSnippetTagAttr skipwhite skipnl'
+
+ exec 'syn region javaDocSnippetTagAttr contained transparent matchgroup=javaHtmlArg start=/\<\%(class\|file\|id\|lang\|region\)\%(\s*=\)\@=/ matchgroup=javaHtmlString end=/:$/ end=/\%(=\s*\)\@' . s:ff.Peek('80', '') . '<=\%("[^"]\+"\|' . "\x27[^\x27]\\+\x27" . '\|\%([.\\/-]\|\k\)\+\)/ nextgroup=javaDocSnippetTagAttr skipwhite skipnl'
syn region javaSnippetSkipBlock contained transparent start="{\%(@snippet\>\)\@!" end="}" contains=javaSnippetSkipBlock,javaDocSnippetTag,javaCommentMarkupTag
syn region javaDocSnippetTag contained start="{@snippet\>" end="}" contains=javaDocSnippetTag,javaSnippetSkipBlock,javaDocSnippetTagAttr,javaCommentMarkupTag
syntax case match
+ hi def link javaDocParam Function
+
+ hi def link javaDocAuthorTag Special
+ hi def link javaDocCodeTag Special
+ hi def link javaDocDeprecatedTag Special
+ hi def link javaDocDocRootTag Special
+ hi def link javaDocExceptionTag Special
+ hi def link javaDocHiddenTag Special
+ hi def link javaDocIndexTag Special
+ hi def link javaDocInheritDocTag Special
+ hi def link javaDocLinkTag Special
+ hi def link javaDocLinkplainTag Special
+ hi def link javaDocLiteralTag Special
+ hi def link javaDocParamTag Special
+ hi def link javaDocReturnTag Special
+ hi def link javaDocSeeTag Special
+ hi def link javaDocSeeTag1 String
+ hi def link javaDocSeeTag2 Special
+ hi def link javaDocSeeTag3 Function
+ hi def link javaDocSerialTag Special
+ hi def link javaDocSerialDataTag Special
+ hi def link javaDocSerialFieldTag Special
+ hi def link javaDocSinceTag Special
+ hi def link javaDocSnippetTag Special
+ hi def link javaDocSpecTag Special
+ hi def link javaDocSystemPropertyTag Special
+ hi def link javaDocThrowsTag Special
+ hi def link javaDocValueTag Special
+ hi def link javaDocVersionTag Special
endif
" match the special comment /**/
-syn match javaComment "/\*\*/"
+syn match javaComment "/\*\*/"
" Strings and constants
-syn match javaSpecialError contained "\\."
+syn match javaSpecialError contained "\\."
syn match javaSpecialCharError contained "[^']"
" Escape Sequences (JLS-17, §3.10.7):
-syn match javaSpecialChar contained "\\\%(u\x\x\x\x\|[0-3]\o\o\|\o\o\=\|[bstnfr"'\\]\)"
+syn match javaSpecialChar contained "\\\%(u\x\x\x\x\|[0-3]\o\o\|\o\o\=\|[bstnfr"'\\]\)"
syn region javaString start=+"+ end=+"+ end=+$+ contains=javaSpecialChar,javaSpecialError,@Spell
syn region javaString start=+"""[ \t\x0c\r]*$+hs=e+1 end=+"""+he=s-1 contains=javaSpecialChar,javaSpecialError,javaTextBlockError,@Spell
syn match javaTextBlockError +"""\s*"""+
-syn region javaStrTemplEmbExp contained matchgroup=javaStrTempl start="\\{" end="}" contains=TOP
-exec 'syn region javaStrTempl start=+\%(\.[[:space:]\n]*\)\@' . s:ff.Peek('80', '') . '<="+ end=+"+ contains=javaStrTemplEmbExp,javaSpecialChar,javaSpecialError,@Spell'
-exec 'syn region javaStrTempl start=+\%(\.[[:space:]\n]*\)\@' . s:ff.Peek('80', '') . '<="""[ \t\x0c\r]*$+hs=e+1 end=+"""+he=s-1 contains=javaStrTemplEmbExp,javaSpecialChar,javaSpecialError,javaTextBlockError,@Spell'
-syn match javaCharacter "'[^']*'" contains=javaSpecialChar,javaSpecialCharError
-syn match javaCharacter "'\\''" contains=javaSpecialChar
-syn match javaCharacter "'[^\\]'"
+
+if s:ff.IsRequestedPreviewFeature(430)
+ syn region javaStrTemplEmbExp contained matchgroup=javaStrTempl start="\\{" end="}" contains=TOP
+ exec 'syn region javaStrTempl start=+\%(\.[[:space:]\n]*\)\@' . s:ff.Peek('80', '') . '<="+ end=+"+ contains=javaStrTemplEmbExp,javaSpecialChar,javaSpecialError,@Spell'
+ exec 'syn region javaStrTempl start=+\%(\.[[:space:]\n]*\)\@' . s:ff.Peek('80', '') . '<="""[ \t\x0c\r]*$+hs=e+1 end=+"""+he=s-1 contains=javaStrTemplEmbExp,javaSpecialChar,javaSpecialError,javaTextBlockError,@Spell'
+ hi def link javaStrTempl Macro
+endif
+
+syn match javaCharacter "'[^']*'" contains=javaSpecialChar,javaSpecialCharError
+syn match javaCharacter "'\\''" contains=javaSpecialChar
+syn match javaCharacter "'[^\\]'"
" Integer literals (JLS-17, §3.10.1):
-syn keyword javaNumber 0 0l 0L
-syn match javaNumber "\<\%(0\%([xX]\x\%(_*\x\)*\|_*\o\%(_*\o\)*\|[bB][01]\%(_*[01]\)*\)\|[1-9]\%(_*\d\)*\)[lL]\=\>"
+syn keyword javaNumber 0 0l 0L
+syn match javaNumber "\<\%(0\%([xX]\x\%(_*\x\)*\|_*\o\%(_*\o\)*\|[bB][01]\%(_*[01]\)*\)\|[1-9]\%(_*\d\)*\)[lL]\=\>"
" Decimal floating-point literals (JLS-17, §3.10.2):
" Against "\<\d\+\>\.":
-syn match javaNumber "\<\d\%(_*\d\)*\."
-syn match javaNumber "\%(\<\d\%(_*\d\)*\.\%(\d\%(_*\d\)*\)\=\|\.\d\%(_*\d\)*\)\%([eE][-+]\=\d\%(_*\d\)*\)\=[fFdD]\=\>"
-syn match javaNumber "\<\d\%(_*\d\)*[eE][-+]\=\d\%(_*\d\)*[fFdD]\=\>"
-syn match javaNumber "\<\d\%(_*\d\)*\%([eE][-+]\=\d\%(_*\d\)*\)\=[fFdD]\>"
+syn match javaNumber "\<\d\%(_*\d\)*\."
+syn match javaNumber "\%(\<\d\%(_*\d\)*\.\%(\d\%(_*\d\)*\)\=\|\.\d\%(_*\d\)*\)\%([eE][-+]\=\d\%(_*\d\)*\)\=[fFdD]\=\>"
+syn match javaNumber "\<\d\%(_*\d\)*[eE][-+]\=\d\%(_*\d\)*[fFdD]\=\>"
+syn match javaNumber "\<\d\%(_*\d\)*\%([eE][-+]\=\d\%(_*\d\)*\)\=[fFdD]\>"
" Hexadecimal floating-point literals (JLS-17, §3.10.2):
-syn match javaNumber "\<0[xX]\%(\x\%(_*\x\)*\.\=\|\%(\x\%(_*\x\)*\)\=\.\x\%(_*\x\)*\)[pP][-+]\=\d\%(_*\d\)*[fFdD]\=\>"
+syn match javaNumber "\<0[xX]\%(\x\%(_*\x\)*\.\=\|\%(\x\%(_*\x\)*\)\=\.\x\%(_*\x\)*\)[pP][-+]\=\d\%(_*\d\)*[fFdD]\=\>"
" Unicode characters
syn match javaSpecial "\\u\x\x\x\x"
" Method declarations (JLS-17, §8.4.3, §8.4.4, §9.4).
-if exists("java_highlight_functions")
- syn cluster javaFuncParams contains=javaAnnotation,@javaClasses,javaType,javaVarArg,javaComment,javaLineComment
+if exists("g:java_highlight_functions")
+ syn cluster javaFuncParams contains=javaAnnotation,@javaClasses,javaGenerics,javaType,javaVarArg,javaComment,javaLineComment
- if java_highlight_functions =~# '^indent[1-8]\=$'
- let s:last = java_highlight_functions[-1 :]
- let s:indent = s:last != 't' ? repeat("\x20", s:last) : "\t"
+ if exists("g:java_highlight_signature")
+ syn cluster javaFuncParams add=javaParamModifier
+ hi def link javaFuncDefStart javaFuncDef
+ else
syn cluster javaFuncParams add=javaScopeDecl,javaConceptKind,javaStorageClass,javaExternal
+ endif
+
+ if g:java_highlight_functions =~# '^indent[1-8]\=$'
+ let s:last = g:java_highlight_functions[-1 :]
+ let s:indent = s:last != 't' ? repeat("\x20", s:last) : "\t"
" Try to not match other type members, initialiser blocks, enum
" constants (JLS-17, §8.9.1), and constructors (JLS-17, §8.1.7):
" at any _conventional_ indentation, skip over all fields with
" "[^=]*", all records with "\<record\s", and let the "*Skip*"
" definitions take care of constructor declarations and enum
- " constants (with no support for @Foo(value = "bar")).
- exec 'syn region javaFuncDef start=+^' . s:indent . '\%(<[^>]\+>\+\s\+\|\%(\%(@\%(\K\k*\.\)*\K\k*\>\)\s\+\)\+\)\=\%(\<\K\k*\>\.\)*\K\k*\>[^=]*\%(\<record\)\@' . s:ff.Peek('6', '') . '<!\s\K\k*\s*(+ end=+)+ contains=@javaFuncParams'
+ " constants (with no support for @Foo(value = "bar")). Also,
+ " reject inlined declarations with "[^{]" for signature.
+ exec 'syn region javaFuncDef ' . s:ff.GroupArgs('transparent matchgroup=javaFuncDefStart', '') . ' start=/' . s:ff.PeekTo('\%(', '') . '^' . s:indent . '\%(<[^>]\+>\+\s\+\|\%(\%(@\%(\K\k*\.\)*\K\k*\>\)\s\+\)\+\)\=\%(\<\K\k*\>\.\)*\K\k*\>[^={]*\%(\<record\)\@' . s:ff.Peek('6', '') . '<!\s' . s:ff.PeekFrom('\)\@' . s:ff.Peek('80', '') . '<=', '') . '\K\k*\s*(/ end=/)/ contains=@javaFuncParams'
" As long as package-private constructors cannot be matched with
" javaFuncDef, do not look with javaConstructorSkipDeclarator for
" them.
- exec 'syn match javaConstructorSkipDeclarator transparent +^' . s:indent . '\%(\%(@\%(\K\k*\.\)*\K\k*\>\)\s\+\)*p\%(ublic\|rotected\|rivate\)\s\+\%(<[^>]\+>\+\s\+\)\=\K\k*\s*\ze(+ contains=javaAnnotation,javaScopeDecl'
- exec 'syn match javaEnumSkipArgumentativeConstant transparent +^' . s:indent . '\%(\%(@\%(\K\k*\.\)*\K\k*\>\)\s\+\)*\K\k*\s*\ze(+ contains=javaAnnotation'
+ exec 'syn match javaConstructorSkipDeclarator transparent /^' . s:indent . '\%(\%(@\%(\K\k*\.\)*\K\k*\>\)\s\+\)*p\%(ublic\|rotected\|rivate\)\s\+\%(<[^>]\+>\+\s\+\)\=\K\k*\s*\ze(/ contains=javaAnnotation,javaScopeDecl,javaClassDecl,javaTypedef,javaGenerics'
+ " With a zero-width span for signature applicable on demand to
+ " javaFuncDef, make related adjustments:
+ " (1) Claim all enum constants of a line as a unit.
+ exec 'syn match javaEnumSkipConstant contained transparent /^' . s:indent . '\%(\%(\%(@\%(\K\k*\.\)*\K\k*\>\)\s\+\)*\K\k*\s*\%((.*)\)\=\s*[,;({]\s*\)\+/ contains=@javaEnumConstants'
+ " (2) Define a syntax group for top level enumerations and tell
+ " apart their constants from method declarations.
+ exec 'syn region javaTopEnumDeclaration transparent start=/\%(^\%(\%(@\%(\K\k*\.\)*\K\k*\>\)\s\+\)*\%(p\%(ublic\|rotected\|rivate\)\s\+\)\=\%(strictfp\s\+\)\=\<enum\_s\+\)\@' . s:ff.Peek('80', '') . '<=\K\k*\%(\_s\+implements\_s.\+\)\=\_s*{/ end=/}/ contains=@javaTop,javaEnumSkipConstant'
+ " (3) Define a base variant of javaParenT without using @javaTop
+ " in order to not include javaFuncDef.
+ syn region javaParenE transparent matchgroup=javaParen start="(" end=")" contains=@javaEnumConstants,javaInParen
+ syn region javaParenE transparent matchgroup=javaParen start="\[" end="\]" contains=@javaEnumConstants
+ syn cluster javaEnumConstants contains=TOP,javaTopEnumDeclaration,javaFuncDef,javaParenT
unlet s:indent s:last
else
" This is the "style" variant (:help ft-java-syntax).
- syn cluster javaFuncParams add=javaScopeDecl,javaConceptKind,javaStorageClass,javaExternal
" Match arbitrarily indented camelCasedName method declarations.
" Match: [@ɐ] [abstract] [<α, β>] Τʬ[<γ>][[][]] μʭʭ(/* ... */);
- exec 'syn region javaFuncDef start=/' . s:ff.Engine('\%#=2', '') . '^\s\+\%(\%(@\%(\K\k*\.\)*\K\k*\>\)\s\+\)*\%(p\%(ublic\|rotected\|rivate\)\s\+\)\=\%(\%(abstract\|default\)\s\+\|\%(\%(final\|\%(native\|strictfp\)\|s\%(tatic\|ynchronized\)\)\s\+\)*\)\=\%(<.*[[:space:]-]\@' . s:ff.Peek('1', '') . '<!>\s\+\)\=\%(void\|\%(b\%(oolean\|yte\)\|char\|short\|int\|long\|float\|double\|\%(\<\K\k*\>\.\)*\<' . s:ff.UpperCase('[$_[:upper:]]', '[^a-z0-9]') . '\k*\>\%(<[^(){}]*[[:space:]-]\@' . s:ff.Peek('1', '') . '<!>\)\=\)\%(\[\]\)*\)\s\+\<' . s:ff.LowerCase('[$_[:lower:]]', '[^A-Z0-9]') . '\k*\>\s*(/ end=/)/ skip=/\/\*.\{-}\*\/\|\/\/.*$/ contains=@javaFuncParams'
+ exec 'syn region javaFuncDef ' . s:ff.GroupArgs('transparent matchgroup=javaFuncDefStart', '') . ' start=/' . s:ff.Engine('\%#=2', '') . s:ff.PeekTo('\%(', '') . '^\s\+\%(\%(@\%(\K\k*\.\)*\K\k*\>\)\s\+\)*\%(p\%(ublic\|rotected\|rivate\)\s\+\)\=\%(\%(abstract\|default\)\s\+\|\%(\%(final\|\%(native\|strictfp\)\|s\%(tatic\|ynchronized\)\)\s\+\)*\)\=\%(<.*[[:space:]-]\@' . s:ff.Peek('1', '') . '<!>\s\+\)\=\%(void\|\%(b\%(oolean\|yte\)\|char\|short\|int\|long\|float\|double\|\%(\<\K\k*\>\.\)*\<' . s:ff.UpperCase('[$_[:upper:]]', '[^a-z0-9]') . '\k*\>\%(<[^(){}]*[[:space:]-]\@' . s:ff.Peek('1', '') . '<!>\)\=\)\%(\[\]\)*\)\s\+' . s:ff.PeekFrom('\)\@' . s:ff.Peek('80', '') . '<=', '') . '\<' . s:ff.LowerCase('[$_[:lower:]]', '[^A-Z0-9]') . '\k*\>\s*(/ end=/)/ skip=/\/\*.\{-}\*\/\|\/\/.*$/ contains=@javaFuncParams'
endif
-
- exec 'syn match javaLambdaDef "\<\K\k*\>\%(\<default\>\)\@' . s:ff.Peek('7', '') . '<!\s*->"'
- syn match javaBraces "[{}]"
endif
-if exists("java_highlight_debug")
+if exists("g:java_highlight_debug")
" Strings and constants
syn match javaDebugSpecial contained "\\\%(u\x\x\x\x\|[0-3]\o\o\|\o\o\=\|[bstnfr"'\\]\)"
- syn region javaDebugString contained start=+"+ end=+"+ contains=javaDebugSpecial
+ syn region javaDebugString contained start=+"+ end=+"+ contains=javaDebugSpecial
syn region javaDebugString contained start=+"""[ \t\x0c\r]*$+hs=e+1 end=+"""+he=s-1 contains=javaDebugSpecial,javaDebugTextBlockError
- " The highlight groups of java{StrTempl,Debug{,Paren,StrTempl}}\,
- " share one colour by default. Do not conflate unrelated parens.
- syn region javaDebugStrTemplEmbExp contained matchgroup=javaDebugStrTempl start="\\{" end="}" contains=javaComment,javaLineComment,javaDebug\%(Paren\)\@!.*
- exec 'syn region javaDebugStrTempl contained start=+\%(\.[[:space:]\n]*\)\@' . s:ff.Peek('80', '') . '<="+ end=+"+ contains=javaDebugStrTemplEmbExp,javaDebugSpecial'
- exec 'syn region javaDebugStrTempl contained start=+\%(\.[[:space:]\n]*\)\@' . s:ff.Peek('80', '') . '<="""[ \t\x0c\r]*$+hs=e+1 end=+"""+he=s-1 contains=javaDebugStrTemplEmbExp,javaDebugSpecial,javaDebugTextBlockError'
+
+ if s:ff.IsRequestedPreviewFeature(430)
+ " The highlight groups of java{StrTempl,Debug{,Paren,StrTempl}}\,
+ " share one colour by default. Do not conflate unrelated parens.
+ syn region javaDebugStrTemplEmbExp contained matchgroup=javaDebugStrTempl start="\\{" end="}" contains=javaComment,javaLineComment,javaDebug\%(Paren\)\@!.*
+ exec 'syn region javaDebugStrTempl contained start=+\%(\.[[:space:]\n]*\)\@' . s:ff.Peek('80', '') . '<="+ end=+"+ contains=javaDebugStrTemplEmbExp,javaDebugSpecial'
+ exec 'syn region javaDebugStrTempl contained start=+\%(\.[[:space:]\n]*\)\@' . s:ff.Peek('80', '') . '<="""[ \t\x0c\r]*$+hs=e+1 end=+"""+he=s-1 contains=javaDebugStrTemplEmbExp,javaDebugSpecial,javaDebugTextBlockError'
+ hi def link javaDebugStrTempl Macro
+ endif
+
syn match javaDebugTextBlockError contained +"""\s*"""+
syn match javaDebugCharacter contained "'[^\\]'"
syn match javaDebugSpecialCharacter contained "'\\.'"
@@ -375,7 +697,7 @@ if exists("java_highlight_debug")
syn match javaDebugNumber contained "\<0[xX]\%(\x\%(_*\x\)*\.\=\|\%(\x\%(_*\x\)*\)\=\.\x\%(_*\x\)*\)[pP][-+]\=\d\%(_*\d\)*[fFdD]\=\>"
syn keyword javaDebugBoolean contained true false
syn keyword javaDebugType contained null this super
- syn region javaDebugParen start=+(+ end=+)+ contained contains=javaDebug.*,javaDebugParen
+ syn region javaDebugParen contained start=+(+ end=+)+ contains=javaDebug.*,javaDebugParen
" To make this work, define the highlighting for these groups.
syn match javaDebug "\<System\.\%(out\|err\)\.print\%(ln\)\=\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
@@ -385,53 +707,88 @@ if exists("java_highlight_debug")
" FIXME: What API do "trace*" belong to?
" syn match javaDebug "\<trace[SL]\=\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
- hi def link javaDebug Debug
- hi def link javaDebugString DebugString
- hi def link javaDebugStrTempl Macro
- hi def link javaDebugTextBlockError Error
- hi def link javaDebugType DebugType
- hi def link javaDebugBoolean DebugBoolean
- hi def link javaDebugNumber Debug
- hi def link javaDebugSpecial DebugSpecial
- hi def link javaDebugSpecialCharacter DebugSpecial
- hi def link javaDebugCharacter DebugString
- hi def link javaDebugParen Debug
-
- hi def link DebugString String
- hi def link DebugSpecial Special
- hi def link DebugBoolean Boolean
- hi def link DebugType Type
+ hi def link javaDebug Debug
+ hi def link javaDebugString DebugString
+ hi def link javaDebugTextBlockError Error
+ hi def link javaDebugType DebugType
+ hi def link javaDebugBoolean DebugBoolean
+ hi def link javaDebugNumber Debug
+ hi def link javaDebugSpecial DebugSpecial
+ hi def link javaDebugSpecialCharacter DebugSpecial
+ hi def link javaDebugCharacter DebugString
+ hi def link javaDebugParen Debug
+
+ hi def link DebugString String
+ hi def link DebugSpecial Special
+ hi def link DebugBoolean Boolean
+ hi def link DebugType Type
endif
-if exists("java_mark_braces_in_parens_as_errors")
- syn match javaInParen contained "[{}]"
- hi def link javaInParen javaError
+" Try not to fold top-level-type bodies under assumption that there is
+" but one such body.
+exec 'syn region javaBlock transparent start="\%(^\|^\S[^:]\+\)\@' . s:ff.Peek('120', '') . '<!{" end="}" fold'
+
+if exists("g:java_mark_braces_in_parens_as_errors")
+ syn match javaInParen contained "[{}]"
+ hi def link javaInParen javaError
endif
" catch errors caused by wrong parenthesis
-syn region javaParenT transparent matchgroup=javaParen start="(" end=")" contains=@javaTop,javaParenT1
-syn region javaParenT1 transparent matchgroup=javaParen1 start="(" end=")" contains=@javaTop,javaParenT2 contained
-syn region javaParenT2 transparent matchgroup=javaParen2 start="(" end=")" contains=@javaTop,javaParenT contained
-syn match javaParenError ")"
+syn region javaParenT transparent matchgroup=javaParen start="(" end=")" contains=@javaTop,javaInParen,javaParenT1
+syn region javaParenT1 contained transparent matchgroup=javaParen1 start="(" end=")" contains=@javaTop,javaInParen,javaParenT2
+syn region javaParenT2 contained transparent matchgroup=javaParen2 start="(" end=")" contains=@javaTop,javaInParen,javaParenT
+syn match javaParenError ")"
" catch errors caused by wrong square parenthesis
-syn region javaParenT transparent matchgroup=javaParen start="\[" end="\]" contains=@javaTop,javaParenT1
-syn region javaParenT1 transparent matchgroup=javaParen1 start="\[" end="\]" contains=@javaTop,javaParenT2 contained
-syn region javaParenT2 transparent matchgroup=javaParen2 start="\[" end="\]" contains=@javaTop,javaParenT contained
-syn match javaParenError "\]"
-
-hi def link javaParenError javaError
+syn region javaParenT transparent matchgroup=javaParen start="\[" end="\]" contains=@javaTop,javaParenT1
+syn region javaParenT1 contained transparent matchgroup=javaParen1 start="\[" end="\]" contains=@javaTop,javaParenT2
+syn region javaParenT2 contained transparent matchgroup=javaParen2 start="\[" end="\]" contains=@javaTop,javaParenT
+syn match javaParenError "\]"
+
+" Lambda expressions (JLS-17, §15.27) and method reference expressions
+" (JLS-17, §15.13).
+if exists("g:java_highlight_functions")
+ syn match javaMethodRef ":::\@!"
+
+ if exists("g:java_highlight_signature")
+ let s:ff.LambdaDef = s:ff.LeftConstant
+ else
+ let s:ff.LambdaDef = s:ff.RightConstant
+ endif
-if exists("java_highlight_functions")
" Make ()-matching definitions after the parenthesis error catcher.
- exec 'syn match javaLambdaDef "\k\@' . s:ff.Peek('4', '') . '<!(\%(\k\|[[:space:]<>?\[\]@,.]\)*)\s*->"'
+ "
+ " Note that here and elsewhere a single-line token is used for \z,
+ " with other tokens repeated as necessary, to overcome the lack of
+ " support for multi-line matching with \z.
+ "
+ " Match: ([@A [@B ...] final] var a[, var b, ...]) ->
+ " | ([@A [@B ...] final] T[<α>][[][]] a[, T b, ...]) ->
+ " There is no recognition of expressions interspersed with comments
+ " or of expressions whose parameterised parameter types are written
+ " across multiple lines.
+ exec 'syn ' . s:ff.LambdaDef('region javaLambdaDef transparent matchgroup=javaLambdaDefStart start=/', 'match javaLambdaDef "') . '\k\@' . s:ff.Peek('4', '') . '<!(' . s:ff.LambdaDef('\%(', '') . '[[:space:]\n]*\%(\%(@\%(\K\k*\.\)*\K\k*\>\%((\_.\{-1,})\)\{-,1}[[:space:]\n]\+\)*\%(final[[:space:]\n]\+\)\=\%(\<\K\k*\>\.\)*\<\K\k*\>\%(<[^(){}]*[[:space:]-]\@' . s:ff.Peek('1', '') . '<!>\)\=\%(\%(\%(\[\]\)\+\|\.\.\.\)\)\=[[:space:]\n]\+\<\K\k*\>\%(\[\]\)*\%(,[[:space:]\n]*\)\=\)\+)[[:space:]\n]*' . s:ff.LambdaDef('\z(->\)\)\@=/ end=/)[[:space:]\n]*\z1/', '->"') . ' contains=javaAnnotation,javaParamModifier,javaLambdaVarType,javaType,@javaClasses,javaGenerics,javaVarArg'
+ " Match: () ->
+ " | (a[, b, ...]) ->
+ exec 'syn ' . s:ff.LambdaDef('region javaLambdaDef transparent matchgroup=javaLambdaDefStart start=/', 'match javaLambdaDef "') . '\k\@' . s:ff.Peek('4', '') . '<!(' . s:ff.LambdaDef('\%(', '') . '[[:space:]\n]*\%(\<\K\k*\>\%(,[[:space:]\n]*\)\=\)*)[[:space:]\n]*' . s:ff.LambdaDef('\z(->\)\)\@=/ end=/)[[:space:]\n]*\z1/', '->"')
+ " Match: a ->
+ exec 'syn ' . s:ff.LambdaDef('region javaLambdaDef transparent start=/', 'match javaLambdaDef "') . '\<\K\k*\>\%(\<default\>\)\@' . s:ff.Peek('7', '') . '<!' . s:ff.LambdaDef('\%([[:space:]\n]*\z(->\)\)\@=/ matchgroup=javaLambdaDefStart end=/\z1/', '[[:space:]\n]*->"')
+
+ syn keyword javaParamModifier contained final
+ syn keyword javaLambdaVarType contained var
+ hi def link javaParamModifier javaConceptKind
+ hi def link javaLambdaVarType javaOperator
+ hi def link javaLambdaDef javaFuncDef
+ hi def link javaLambdaDefStart javaFuncDef
+ hi def link javaMethodRef javaFuncDef
+ hi def link javaFuncDef Function
endif
" The @javaTop cluster comprises non-contained Java syntax groups.
" Note that the syntax file "aidl.vim" relies on its availability.
-syn cluster javaTop contains=TOP,javaDocComment,javaFold,javaParenError,javaParenT
+syn cluster javaTop contains=TOP,javaTopEnumDeclaration
-if !exists("java_minlines")
- let java_minlines = 10
+if !exists("g:java_minlines")
+ let g:java_minlines = 10
endif
" Note that variations of a /*/ balanced comment, e.g., /*/*/, /*//*/,
@@ -440,17 +797,11 @@ endif
" to make synchronisation start further towards file's beginning by
" bumping up g:java_minlines or issuing ':syntax sync fromstart' or
" preferring &foldmethod set to 'syntax'.
-exec "syn sync ccomment javaComment minlines=" . java_minlines
+exec "syn sync ccomment javaComment minlines=" . g:java_minlines
" The default highlighting.
-hi def link javaLambdaDef Function
-hi def link javaFuncDef Function
hi def link javaVarArg Function
-hi def link javaBraces Function
hi def link javaBranch Conditional
-hi def link javaUserLabelRef javaUserLabel
-hi def link javaLabel Label
-hi def link javaUserLabel Label
hi def link javaConditional Conditional
hi def link javaRepeat Repeat
hi def link javaExceptions Exception
@@ -459,60 +810,91 @@ hi def link javaStorageClass StorageClass
hi def link javaMethodDecl javaStorageClass
hi def link javaClassDecl javaStorageClass
hi def link javaScopeDecl javaStorageClass
-hi def link javaConceptKind NonText
+hi def link javaConceptKind javaStorageClass
-hi def link javaBoolean Boolean
-hi def link javaSpecial Special
+hi def link javaBoolean Boolean
+hi def link javaSpecial Special
hi def link javaSpecialError Error
hi def link javaSpecialCharError Error
hi def link javaString String
-hi def link javaStrTempl Macro
hi def link javaCharacter Character
hi def link javaSpecialChar SpecialChar
hi def link javaNumber Number
hi def link javaError Error
+hi def link javaError2 javaError
hi def link javaTextBlockError Error
+hi def link javaParenError javaError
hi def link javaStatement Statement
hi def link javaOperator Operator
-hi def link javaComment Comment
-hi def link javaDocComment Comment
-hi def link javaLineComment Comment
hi def link javaConstant Constant
-hi def link javaTypedef Typedef
+hi def link javaTypedef Typedef
hi def link javaTodo Todo
hi def link javaAnnotation PreProc
+hi def link javaAnnotationStart javaAnnotation
+hi def link javaType Type
+hi def link javaExternal Include
+
+hi def link javaUserLabel Label
+hi def link javaUserLabelRef javaUserLabel
+hi def link javaLabel Label
+hi def link javaLabelDefault javaLabel
+hi def link javaLabelVarType javaOperator
-hi def link javaCommentTitle SpecialComment
-hi def link javaDocTags Special
-hi def link javaDocCodeTag Special
-hi def link javaDocSnippetTag Special
-hi def link javaDocParam Function
-hi def link javaDocSeeTagParam Function
+hi def link javaComment Comment
hi def link javaCommentStar javaComment
+hi def link javaLineComment Comment
+hi def link javaCommentMarkupTagAttr javaHtmlArg
+hi def link javaCommentString javaString
+hi def link javaComment2String javaString
+hi def link javaCommentCharacter javaCharacter
+hi def link javaCommentError javaError
+hi def link javaCommentStart javaComment
-hi def link javaType Type
-hi def link javaExternal Include
+hi def link javaHtmlArg Type
+hi def link javaHtmlString String
-hi def link htmlComment Special
-hi def link htmlCommentPart Special
-hi def link htmlArg Type
-hi def link htmlString String
-hi def link javaSpaceError Error
+let b:current_syntax = "java"
-if s:module_info_cur_buf
- hi def link javaModuleStorageClass StorageClass
- hi def link javaModuleStmt Statement
- hi def link javaModuleExternal Include
+if g:main_syntax == 'java'
+ unlet g:main_syntax
endif
-let b:current_syntax = "java"
+if exists("s:clear_java_ignore_html")
+ unlet! s:clear_java_ignore_html g:java_ignore_html
+endif
-if main_syntax == 'java'
- unlet main_syntax
+if exists("s:clear_java_ignore_markdown")
+ unlet! s:clear_java_ignore_markdown g:java_ignore_markdown
endif
let b:spell_options = "contained"
let &cpo = s:cpo_save
-unlet s:module_info_cur_buf s:ff s:cpo_save
+unlet s:cpo_save s:ff s:with_html s:with_markdown
-" vim: sw=2 ts=8 noet sta
+" See ":help vim9-mix".
+if !has("vim9script")
+ finish
+endif
+
+if exists("g:java_foldtext_show_first_or_second_line")
+ def! s:LazyPrefix(prefix: string, dashes: string, count: number): string
+ return empty(prefix)
+ ? printf('+-%s%3d lines: ', dashes, count)
+ : prefix
+ enddef
+
+ def! s:JavaSyntaxFoldTextExpr(): string
+ # Piggyback on NGETTEXT.
+ const summary: string = foldtext()
+ return getline(v:foldstart) !~ '/\*\+\s*$'
+ ? summary
+ : LazyPrefix(matchstr(summary, '^+-\+\s*\d\+\s.\{-1,}:\s'),
+ v:folddashes,
+ (v:foldend - v:foldstart + 1)) ..
+ getline(v:foldstart + 1)
+ enddef
+
+ setlocal foldtext=s:JavaSyntaxFoldTextExpr()
+ delfunction! g:JavaSyntaxFoldTextExpr
+endif
+" vim: fdm=syntax sw=2 ts=8 noet sta
diff --git a/runtime/syntax/javascript.vim b/runtime/syntax/javascript.vim
index e3b4cdf703..c73f5d7097 100644
--- a/runtime/syntax/javascript.vim
+++ b/runtime/syntax/javascript.vim
@@ -10,6 +10,7 @@
" Last Change: 2022 Jun 09
" 2013 Jun 12: adjusted javaScriptRegexpString (Kevin Locke)
" 2018 Apr 14: adjusted javaScriptRegexpString (LongJohnCoder)
+" 2024 Aug 14: fix a few stylistic issues (#15480)
" tuning parameters:
" unlet javaScript_fold
@@ -59,14 +60,15 @@ syn keyword javaScriptType Array Boolean Date Function Number Object String Reg
syn keyword javaScriptStatement return with await yield
syn keyword javaScriptBoolean true false
syn keyword javaScriptNull null undefined
-syn keyword javaScriptIdentifier arguments this var let
+syn keyword javaScriptIdentifier arguments this
syn keyword javaScriptLabel case default
syn keyword javaScriptException try catch finally throw
syn keyword javaScriptMessage alert confirm prompt status
syn keyword javaScriptGlobal self window top parent
syn keyword javaScriptMember document event location
syn keyword javaScriptDeprecated escape unescape
-syn keyword javaScriptReserved abstract boolean byte char class const debugger double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile async
+syn keyword javaScriptReserved abstract boolean byte char class const debugger double enum export extends final float from goto implements import int interface let long native package private protected public short super synchronized throws transient var volatile async
+syn keyword javaScriptModifier static
syn cluster javaScriptEmbededExpr contains=javaScriptBoolean,javaScriptNull,javaScriptIdentifier,javaScriptStringD,javaScriptStringS,javaScriptStringT
@@ -110,7 +112,7 @@ hi def link javaScriptBranch Conditional
hi def link javaScriptOperator Operator
hi def link javaScriptType Type
hi def link javaScriptStatement Statement
-hi def link javaScriptFunction Function
+hi def link javaScriptFunction Keyword
hi def link javaScriptBraces Function
hi def link javaScriptError Error
hi def link javaScrParenError javaScriptError
@@ -126,6 +128,7 @@ hi def link javaScriptGlobal Keyword
hi def link javaScriptMember Keyword
hi def link javaScriptDeprecated Exception
hi def link javaScriptReserved Keyword
+hi def link javaScriptModifier StorageClass
hi def link javaScriptDebug Debug
hi def link javaScriptConstant Label
hi def link javaScriptEmbed Special
diff --git a/runtime/syntax/jinja.vim b/runtime/syntax/jinja.vim
new file mode 100644
index 0000000000..6000855ff7
--- /dev/null
+++ b/runtime/syntax/jinja.vim
@@ -0,0 +1,86 @@
+" Vim syntax file
+" Language: Jinja
+" Maintainer: Gregory Anders
+" Upstream: https://gitlab.com/HiPhish/jinja.vim
+
+if exists('b:current_syntax')
+ finish
+endif
+
+syntax case match
+syntax sync fromstart
+
+" Jinja template built-in tags and parameters (without filter, macro, is and raw, they
+" have special threatment)
+syn keyword jinjaStatement containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained and if else in not or recursive as import
+
+syn keyword jinjaStatement containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained is filter skipwhite nextgroup=jinjaFilter
+syn keyword jinjaStatement containedin=jinjaTagBlock contained macro skipwhite nextgroup=jinjaFunction
+syn keyword jinjaStatement containedin=jinjaTagBlock contained block skipwhite nextgroup=jinjaBlockName
+
+" Variable Names
+syn match jinjaVariable containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained /[a-zA-Z_][a-zA-Z0-9_]*/
+syn keyword jinjaSpecial containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained false true none False True None loop super caller varargs kwargs
+
+" Filters
+syn match jinjaOperator "|" containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained skipwhite nextgroup=jinjaFilter
+syn match jinjaFilter contained /[a-zA-Z_][a-zA-Z0-9_]*/
+syn match jinjaFunction contained /[a-zA-Z_][a-zA-Z0-9_]*/
+syn match jinjaBlockName contained /[a-zA-Z_][a-zA-Z0-9_]*/
+
+" Jinja template constants
+syn region jinjaString containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained start=/"/ skip=/\(\\\)\@<!\(\(\\\\\)\@>\)*\\"/ end=/"/
+syn region jinjaString containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained start=/'/ skip=/\(\\\)\@<!\(\(\\\\\)\@>\)*\\'/ end=/'/
+syn match jinjaNumber containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained /[0-9]\+\(\.[0-9]\+\)\?/
+
+" Operators
+syn match jinjaOperator containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained /[+\-*\/<>=!,:]/
+syn match jinjaPunctuation containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained /[()\[\]]/
+syn match jinjaOperator containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained /\./ nextgroup=jinjaAttribute
+syn match jinjaAttribute contained /[a-zA-Z_][a-zA-Z0-9_]*/
+
+" Jinja template tag and variable blocks
+syn region jinjaNested matchgroup=jinjaOperator start="(" end=")" transparent display containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained
+syn region jinjaNested matchgroup=jinjaOperator start="\[" end="\]" transparent display containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained
+syn region jinjaNested matchgroup=jinjaOperator start="{" end="}" transparent display containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained
+syn region jinjaTagBlock matchgroup=jinjaTagDelim start=/{%-\?/ end=/-\?%}/ containedin=ALLBUT,jinjaTagBlock,jinjaVarBlock,jinjaRaw,jinjaString,jinjaNested,jinjaComment
+
+syn region jinjaVarBlock matchgroup=jinjaVarDelim start=/{{-\?/ end=/-\?}}/ containedin=ALLBUT,jinjaTagBlock,jinjaVarBlock,jinjaRaw,jinjaString,jinjaNested,jinjaComment
+
+" Jinja template 'raw' tag
+syn region jinjaRaw matchgroup=jinjaRawDelim start="{%\s*raw\s*%}" end="{%\s*endraw\s*%}" containedin=ALLBUT,jinjaTagBlock,jinjaVarBlock,jinjaString,jinjaComment
+
+" Jinja comments
+syn region jinjaComment matchgroup=jinjaCommentDelim start="{#" end="#}" containedin=ALLBUT,jinjaTagBlock,jinjaVarBlock,jinjaString
+
+" Block start keywords. A bit tricker. We only highlight at the start of a
+" tag block and only if the name is not followed by a comma or equals sign
+" which usually means that we have to deal with an assignment.
+syn match jinjaStatement containedin=jinjaTagBlock contained /\({%-\?\s*\)\@<=\<[a-zA-Z_][a-zA-Z0-9_]*\>\(\s*[,=]\)\@!/
+
+" and context modifiers
+syn match jinjaStatement containedin=jinjaTagBlock contained /\<with\(out\)\?\s\+context\>/
+
+hi def link jinjaPunctuation jinjaOperator
+hi def link jinjaAttribute jinjaVariable
+hi def link jinjaFunction jinjaFilter
+
+hi def link jinjaTagDelim jinjaTagBlock
+hi def link jinjaVarDelim jinjaVarBlock
+hi def link jinjaCommentDelim jinjaComment
+hi def link jinjaRawDelim jinja
+
+hi def link jinjaSpecial Special
+hi def link jinjaOperator Normal
+hi def link jinjaRaw Normal
+hi def link jinjaTagBlock PreProc
+hi def link jinjaVarBlock PreProc
+hi def link jinjaStatement Statement
+hi def link jinjaFilter Function
+hi def link jinjaBlockName Function
+hi def link jinjaVariable Identifier
+hi def link jinjaString Constant
+hi def link jinjaNumber Constant
+hi def link jinjaComment Comment
+
+let b:current_syntax = 'jinja'
diff --git a/runtime/syntax/kconfig.vim b/runtime/syntax/kconfig.vim
index c7a305b73c..0aecc00060 100644
--- a/runtime/syntax/kconfig.vim
+++ b/runtime/syntax/kconfig.vim
@@ -1,7 +1,7 @@
" Vim syntax file
" Maintainer: Christian Brabandt <cb@256bit.org>
" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
-" Latest Revision: 2015-05-29
+" Latest Revision: 2024-07-19
" License: Vim (see :h license)
" Repository: https://github.com/chrisbra/vim-kconfig
@@ -715,8 +715,6 @@ syn region kconfigHelpText
\ skip='^$'
\ end='^\z1\@!'
-syn sync match kconfigSyncHelp grouphere kconfigHelpText 'help\|---help---'
-
hi def link kconfigTodo Todo
hi def link kconfigComment Comment
hi def link kconfigKeyword Keyword
diff --git a/runtime/syntax/kdl.vim b/runtime/syntax/kdl.vim
new file mode 100644
index 0000000000..97e8f93b61
--- /dev/null
+++ b/runtime/syntax/kdl.vim
@@ -0,0 +1,48 @@
+" Vim syntax file
+" Language: KDL
+" Maintainer: Aram Drevekenin <aram@poor.dev>
+" Maintainer: Yinzuo Jiang <jiangyinzuo@foxmail.com>
+" Latest Revision: 2024-06-16
+
+" quit when a syntax file was already loaded
+if exists("b:current_syntax")
+ finish
+endif
+
+syn match kdlNode '\v(\w|-|\=)' display
+syn match kdlBool '\v(true|false)' display
+
+syn keyword kdlTodo contained TODO FIXME XXX NOTE
+syn region kdlComment start="//" end="$" contains=kdlTodo,@Spell
+syn region kdlComment start="/\*" end="\*/" contains=kdlTodo,@Spell
+
+" Regular int like number with - + or nothing in front
+syn match kdlNumber '\d\+'
+syn match kdlNumber '[-+]\d\+'
+
+" Floating point number with decimal no E or e (+,-)
+syn match kdlNumber '\d\+\.\d*' contained display
+syn match kdlNumber '[-+]\d\+\.\d*' contained display
+
+" Floating point like number with E and no decimal point (+,-)
+syn match kdlNumber '[-+]\=\d[[:digit:]]*[eE][\-+]\=\d\+' contained display
+syn match kdlNumber '\d[[:digit:]]*[eE][\-+]\=\d\+' contained display
+
+" Floating point like number with E and decimal point (+,-)
+syn match kdlNumber '[-+]\=\d[[:digit:]]*\.\d*[eE][\-+]\=\d\+' contained display
+syn match kdlNumber '\d[[:digit:]]*\.\d*[eE][\-+]\=\d\+' contained display
+
+syn region kdlString start='"' end='"' skip='\\\\\|\\"' display
+
+syn region kdlChildren start="{" end="}" contains=kdlString,kdlNumber,kdlNode,kdlBool,kdlComment
+
+hi def link kdlTodo Todo
+hi def link kdlComment Comment
+hi def link kdlNode Statement
+hi def link kdlBool Boolean
+hi def link kdlString String
+hi def link kdlNumber Number
+
+let b:current_syntax = "kdl"
+
+" vim: sw=2 sts=2 et
diff --git a/runtime/syntax/kivy.vim b/runtime/syntax/kivy.vim
index b145503478..d4bccfc147 100644
--- a/runtime/syntax/kivy.vim
+++ b/runtime/syntax/kivy.vim
@@ -1,9 +1,9 @@
" Vim syntax file
" Language: Kivy
-" Maintainer: Corey Prophitt <prophitt.corey@gmail.com>
-" Last Change: May 29th, 2014
+" Maintainer: Corey Prophitt <corey@prophitt.me>
+" Last Change: Jul 31st, 2024
" Version: 1
-" URL: http://kivy.org/
+" URL: https://kivy.org/
if exists("b:current_syntax")
finish
@@ -13,11 +13,11 @@ endif
syn include @pyth $VIMRUNTIME/syntax/python.vim
" Kivy language rules can be found here
-" http://kivy.org/docs/guide/lang.html
+" https://kivy.org/doc/stable/guide/lang.html
" Define Kivy syntax
syn match kivyPreProc /#:.*/
-syn match kivyComment /#.*/
+syn match kivyComment /#[^:].*/
syn match kivyRule /<\I\i*\(,\s*\I\i*\)*>:/
syn match kivyAttribute /\<\I\i*\>/ nextgroup=kivyValue
diff --git a/runtime/syntax/lc.vim b/runtime/syntax/lc.vim
index a334529385..1991c1b582 100644
--- a/runtime/syntax/lc.vim
+++ b/runtime/syntax/lc.vim
@@ -2,6 +2,7 @@
" Language: Elsa
" Maintainer: Miles Glapa-Grossklag <miles@glapa-grossklag.com>
" Last Change: 2023-01-29
+" 2024 May 25 by Riley Bruins <ribru17@gmail.com> (move 'commentstring' to ftplugin)
if exists('b:current_syntax')
finish
@@ -13,7 +14,6 @@ syntax match elsaKeyword "\v:"
highlight link elsaKeyword Keyword
" Comments
-setlocal commentstring=--%s
syntax match elsaComment "\v--.*$"
highlight link elsaComment Comment
diff --git a/runtime/syntax/logindefs.vim b/runtime/syntax/logindefs.vim
index 8cb4295eda..51fa19992c 100644
--- a/runtime/syntax/logindefs.vim
+++ b/runtime/syntax/logindefs.vim
@@ -1,7 +1,8 @@
-" Vim syntax file
+" Vim syntax file for login.defs(5)
" Language: login.defs(5) configuration file
" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
" Latest Revision: 2010-11-29
+" 2024 Jul 12 by Vim Project: Update keywords
if exists("b:current_syntax")
finish
@@ -35,6 +36,8 @@ syn keyword logindefsBooleanKeyword contained
\ CREATE_HOME
\ DEFAULT_HOME
\ FAILLOG_ENAB
+ \ FORCE_SHADOW
+ \ GRANT_AUX_GROUP_SUBIDS
\ LASTLOG_ENAB
\ LOG_OK_LOGINS
\ LOG_UNKFAIL_ENAB
@@ -54,15 +57,20 @@ syn keyword logindefsBoolean contained yes no
syn keyword logindefsEncryptKeyword contained
\ ENCRYPT_METHOD
+ \ HMAC_CRYPTO_ALGO
\ nextgroup=logindefsEncryptMethod skipwhite
syn keyword logindefsEncryptMethod contained
+ \ BCRYPT
\ DES
\ MD5
\ SHA256
\ SHA512
+ \ YESCRYPT
syn keyword logindefsNumberKeyword contained
+ \ BCRYPT_MAX_ROUNDS
+ \ BCRYPT_MIN_ROUNDS
\ ERASECHAR
\ FAIL_DELAY
\ GID_MAX
@@ -79,6 +87,12 @@ syn keyword logindefsNumberKeyword contained
\ PASS_MIN_LEN
\ SHA_CRYPT_MAX_ROUNDS
\ SHA_CRYPT_MIN_ROUNDS
+ \ SUB_GID_COUNT
+ \ SUB_GID_MAX
+ \ SUB_GID_MIN
+ \ SUB_UID_COUNT
+ \ SUB_UID_MAX
+ \ SUB_UID_MIN
\ SYS_GID_MAX
\ SYS_GID_MIN
\ SYS_UID_MAX
@@ -86,9 +100,15 @@ syn keyword logindefsNumberKeyword contained
\ UID_MAX
\ UID_MIN
\ ULIMIT
- \ UMASK
+ \ YESCRYPT_COST_FACTOR
\ nextgroup=@logindefsNumber skipwhite
+syn keyword logindefsNumberKeyword contained
+ \ HOME_MODE
+ \ TTYPERM
+ \ UMASK
+ \ nextgroup=logindefsOctal,logindefsOctalError skipwhite
+
syn cluster logindefsNumber contains=
\ logindefsDecimal,
\ logindefsHex,
@@ -114,6 +134,7 @@ syn keyword logindefsPathKeyword contained
\ MAIL_DIR
\ MAIL_FILE
\ NOLOGINS_FILE
+ \ NONEXISTENT
\ SULOG_FILE
\ TTYTYPE_FILE
\ nextgroup=logindefsPath skipwhite
@@ -138,9 +159,9 @@ syn keyword logindefsStringKeyword contained
\ ENV_HZ
\ ENV_TZ
\ LOGIN_STRING
+ \ PREVENT_NO_AUTH
\ SU_NAME
\ TTYGROUP
- \ TTYPERM
\ USERDEL_CMD
\ nextgroup=logindefsString skipwhite
diff --git a/runtime/syntax/lyrics.vim b/runtime/syntax/lyrics.vim
index 42a288b51b..fd127988f2 100644
--- a/runtime/syntax/lyrics.vim
+++ b/runtime/syntax/lyrics.vim
@@ -2,7 +2,7 @@
" Language: LyRiCs
" Maintainer: ObserverOfTime <chronobserver@disroot.org>
" Filenames: *.lrc
-" Last Change: 2022 Sep 18
+" Last Change: 2024 Sep 20
if exists('b:current_syntax')
finish
@@ -23,7 +23,7 @@ syn match lrcTagName contained nextgroup=lrcTagValue
syn match lrcTagValue /:\zs.\+\ze\]/ contained
" Lyrics
-syn match lrcLyricTime /^\s*\[\d\d:\d\d\.\d\d\]/
+syn match lrcLyricTime /^\s*\(\[\d\d:\d\d\.\d\d\]\)\+/
\ contains=lrcNumber nextgroup=lrcLyricLine
syn match lrcLyricLine /.*$/ contained contains=lrcWordTime,@Spell
syn match lrcWordTime /<\d\d:\d\d\.\d\d>/ contained contains=lrcNumber,@NoSpell
diff --git a/runtime/syntax/make.vim b/runtime/syntax/make.vim
index b4573044ca..d3ddf78291 100644
--- a/runtime/syntax/make.vim
+++ b/runtime/syntax/make.vim
@@ -28,8 +28,13 @@ syn match makePreCondit "^!\s*\(cmdswitches\|error\|message\|include\|if\|ifdef\
syn case match
" identifiers
-syn region makeIdent start="\$(" skip="\\)\|\\\\" end=")" contains=makeStatement,makeIdent
-syn region makeIdent start="\${" skip="\\}\|\\\\" end="}" contains=makeStatement,makeIdent
+if exists("b:make_microsoft") || exists("make_microsoft")
+ syn region makeIdent start="\$(" end=")" contains=makeStatement,makeIdent
+ syn region makeIdent start="\${" end="}" contains=makeStatement,makeIdent
+else
+ syn region makeIdent start="\$(" skip="\\)\|\\\\" end=")" contains=makeStatement,makeIdent
+ syn region makeIdent start="\${" skip="\\}\|\\\\" end="}" contains=makeStatement,makeIdent
+endif
syn match makeIdent "\$\$\w*"
syn match makeIdent "\$[^({]"
syn match makeIdent "^ *[^:#= \t]*\s*[:+?!*]="me=e-2
@@ -78,11 +83,13 @@ syn match makeOverride "^ *override\>"
syn match makeStatement contained "(\(abspath\|addprefix\|addsuffix\|and\|basename\|call\|dir\|error\|eval\|file\|filter-out\|filter\|findstring\|firstword\|flavor\|foreach\|guile\|if\|info\|join\|lastword\|notdir\|or\|origin\|patsubst\|realpath\|shell\|sort\|strip\|subst\|suffix\|value\|warning\|wildcard\|word\|wordlist\|words\)\>"ms=s+1
" Comment
-if exists("make_microsoft")
- syn match makeComment "#.*" contains=@Spell,makeTodo
-elseif !exists("make_no_comments")
- syn region makeComment start="#" end="^$" end="[^\\]$" keepend contains=@Spell,makeTodo
- syn match makeComment "#$" contains=@Spell
+if !exists("make_no_comments")
+ if exists("b:make_microsoft") || exists("make_microsoft")
+ syn match makeComment "#.*" contains=@Spell,makeTodo
+ else
+ syn region makeComment start="#" end="^$" end="[^\\]$" keepend contains=@Spell,makeTodo
+ syn match makeComment "#$" contains=@Spell
+ endif
endif
syn keyword makeTodo TODO FIXME XXX contained
diff --git a/runtime/syntax/mediawiki.vim b/runtime/syntax/mediawiki.vim
new file mode 100644
index 0000000000..8ac30b93db
--- /dev/null
+++ b/runtime/syntax/mediawiki.vim
@@ -0,0 +1,292 @@
+" mediawiki.vim (formerly named Wikipedia.vim)
+"
+" Vim syntax file
+" Language: MediaWiki
+" Maintainer: Avid Seeker <avidseeker7@protonmail.com>
+" Home: http://en.wikipedia.org/wiki/Wikipedia:Text_editor_support#Vim
+" Last Change: 2024 Jul 14
+" Credits: [[User:Unforgettableid]] [[User:Aepd87]], [[User:Danny373]], [[User:Ingo Karkat]], et al.
+"
+" Published on Wikipedia in 2003-04 and declared authorless.
+"
+" Based on the HTML syntax file. Probably too closely based, in fact.
+" There may well be name collisions everywhere, but ignorance is bliss,
+" so they say.
+"
+
+if exists("b:current_syntax")
+ finish
+endif
+
+syntax case ignore
+syntax spell toplevel
+
+" Mark illegal characters
+sy match htmlError "[<>&]"
+
+" Tags
+sy region htmlString contained start=+"+ end=+"+ contains=htmlSpecialChar,@htmlPreproc
+sy region htmlString contained start=+'+ end=+'+ contains=htmlSpecialChar,@htmlPreproc
+sy match htmlValue contained "=[\t ]*[^'" \t>][^ \t>]*"hs=s+1 contains=@htmlPreproc
+sy region htmlEndTag start=+</+ end=+>+ contains=htmlTagN,htmlTagError
+sy region htmlTag start=+<[^/]+ end=+>+ contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent,htmlCssDefinition,@htmlPreproc,@htmlArgCluster
+sy match htmlTagN contained +<\s*[-a-zA-Z0-9]\++hs=s+1 contains=htmlTagName,htmlSpecialTagName,@htmlTagNameCluster
+sy match htmlTagN contained +</\s*[-a-zA-Z0-9]\++hs=s+2 contains=htmlTagName,htmlSpecialTagName,@htmlTagNameCluster
+sy match htmlTagError contained "[^>]<"ms=s+1
+
+" Allowed HTML tag names
+sy keyword htmlTagName contained big blockquote br caption center cite code
+sy keyword htmlTagName contained dd del div dl dt font hr ins li
+sy keyword htmlTagName contained ol p pre rb rp rt ruby s small span strike sub
+sy keyword htmlTagName contained sup table td th tr tt ul var
+sy match htmlTagName contained "\<\(b\|i\|u\|h[1-6]\|em\|strong\)\>"
+" Allowed Wiki tag names
+sy keyword htmlTagName contained math nowiki references source syntaxhighlight
+
+" Allowed arg names
+sy keyword htmlArg contained align lang dir width height nowrap bgcolor clear
+sy keyword htmlArg contained noshade cite datetime size face color type start
+sy keyword htmlArg contained value compact summary border frame rules
+sy keyword htmlArg contained cellspacing cellpadding valign char charoff
+sy keyword htmlArg contained colgroup col span abbr axis headers scope rowspan
+sy keyword htmlArg contained colspan id class name style title
+
+" Special characters
+sy match htmlSpecialChar "&#\=[0-9A-Za-z]\{1,8};"
+
+" Comments
+sy region htmlComment start=+<!+ end=+>+ contains=htmlCommentPart,htmlCommentError
+sy match htmlCommentError contained "[^><!]"
+sy region htmlCommentPart contained start=+--+ end=+--\s*+ contains=@htmlPreProc
+sy region htmlComment start=+<!DOCTYPE+ keepend end=+>+
+
+if !exists("html_no_rendering")
+ sy cluster htmlTop contains=@Spell,htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment,htmlLink,@htmlPreproc
+
+ sy region htmlBold start="<b\>" end="</b>"me=e-4 contains=@htmlTop,htmlBoldUnderline,htmlBoldItalic
+ sy region htmlBold start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop,htmlBoldUnderline,htmlBoldItalic
+ sy region htmlBoldUnderline contained start="<u\>" end="</u>"me=e-4 contains=@htmlTop,htmlBoldUnderlineItalic
+ sy region htmlBoldItalic contained start="<i\>" end="</i>"me=e-4 contains=@htmlTop,htmlBoldItalicUnderline
+ sy region htmlBoldItalic contained start="<em\>" end="</em>"me=e-5 contains=@htmlTop,htmlBoldItalicUnderline
+ sy region htmlBoldUnderlineItalic contained start="<i\>" end="</i>"me=e-4 contains=@htmlTop
+ sy region htmlBoldUnderlineItalic contained start="<em\>" end="</em>"me=e-5 contains=@htmlTop
+ sy region htmlBoldItalicUnderline contained start="<u\>" end="</u>"me=e-4 contains=@htmlTop,htmlBoldUnderlineItalic
+
+ sy region htmlUnderline start="<u\>" end="</u>"me=e-4 contains=@htmlTop,htmlUnderlineBold,htmlUnderlineItalic
+ sy region htmlUnderlineBold contained start="<b\>" end="</b>"me=e-4 contains=@htmlTop,htmlUnderlineBoldItalic
+ sy region htmlUnderlineBold contained start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop,htmlUnderlineBoldItalic
+ sy region htmlUnderlineItalic contained start="<i\>" end="</i>"me=e-4 contains=@htmlTop,htmlUnderlineItalicBold
+ sy region htmlUnderlineItalic contained start="<em\>" end="</em>"me=e-5 contains=@htmlTop,htmlUnderlineItalicBold
+ sy region htmlUnderlineItalicBold contained start="<b\>" end="</b>"me=e-4 contains=@htmlTop
+ sy region htmlUnderlineItalicBold contained start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop
+ sy region htmlUnderlineBoldItalic contained start="<i\>" end="</i>"me=e-4 contains=@htmlTop
+ sy region htmlUnderlineBoldItalic contained start="<em\>" end="</em>"me=e-5 contains=@htmlTop
+
+ sy region htmlItalic start="<i\>" end="</i>"me=e-4 contains=@htmlTop,htmlItalicBold,htmlItalicUnderline
+ sy region htmlItalic start="<em\>" end="</em>"me=e-5 contains=@htmlTop
+ sy region htmlItalicBold contained start="<b\>" end="</b>"me=e-4 contains=@htmlTop,htmlItalicBoldUnderline
+ sy region htmlItalicBold contained start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop,htmlItalicBoldUnderline
+ sy region htmlItalicBoldUnderline contained start="<u\>" end="</u>"me=e-4 contains=@htmlTop
+ sy region htmlItalicUnderline contained start="<u\>" end="</u>"me=e-4 contains=@htmlTop,htmlItalicUnderlineBold
+ sy region htmlItalicUnderlineBold contained start="<b\>" end="</b>"me=e-4 contains=@htmlTop
+ sy region htmlItalicUnderlineBold contained start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop
+
+ sy region htmlH1 start="<h1\>" end="</h1>"me=e-5 contains=@htmlTop
+ sy region htmlH2 start="<h2\>" end="</h2>"me=e-5 contains=@htmlTop
+ sy region htmlH3 start="<h3\>" end="</h3>"me=e-5 contains=@htmlTop
+ sy region htmlH4 start="<h4\>" end="</h4>"me=e-5 contains=@htmlTop
+ sy region htmlH5 start="<h5\>" end="</h5>"me=e-5 contains=@htmlTop
+ sy region htmlH6 start="<h6\>" end="</h6>"me=e-5 contains=@htmlTop
+endif
+
+
+" No htmlTop and wikiPre inside HTML preformatted areas, because
+" MediaWiki renders everything in there literally (HTML tags and
+" entities, too): <pre> tags work as the combination of <nowiki> and
+" the standard HTML <pre> tag: the content will preformatted, and it
+" will not be parsed, but shown as in the wikitext source.
+"
+" With wikiPre, indented lines would be rendered differently from
+" unindented lines.
+sy match htmlPreTag /<pre\>[^>]*>/ contains=htmlTag
+sy match htmlPreEndTag /<\/pre>/ contains=htmlEndTag
+sy match wikiNowikiTag /<nowiki>/ contains=htmlTag
+sy match wikiNowikiEndTag /<\/nowiki>/ contains=htmlEndTag
+sy match wikiSourceTag /<source\s\+[^>]\+>/ contains=htmlTag
+sy match wikiSourceEndTag /<\/source>/ contains=htmlEndTag
+sy match wikiSyntaxHLTag /<syntaxhighlight\s\+[^>]\+>/ contains=htmlTag
+sy match wikiSyntaxHLEndTag /<\/syntaxhighlight>/ contains=htmlEndTag
+
+" Note: Cannot use 'start="<pre>"rs=e', so still have the <pre> tag
+" highlighted correctly via separate sy-match. Unfortunately, this will
+" also highlight <pre> tags inside the preformatted region.
+sy region htmlPre start="<pre\>[^>]*>" end="<\/pre>"me=e-6 contains=htmlPreTag
+sy region wikiNowiki start="<nowiki>" end="<\/nowiki>"me=e-9 contains=wikiNowikiTag
+sy region wikiSource start="<source\s\+[^>]\+>" keepend end="<\/source>"me=e-9 contains=wikiSourceTag
+sy region wikiSyntaxHL start="<syntaxhighlight\s\+[^>]\+>" keepend end="<\/syntaxhighlight>"me=e-18 contains=wikiSyntaxHLTag
+
+sy include @TeX syntax/tex.vim
+unlet b:current_syntax
+sy region wikiTeX matchgroup=htmlTag start="<math>" end="<\/math>" contains=@texMathZoneGroup,wikiNowiki,wikiNowikiEndTag
+sy region wikiRef matchgroup=htmlTag start="<ref>" end="<\/ref>" contains=wikiNowiki,wikiNowikiEndTag
+
+sy cluster wikiText contains=wikiLink,wikiTemplate,wikiNowiki,wikiNowikiEndTag,wikiItalic,wikiBold,wikiBoldAndItalic
+
+" Tables
+sy cluster wikiTableFormat contains=wikiTemplate,htmlString,htmlArg,htmlValue
+sy region wikiTable matchgroup=wikiTableSeparator start="{|" end="|}" contains=wikiTableHeaderLine,wikiTableCaptionLine,wikiTableNewRow,wikiTableHeadingCell,wikiTableNormalCell,@wikiText
+sy match wikiTableSeparator /^!/ contained
+sy match wikiTableSeparator /^|/ contained
+sy match wikiTableSeparator /^|[+-]/ contained
+sy match wikiTableSeparator /||/ contained
+sy match wikiTableSeparator /!!/ contained
+sy match wikiTableFormatEnd /[!|]/ contained
+sy match wikiTableHeadingCell /\(^!\|!!\)\([^!|]*|\)\?.*/ contains=wikiTableSeparator,@wikiText,wikiTableHeadingFormat
+" Require at least one '=' in the format, to avoid spurious matches (e.g.
+" the | in [[foo|bar]] might be taken as the final |, indicating the beginning
+" of the cell). The same is done for wikiTableNormalFormat below.
+sy match wikiTableHeadingFormat /\%(^!\|!!\)[^!|]\+=[^!|]\+\([!|]\)\(\1\)\@!/me=e-1 contains=@wikiTableFormat,wikiTableSeparator nextgroup=wikiTableFormatEnd
+sy match wikiTableNormalCell /\(^|\|||\)\([^|]*|\)\?.*/ contains=wikiTableSeparator,@wikiText,wikiTableNormalFormat
+sy match wikiTableNormalFormat /\(^|\|||\)[^|]\+=[^|]\+||\@!/me=e-1 contains=@wikiTableFormat,wikiTableSeparator nextgroup=wikiTableFormatEnd
+sy match wikiTableHeaderLine /\(^{|\)\@<=.*$/ contained contains=@wikiTableFormat
+sy match wikiTableCaptionLine /^|+.*$/ contained contains=wikiTableSeparator,@wikiText
+sy match wikiTableNewRow /^|-.*$/ contained contains=wikiTableSeparator,@wikiTableFormat
+
+sy cluster wikiTop contains=@Spell,wikiLink,wikiNowiki,wikiNowikiEndTag
+
+sy region wikiItalic start=+'\@<!'''\@!+ end=+''+ oneline contains=@wikiTop,wikiItalicBold
+sy region wikiBold start=+'''+ end=+'''+ oneline contains=@wikiTop,wikiBoldItalic
+sy region wikiBoldAndItalic start=+'''''+ end=+'''''+ oneline contains=@wikiTop
+
+sy region wikiBoldItalic contained start=+'\@<!'''\@!+ end=+''+ oneline contains=@wikiTop
+sy region wikiItalicBold contained start=+'''+ end=+'''+ oneline contains=@wikiTop
+
+sy region wikiH1 start="^=" end="=" oneline contains=@wikiTop
+sy region wikiH2 start="^==" end="==" oneline contains=@wikiTop
+sy region wikiH3 start="^===" end="===" oneline contains=@wikiTop
+sy region wikiH4 start="^====" end="====" oneline contains=@wikiTop
+sy region wikiH5 start="^=====" end="=====" oneline contains=@wikiTop
+sy region wikiH6 start="^======" end="======" oneline contains=@wikiTop
+
+sy region wikiLink start="\[\[" end="\]\]\(s\|'s\|es\|ing\|\)" oneline contains=wikiLink,wikiNowiki,wikiNowikiEndTag
+
+sy region wikiLink start="https\?://" end="\W*\_s"me=s-1 oneline
+sy region wikiLink start="\[http:" end="\]" oneline contains=wikiNowiki,wikiNowikiEndTag
+sy region wikiLink start="\[https:" end="\]" oneline contains=wikiNowiki,wikiNowikiEndTag
+sy region wikiLink start="\[ftp:" end="\]" oneline contains=wikiNowiki,wikiNowikiEndTag
+sy region wikiLink start="\[gopher:" end="\]" oneline contains=wikiNowiki,wikiNowikiEndTag
+sy region wikiLink start="\[news:" end="\]" oneline contains=wikiNowiki,wikiNowikiEndTag
+sy region wikiLink start="\[mailto:" end="\]" oneline contains=wikiNowiki,wikiNowikiEndTag
+
+sy match wikiTemplateName /{{[^{|}<>\[\]]\+/hs=s+2 contained
+sy region wikiTemplate start="{{" end="}}" keepend extend contains=wikiNowiki,wikiNowikiEndTag,wikiTemplateName,wikiTemplateParam,wikiTemplate,wikiLink
+sy region wikiTemplateParam start="{{{\s*\d" end="}}}" extend contains=wikiTemplateName
+
+sy match wikiParaFormatChar /^[\:|\*|;|#]\+/
+sy match wikiParaFormatChar /^-----*/
+sy match wikiPre /^\ .*$/ contains=wikiNowiki,wikiNowikiEndTag
+
+" HTML highlighting
+
+hi def link htmlTag Function
+hi def link htmlEndTag Identifier
+hi def link htmlArg Type
+hi def link htmlTagName htmlStatement
+hi def link htmlSpecialTagName Exception
+hi def link htmlValue String
+hi def link htmlSpecialChar Special
+
+if !exists("html_no_rendering")
+ hi def link htmlTitle Title
+ hi def link htmlH1 htmlTitle
+ hi def link htmlH2 htmlTitle
+ hi def link htmlH3 htmlTitle
+ hi def link htmlH4 htmlTitle
+ hi def link htmlH5 htmlTitle
+ hi def link htmlH6 htmlTitle
+
+ hi def link htmlPreProc PreProc
+ hi def link htmlHead htmlPreProc
+ hi def link htmlPreProcAttrName htmlPreProc
+ hi def link htmlPreStmt htmlPreProc
+
+ hi def link htmlSpecial Special
+ hi def link htmlCssDefinition htmlSpecial
+ hi def link htmlEvent htmlSpecial
+ hi def link htmlSpecialChar htmlSpecial
+
+ hi def link htmlComment Comment
+ hi def link htmlCommentPart htmlComment
+ hi def link htmlCssStyleComment htmlComment
+
+ hi def link htmlString String
+ hi def link htmlPreAttr htmlString
+ hi def link htmlValue htmlString
+
+ hi def link htmlError Error
+ hi def link htmlBadArg htmlError
+ hi def link htmlBadTag htmlError
+ hi def link htmlCommentError htmlError
+ hi def link htmlPreError htmlError
+ hi def link htmlPreProcAttrError htmlError
+ hi def link htmlTagError htmlError
+
+ hi def link htmlStatement Statement
+
+ hi def link htmlConstant Constant
+
+ hi def link htmlBoldItalicUnderline htmlBoldUnderlineItalic
+ hi def link htmlUnderlineItalicBold htmlBoldUnderlineItalic
+ hi def link htmlUnderlineBoldItalic htmlBoldUnderlineItalic
+ hi def link htmlItalicBoldUnderline htmlBoldUnderlineItalic
+ hi def link htmlItalicUnderlineBold htmlBoldUnderlineItalic
+
+ hi def link htmlItalicBold htmlBoldItalic
+ hi def link htmlItalicUnderline htmlUnderlineItalic
+ hi def link htmlUnderlineBold htmlBoldUnderline
+
+ hi def link htmlLink Underlined
+
+ if !exists("html_style_rendering")
+ hi def htmlBold term=bold cterm=bold gui=bold
+ hi def htmlBoldUnderline term=bold,underline cterm=bold,underline gui=bold,underline
+ hi def htmlBoldItalic term=bold,italic cterm=bold,italic gui=bold,italic
+ hi def htmlBoldUnderlineItalic term=bold,italic,underline cterm=bold,italic,underline gui=bold,italic,underline
+ hi def htmlUnderline term=underline cterm=underline gui=underline
+ hi def htmlUnderlineItalic term=italic,underline cterm=italic,underline gui=italic,underline
+ hi def htmlItalic term=italic cterm=italic gui=italic
+ endif
+endif
+
+" Wiki highlighting
+
+hi def link wikiItalic htmlItalic
+hi def link wikiBold htmlBold
+hi def link wikiBoldItalic htmlBoldItalic
+hi def link wikiItalicBold htmlBoldItalic
+hi def link wikiBoldAndItalic htmlBoldItalic
+
+hi def link wikiH1 htmlTitle
+hi def link wikiH2 htmlTitle
+hi def link wikiH3 htmlTitle
+hi def link wikiH4 htmlTitle
+hi def link wikiH5 htmlTitle
+hi def link wikiH6 htmlTitle
+
+hi def link wikiLink htmlLink
+hi def link wikiTemplate htmlSpecial
+hi def link wikiTemplateParam htmlSpecial
+hi def link wikiTemplateName Type
+hi def link wikiParaFormatChar htmlSpecial
+hi def link wikiPre htmlConstant
+hi def link wikiRef htmlComment
+
+hi def link htmlPre wikiPre
+hi def link wikiSource wikiPre
+hi def link wikiSyntaxHL wikiPre
+
+hi def link wikiTableSeparator Statement
+hi def link wikiTableFormatEnd wikiTableSeparator
+hi def link wikiTableHeadingCell htmlBold
+
+let b:current_syntax = "mediawiki"
diff --git a/runtime/syntax/mma.vim b/runtime/syntax/mma.vim
index d2f22e9be5..802cbe5538 100644
--- a/runtime/syntax/mma.vim
+++ b/runtime/syntax/mma.vim
@@ -2,6 +2,7 @@
" Language: Mathematica
" Maintainer: steve layland <layland@wolfram.com>
" Last Change: 2012 Feb 03 by Thilo Six
+" 2024 May 24 by Riley Bruins <ribru17@gmail.com> (remove 'commentstring')
" Source: http://members.wri.com/layland/vim/syntax/mma.vim
" http://vim.sourceforge.net/scripts/script.php?script_id=1273
" Id: $Id: mma.vim,v 1.4 2006/04/14 20:40:38 vimboss Exp $
@@ -248,7 +249,6 @@ syntax match mmaBoring "[(){}]" contained
"syntax region mmaRegion start="(\*\+[^<]*<!--[^>]*\*\+)" end="--> \*)" containedin=ALLBUT,@mmaStrings transparent fold keepend
" show fold text
-set commentstring='(*%s*)'
"set foldtext=MmaFoldText()
"function MmaFoldText()
diff --git a/runtime/syntax/mysql.vim b/runtime/syntax/mysql.vim
index 8bd7b6459a..49b53313c9 100644
--- a/runtime/syntax/mysql.vim
+++ b/runtime/syntax/mysql.vim
@@ -1,10 +1,13 @@
" Vim syntax file
" Language: mysql
" Maintainer: Kenneth J. Pronovici <pronovic@ieee.org>
-" Last Change: $LastChangedDate: 2016-04-11 10:31:04 -0500 (Mon, 11 Apr 2016) $
" Filenames: *.mysql
-" URL: ftp://cedar-solutions.com/software/mysql.vim
-" Note: The definitions below are taken from the mysql user manual as of April 2002, for version 3.23
+" URL: ftp://cedar-solutions.com/software/mysql.vim (https://github.com/pronovic/vim-syntax/blob/master/mysql.vim)
+" Note: The definitions below are taken from the mysql user manual as of April 2002, for version 3.23 and have been updated
+" in July 2024 with the docs for version 8.4
+" Last Change: 2016 Apr 11
+" 2024-07-21: update MySQL functions as of MySQL 8.4 (by Vim Project)
+"
" quit when a syntax file was already loaded
if exists("b:current_syntax")
@@ -92,23 +95,23 @@ syn keyword mysqlType tinytext mediumtext longtext text
syn keyword mysqlType tinyblob mediumblob longblob blob
syn region mysqlType start="float\W" end="."me=s-1
syn region mysqlType start="float$" end="."me=s-1
-syn region mysqlType start="float(" end=")" contains=mysqlNumber,mysqlVariable
+syn region mysqlType start="\<float(" end=")" contains=mysqlNumber,mysqlVariable
syn region mysqlType start="double\W" end="."me=s-1
syn region mysqlType start="double$" end="."me=s-1
-syn region mysqlType start="double(" end=")" contains=mysqlNumber,mysqlVariable
+syn region mysqlType start="\<double(" end=")" contains=mysqlNumber,mysqlVariable
syn region mysqlType start="double precision\W" end="."me=s-1
syn region mysqlType start="double precision$" end="."me=s-1
syn region mysqlType start="double precision(" end=")" contains=mysqlNumber,mysqlVariable
syn region mysqlType start="real\W" end="."me=s-1
syn region mysqlType start="real$" end="."me=s-1
-syn region mysqlType start="real(" end=")" contains=mysqlNumber,mysqlVariable
-syn region mysqlType start="numeric(" end=")" contains=mysqlNumber,mysqlVariable
+syn region mysqlType start="\<real(" end=")" contains=mysqlNumber,mysqlVariable
+syn region mysqlType start="\<numeric(" end=")" contains=mysqlNumber,mysqlVariable
syn region mysqlType start="dec\W" end="."me=s-1
syn region mysqlType start="dec$" end="."me=s-1
-syn region mysqlType start="dec(" end=")" contains=mysqlNumber,mysqlVariable
+syn region mysqlType start="\<dec(" end=")" contains=mysqlNumber,mysqlVariable
syn region mysqlType start="decimal\W" end="."me=s-1
syn region mysqlType start="decimal$" end="."me=s-1
-syn region mysqlType start="decimal(" end=")" contains=mysqlNumber,mysqlVariable
+syn region mysqlType start="\<decimal(" end=")" contains=mysqlNumber,mysqlVariable
syn region mysqlType start="\Wtimestamp\W" end="."me=s-1
syn region mysqlType start="\Wtimestamp$" end="."me=s-1
syn region mysqlType start="\Wtimestamp(" end=")" contains=mysqlNumber,mysqlVariable
@@ -117,25 +120,42 @@ syn region mysqlType start="^timestamp$" end="."me=s-1
syn region mysqlType start="^timestamp(" end=")" contains=mysqlNumber,mysqlVariable
syn region mysqlType start="\Wyear(" end=")" contains=mysqlNumber,mysqlVariable
syn region mysqlType start="^year(" end=")" contains=mysqlNumber,mysqlVariable
-syn region mysqlType start="char(" end=")" contains=mysqlNumber,mysqlVariable
-syn region mysqlType start="varchar(" end=")" contains=mysqlNumber,mysqlVariable
-syn region mysqlType start="enum(" end=")" contains=mysqlString,mysqlVariable
+syn region mysqlType start="\<char(" end=")" contains=mysqlNumber,mysqlVariable
+syn region mysqlType start="\<varchar(" end=")" contains=mysqlNumber,mysqlVariable
+syn region mysqlType start="\<enum(" end=")" contains=mysqlString,mysqlVariable
syn region mysqlType start="\Wset(" end=")" contains=mysqlString,mysqlVariable
syn region mysqlType start="^set(" end=")" contains=mysqlString,mysqlVariable
" Logical, string and numeric operators
syn keyword mysqlOperator between not and or is in like regexp rlike binary exists
-syn region mysqlOperator start="isnull(" end=")" contains=ALL
-syn region mysqlOperator start="coalesce(" end=")" contains=ALL
-syn region mysqlOperator start="interval(" end=")" contains=ALL
+syn region mysqlOperatorFunction start="\<isnull(" end=")" contains=ALL
+syn region mysqlOperatorFunction start="\<coalesce(" end=")" contains=ALL
+syn region mysqlOperatorFunction start="\<interval(" end=")" contains=ALL
-" Control flow functions
-syn keyword mysqlFlow case when then else end
-syn region mysqlFlow start="ifnull(" end=")" contains=ALL
-syn region mysqlFlow start="nullif(" end=")" contains=ALL
-syn region mysqlFlow start="if(" end=")" contains=ALL
+" Flow control functions
+" https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/flow-control-functions.html
+syn keyword mysqlFlowLabel case when then else end
+syn region mysqlFlowFunction start="\<ifnull(" end=")" contains=ALL
+syn region mysqlFlowFunction start="\<nullif(" end=")" contains=ALL
+syn region mysqlFlowFunction start="\<if(" end=")" contains=ALL
-" General Functions
+" Window functions
+" https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/window-functions-usage.html
+syn keyword mysqlWindowKeyword over partition window
+" https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/window-function-descriptions.html
+syn region mysqlWindowFunction start="\<cume_dist(" end=")" contains=ALL
+syn region mysqlWindowFunction start="\<dense_rank(" end=")" contains=ALL
+syn region mysqlWindowFunction start="\<first_value(" end=")" contains=ALL
+syn region mysqlWindowFunction start="\<lag(" end=")" contains=ALL
+syn region mysqlWindowFunction start="\<last_value(" end=")" contains=ALL
+syn region mysqlWindowFunction start="\<lead(" end=")" contains=ALL
+syn region mysqlWindowFunction start="\<nth_value(" end=")" contains=ALL
+syn region mysqlWindowFunction start="\<ntile(" end=")" contains=ALL
+syn region mysqlWindowFunction start="\<percent_rank(" end=")" contains=ALL
+syn region mysqlWindowFunction start="\<rank(" end=")" contains=ALL
+syn region mysqlWindowFunction start="\<row_number(" end=")" contains=ALL
+
+" General functions
"
" I'm leery of just defining keywords for functions, since according to the MySQL manual:
"
@@ -147,140 +167,144 @@ syn region mysqlFlow start="if(" end=")" contains=ALL
" region to define them, not just a keyword. This will probably cause the syntax file
" to load more slowly, but at least it will be 'correct'.
-syn region mysqlFunction start="abs(" end=")" contains=ALL
-syn region mysqlFunction start="acos(" end=")" contains=ALL
-syn region mysqlFunction start="adddate(" end=")" contains=ALL
-syn region mysqlFunction start="ascii(" end=")" contains=ALL
-syn region mysqlFunction start="asin(" end=")" contains=ALL
-syn region mysqlFunction start="atan(" end=")" contains=ALL
-syn region mysqlFunction start="atan2(" end=")" contains=ALL
-syn region mysqlFunction start="avg(" end=")" contains=ALL
-syn region mysqlFunction start="benchmark(" end=")" contains=ALL
-syn region mysqlFunction start="bin(" end=")" contains=ALL
-syn region mysqlFunction start="bit_and(" end=")" contains=ALL
-syn region mysqlFunction start="bit_count(" end=")" contains=ALL
-syn region mysqlFunction start="bit_or(" end=")" contains=ALL
-syn region mysqlFunction start="ceiling(" end=")" contains=ALL
-syn region mysqlFunction start="character_length(" end=")" contains=ALL
-syn region mysqlFunction start="char_length(" end=")" contains=ALL
-syn region mysqlFunction start="concat(" end=")" contains=ALL
-syn region mysqlFunction start="concat_ws(" end=")" contains=ALL
-syn region mysqlFunction start="connection_id(" end=")" contains=ALL
-syn region mysqlFunction start="conv(" end=")" contains=ALL
-syn region mysqlFunction start="cos(" end=")" contains=ALL
-syn region mysqlFunction start="cot(" end=")" contains=ALL
-syn region mysqlFunction start="count(" end=")" contains=ALL
-syn region mysqlFunction start="curdate(" end=")" contains=ALL
-syn region mysqlFunction start="curtime(" end=")" contains=ALL
-syn region mysqlFunction start="date_add(" end=")" contains=ALL
-syn region mysqlFunction start="date_format(" end=")" contains=ALL
-syn region mysqlFunction start="date_sub(" end=")" contains=ALL
-syn region mysqlFunction start="dayname(" end=")" contains=ALL
-syn region mysqlFunction start="dayofmonth(" end=")" contains=ALL
-syn region mysqlFunction start="dayofweek(" end=")" contains=ALL
-syn region mysqlFunction start="dayofyear(" end=")" contains=ALL
-syn region mysqlFunction start="decode(" end=")" contains=ALL
-syn region mysqlFunction start="degrees(" end=")" contains=ALL
-syn region mysqlFunction start="elt(" end=")" contains=ALL
-syn region mysqlFunction start="encode(" end=")" contains=ALL
-syn region mysqlFunction start="encrypt(" end=")" contains=ALL
-syn region mysqlFunction start="exp(" end=")" contains=ALL
-syn region mysqlFunction start="export_set(" end=")" contains=ALL
-syn region mysqlFunction start="extract(" end=")" contains=ALL
-syn region mysqlFunction start="field(" end=")" contains=ALL
-syn region mysqlFunction start="find_in_set(" end=")" contains=ALL
-syn region mysqlFunction start="floor(" end=")" contains=ALL
-syn region mysqlFunction start="format(" end=")" contains=ALL
-syn region mysqlFunction start="from_days(" end=")" contains=ALL
-syn region mysqlFunction start="from_unixtime(" end=")" contains=ALL
-syn region mysqlFunction start="get_lock(" end=")" contains=ALL
-syn region mysqlFunction start="greatest(" end=")" contains=ALL
-syn region mysqlFunction start="group_unique_users(" end=")" contains=ALL
-syn region mysqlFunction start="hex(" end=")" contains=ALL
-syn region mysqlFunction start="inet_aton(" end=")" contains=ALL
-syn region mysqlFunction start="inet_ntoa(" end=")" contains=ALL
-syn region mysqlFunction start="instr(" end=")" contains=ALL
-syn region mysqlFunction start="lcase(" end=")" contains=ALL
-syn region mysqlFunction start="least(" end=")" contains=ALL
-syn region mysqlFunction start="length(" end=")" contains=ALL
-syn region mysqlFunction start="load_file(" end=")" contains=ALL
-syn region mysqlFunction start="locate(" end=")" contains=ALL
-syn region mysqlFunction start="log(" end=")" contains=ALL
-syn region mysqlFunction start="log10(" end=")" contains=ALL
-syn region mysqlFunction start="lower(" end=")" contains=ALL
-syn region mysqlFunction start="lpad(" end=")" contains=ALL
-syn region mysqlFunction start="ltrim(" end=")" contains=ALL
-syn region mysqlFunction start="make_set(" end=")" contains=ALL
-syn region mysqlFunction start="master_pos_wait(" end=")" contains=ALL
-syn region mysqlFunction start="max(" end=")" contains=ALL
-syn region mysqlFunction start="md5(" end=")" contains=ALL
-syn region mysqlFunction start="mid(" end=")" contains=ALL
-syn region mysqlFunction start="min(" end=")" contains=ALL
-syn region mysqlFunction start="mod(" end=")" contains=ALL
-syn region mysqlFunction start="monthname(" end=")" contains=ALL
-syn region mysqlFunction start="now(" end=")" contains=ALL
-syn region mysqlFunction start="oct(" end=")" contains=ALL
-syn region mysqlFunction start="octet_length(" end=")" contains=ALL
-syn region mysqlFunction start="ord(" end=")" contains=ALL
-syn region mysqlFunction start="period_add(" end=")" contains=ALL
-syn region mysqlFunction start="period_diff(" end=")" contains=ALL
-syn region mysqlFunction start="pi(" end=")" contains=ALL
-syn region mysqlFunction start="position(" end=")" contains=ALL
-syn region mysqlFunction start="pow(" end=")" contains=ALL
-syn region mysqlFunction start="power(" end=")" contains=ALL
-syn region mysqlFunction start="quarter(" end=")" contains=ALL
-syn region mysqlFunction start="radians(" end=")" contains=ALL
-syn region mysqlFunction start="rand(" end=")" contains=ALL
-syn region mysqlFunction start="release_lock(" end=")" contains=ALL
-syn region mysqlFunction start="repeat(" end=")" contains=ALL
-syn region mysqlFunction start="reverse(" end=")" contains=ALL
-syn region mysqlFunction start="round(" end=")" contains=ALL
-syn region mysqlFunction start="rpad(" end=")" contains=ALL
-syn region mysqlFunction start="rtrim(" end=")" contains=ALL
-syn region mysqlFunction start="sec_to_time(" end=")" contains=ALL
-syn region mysqlFunction start="session_user(" end=")" contains=ALL
-syn region mysqlFunction start="sign(" end=")" contains=ALL
-syn region mysqlFunction start="sin(" end=")" contains=ALL
-syn region mysqlFunction start="soundex(" end=")" contains=ALL
-syn region mysqlFunction start="space(" end=")" contains=ALL
-syn region mysqlFunction start="sqrt(" end=")" contains=ALL
-syn region mysqlFunction start="std(" end=")" contains=ALL
-syn region mysqlFunction start="stddev(" end=")" contains=ALL
-syn region mysqlFunction start="strcmp(" end=")" contains=ALL
-syn region mysqlFunction start="subdate(" end=")" contains=ALL
-syn region mysqlFunction start="substring(" end=")" contains=ALL
-syn region mysqlFunction start="substring_index(" end=")" contains=ALL
-syn region mysqlFunction start="subtime(" end=")" contains=ALL
-syn region mysqlFunction start="sum(" end=")" contains=ALL
-syn region mysqlFunction start="sysdate(" end=")" contains=ALL
-syn region mysqlFunction start="system_user(" end=")" contains=ALL
-syn region mysqlFunction start="tan(" end=")" contains=ALL
-syn region mysqlFunction start="time_format(" end=")" contains=ALL
-syn region mysqlFunction start="time_to_sec(" end=")" contains=ALL
-syn region mysqlFunction start="to_days(" end=")" contains=ALL
-syn region mysqlFunction start="trim(" end=")" contains=ALL
-syn region mysqlFunction start="ucase(" end=")" contains=ALL
-syn region mysqlFunction start="unique_users(" end=")" contains=ALL
-syn region mysqlFunction start="unix_timestamp(" end=")" contains=ALL
-syn region mysqlFunction start="upper(" end=")" contains=ALL
-syn region mysqlFunction start="user(" end=")" contains=ALL
-syn region mysqlFunction start="version(" end=")" contains=ALL
-syn region mysqlFunction start="week(" end=")" contains=ALL
-syn region mysqlFunction start="weekday(" end=")" contains=ALL
-syn region mysqlFunction start="yearweek(" end=")" contains=ALL
+syn region mysqlFunction start="\<abs(" end=")" contains=ALL
+syn region mysqlFunction start="\<acos(" end=")" contains=ALL
+syn region mysqlFunction start="\<adddate(" end=")" contains=ALL
+syn region mysqlFunction start="\<ascii(" end=")" contains=ALL
+syn region mysqlFunction start="\<asin(" end=")" contains=ALL
+syn region mysqlFunction start="\<atan(" end=")" contains=ALL
+syn region mysqlFunction start="\<atan2(" end=")" contains=ALL
+syn region mysqlFunction start="\<avg(" end=")" contains=ALL
+syn region mysqlFunction start="\<benchmark(" end=")" contains=ALL
+syn region mysqlFunction start="\<bin(" end=")" contains=ALL
+syn region mysqlFunction start="\<bit_and(" end=")" contains=ALL
+syn region mysqlFunction start="\<bit_count(" end=")" contains=ALL
+syn region mysqlFunction start="\<bit_or(" end=")" contains=ALL
+syn region mysqlFunction start="\<ceiling(" end=")" contains=ALL
+syn region mysqlFunction start="\<character_length(" end=")" contains=ALL
+syn region mysqlFunction start="\<char_length(" end=")" contains=ALL
+syn region mysqlFunction start="\<concat(" end=")" contains=ALL
+syn region mysqlFunction start="\<concat_ws(" end=")" contains=ALL
+syn region mysqlFunction start="\<connection_id(" end=")" contains=ALL
+syn region mysqlFunction start="\<conv(" end=")" contains=ALL
+syn region mysqlFunction start="\<cos(" end=")" contains=ALL
+syn region mysqlFunction start="\<cot(" end=")" contains=ALL
+syn region mysqlFunction start="\<count(" end=")" contains=ALL
+syn region mysqlFunction start="\<curdate(" end=")" contains=ALL
+syn region mysqlFunction start="\<curtime(" end=")" contains=ALL
+syn region mysqlFunction start="\<date_add(" end=")" contains=ALL
+syn region mysqlFunction start="\<date_format(" end=")" contains=ALL
+syn region mysqlFunction start="\<date_sub(" end=")" contains=ALL
+syn region mysqlFunction start="\<dayname(" end=")" contains=ALL
+syn region mysqlFunction start="\<dayofmonth(" end=")" contains=ALL
+syn region mysqlFunction start="\<dayofweek(" end=")" contains=ALL
+syn region mysqlFunction start="\<dayofyear(" end=")" contains=ALL
+syn region mysqlFunction start="\<decode(" end=")" contains=ALL
+syn region mysqlFunction start="\<degrees(" end=")" contains=ALL
+syn region mysqlFunction start="\<elt(" end=")" contains=ALL
+syn region mysqlFunction start="\<encode(" end=")" contains=ALL
+syn region mysqlFunction start="\<encrypt(" end=")" contains=ALL
+syn region mysqlFunction start="\<exp(" end=")" contains=ALL
+syn region mysqlFunction start="\<export_set(" end=")" contains=ALL
+syn region mysqlFunction start="\<extract(" end=")" contains=ALL
+syn region mysqlFunction start="\<field(" end=")" contains=ALL
+syn region mysqlFunction start="\<find_in_set(" end=")" contains=ALL
+syn region mysqlFunction start="\<floor(" end=")" contains=ALL
+syn region mysqlFunction start="\<format(" end=")" contains=ALL
+syn region mysqlFunction start="\<from_days(" end=")" contains=ALL
+syn region mysqlFunction start="\<from_unixtime(" end=")" contains=ALL
+syn region mysqlFunction start="\<get_lock(" end=")" contains=ALL
+syn region mysqlFunction start="\<greatest(" end=")" contains=ALL
+syn region mysqlFunction start="\<group_unique_users(" end=")" contains=ALL
+syn region mysqlFunction start="\<hex(" end=")" contains=ALL
+syn region mysqlFunction start="\<inet_aton(" end=")" contains=ALL
+syn region mysqlFunction start="\<inet_ntoa(" end=")" contains=ALL
+syn region mysqlFunction start="\<instr(" end=")" contains=ALL
+syn region mysqlFunction start="\<lcase(" end=")" contains=ALL
+syn region mysqlFunction start="\<least(" end=")" contains=ALL
+syn region mysqlFunction start="\<length(" end=")" contains=ALL
+syn region mysqlFunction start="\<load_file(" end=")" contains=ALL
+syn region mysqlFunction start="\<locate(" end=")" contains=ALL
+syn region mysqlFunction start="\<log(" end=")" contains=ALL
+syn region mysqlFunction start="\<log10(" end=")" contains=ALL
+syn region mysqlFunction start="\<lower(" end=")" contains=ALL
+syn region mysqlFunction start="\<lpad(" end=")" contains=ALL
+syn region mysqlFunction start="\<ltrim(" end=")" contains=ALL
+syn region mysqlFunction start="\<make_set(" end=")" contains=ALL
+syn region mysqlFunction start="\<master_pos_wait(" end=")" contains=ALL
+syn region mysqlFunction start="\<max(" end=")" contains=ALL
+syn region mysqlFunction start="\<md5(" end=")" contains=ALL
+syn region mysqlFunction start="\<mid(" end=")" contains=ALL
+syn region mysqlFunction start="\<min(" end=")" contains=ALL
+syn region mysqlFunction start="\<mod(" end=")" contains=ALL
+syn region mysqlFunction start="\<monthname(" end=")" contains=ALL
+syn region mysqlFunction start="\<now(" end=")" contains=ALL
+syn region mysqlFunction start="\<oct(" end=")" contains=ALL
+syn region mysqlFunction start="\<octet_length(" end=")" contains=ALL
+syn region mysqlFunction start="\<ord(" end=")" contains=ALL
+syn region mysqlFunction start="\<period_add(" end=")" contains=ALL
+syn region mysqlFunction start="\<period_diff(" end=")" contains=ALL
+syn region mysqlFunction start="\<pi(" end=")" contains=ALL
+syn region mysqlFunction start="\<position(" end=")" contains=ALL
+syn region mysqlFunction start="\<pow(" end=")" contains=ALL
+syn region mysqlFunction start="\<power(" end=")" contains=ALL
+syn region mysqlFunction start="\<quarter(" end=")" contains=ALL
+syn region mysqlFunction start="\<radians(" end=")" contains=ALL
+syn region mysqlFunction start="\<rand(" end=")" contains=ALL
+syn region mysqlFunction start="\<release_lock(" end=")" contains=ALL
+syn region mysqlFunction start="\<repeat(" end=")" contains=ALL
+syn region mysqlFunction start="\<reverse(" end=")" contains=ALL
+syn region mysqlFunction start="\<round(" end=")" contains=ALL
+syn region mysqlFunction start="\<rpad(" end=")" contains=ALL
+syn region mysqlFunction start="\<rtrim(" end=")" contains=ALL
+syn region mysqlFunction start="\<sec_to_time(" end=")" contains=ALL
+syn region mysqlFunction start="\<session_user(" end=")" contains=ALL
+syn region mysqlFunction start="\<sign(" end=")" contains=ALL
+syn region mysqlFunction start="\<sin(" end=")" contains=ALL
+syn region mysqlFunction start="\<soundex(" end=")" contains=ALL
+syn region mysqlFunction start="\<space(" end=")" contains=ALL
+syn region mysqlFunction start="\<sqrt(" end=")" contains=ALL
+syn region mysqlFunction start="\<std(" end=")" contains=ALL
+syn region mysqlFunction start="\<stddev(" end=")" contains=ALL
+syn region mysqlFunction start="\<strcmp(" end=")" contains=ALL
+syn region mysqlFunction start="\<subdate(" end=")" contains=ALL
+syn region mysqlFunction start="\<substring(" end=")" contains=ALL
+syn region mysqlFunction start="\<substring_index(" end=")" contains=ALL
+syn region mysqlFunction start="\<subtime(" end=")" contains=ALL
+syn region mysqlFunction start="\<sum(" end=")" contains=ALL
+syn region mysqlFunction start="\<sysdate(" end=")" contains=ALL
+syn region mysqlFunction start="\<system_user(" end=")" contains=ALL
+syn region mysqlFunction start="\<tan(" end=")" contains=ALL
+syn region mysqlFunction start="\<time_format(" end=")" contains=ALL
+syn region mysqlFunction start="\<time_to_sec(" end=")" contains=ALL
+syn region mysqlFunction start="\<to_days(" end=")" contains=ALL
+syn region mysqlFunction start="\<trim(" end=")" contains=ALL
+syn region mysqlFunction start="\<ucase(" end=")" contains=ALL
+syn region mysqlFunction start="\<unique_users(" end=")" contains=ALL
+syn region mysqlFunction start="\<unix_timestamp(" end=")" contains=ALL
+syn region mysqlFunction start="\<upper(" end=")" contains=ALL
+syn region mysqlFunction start="\<user(" end=")" contains=ALL
+syn region mysqlFunction start="\<version(" end=")" contains=ALL
+syn region mysqlFunction start="\<week(" end=")" contains=ALL
+syn region mysqlFunction start="\<weekday(" end=")" contains=ALL
+syn region mysqlFunction start="\<yearweek(" end=")" contains=ALL
" Define the default highlighting.
" Only when an item doesn't have highlighting yet
-hi def link mysqlKeyword Statement
+hi def link mysqlKeyword Keyword
hi def link mysqlSpecial Special
hi def link mysqlString String
hi def link mysqlNumber Number
hi def link mysqlVariable Identifier
hi def link mysqlComment Comment
hi def link mysqlType Type
-hi def link mysqlOperator Statement
-hi def link mysqlFlow Statement
+hi def link mysqlOperator Operator
+hi def link mysqlOperatorFunction Function
+hi def link mysqlFlowFunction Function
+hi def link mysqlFlowLabel Label
+hi def link mysqlWindowFunction Function
+hi def link mysqlWindowKeyword Keyword
hi def link mysqlFunction Function
diff --git a/runtime/syntax/ocaml.vim b/runtime/syntax/ocaml.vim
index af3efd3dab..04ba39203d 100644
--- a/runtime/syntax/ocaml.vim
+++ b/runtime/syntax/ocaml.vim
@@ -6,6 +6,7 @@
" Issac Trotts <ijtrotts@ucdavis.edu>
" URL: https://github.com/ocaml/vim-ocaml
" Last Change:
+" 2019 Nov 05 - Accurate type highlighting (Maëlan)
" 2018 Nov 08 - Improved highlighting of operators (Maëlan)
" 2018 Apr 22 - Improved support for PPX (Andrey Popp)
" 2018 Mar 16 - Remove raise, lnot and not from keywords (Étienne Millon, "copy")
@@ -38,25 +39,18 @@ syn case match
" Access to the method of an object
syn match ocamlMethod "#"
-" Script headers highlighted like comments
-syn match ocamlComment "^#!.*" contains=@Spell
-
" Scripting directives
syn match ocamlScript "^#\<\(quit\|labels\|warnings\|warn_error\|directory\|remove_directory\|cd\|load\|load_rec\|use\|mod_use\|install_printer\|remove_printer\|require\|list\|ppx\|principal\|predicates\|rectypes\|thread\|trace\|untrace\|untrace_all\|print_depth\|print_length\|camlp4o\|camlp4r\|topfind_log\|topfind_verbose\)\>"
" lowercase identifier - the standard way to match
syn match ocamlLCIdentifier /\<\(\l\|_\)\(\w\|'\)*\>/
-syn match ocamlKeyChar "|"
-
" Errors
syn match ocamlBraceErr "}"
syn match ocamlBrackErr "\]"
syn match ocamlParenErr ")"
syn match ocamlArrErr "|]"
-syn match ocamlCommentErr "\*)"
-
syn match ocamlCountErr "\<downto\>"
syn match ocamlCountErr "\<to\>"
@@ -75,19 +69,22 @@ else
syn match ocamlEndErr "\<end\>"
endif
-" Some convenient clusters
-syn cluster ocamlAllErrs contains=ocamlBraceErr,ocamlBrackErr,ocamlParenErr,ocamlCommentErr,ocamlCountErr,ocamlDoErr,ocamlDoneErr,ocamlEndErr,ocamlThenErr
+" These keywords are only expected nested in constructions that are handled by
+" the type linter, so outside of type contexts we highlight them as errors:
+syn match ocamlKwErr "\<\(mutable\|nonrec\|of\|private\)\>"
-syn cluster ocamlAENoParen contains=ocamlBraceErr,ocamlBrackErr,ocamlCommentErr,ocamlCountErr,ocamlDoErr,ocamlDoneErr,ocamlEndErr,ocamlThenErr
+" Some convenient clusters
+syn cluster ocamlAllErrs contains=@ocamlAENoParen,ocamlParenErr
+syn cluster ocamlAENoParen contains=ocamlBraceErr,ocamlBrackErr,ocamlCountErr,ocamlDoErr,ocamlDoneErr,ocamlEndErr,ocamlThenErr,ocamlKwErr
-syn cluster ocamlContained contains=ocamlTodo,ocamlPreDef,ocamlModParam,ocamlModParam1,ocamlMPRestr,ocamlMPRestr1,ocamlMPRestr2,ocamlMPRestr3,ocamlModRHS,ocamlFuncWith,ocamlFuncStruct,ocamlModTypeRestr,ocamlModTRWith,ocamlWith,ocamlWithRest,ocamlModType,ocamlFullMod,ocamlVal
+syn cluster ocamlContained contains=ocamlTodo,ocamlPreDef,ocamlModParam,ocamlModParam1,ocamlModTypePre,ocamlModRHS,ocamlFuncWith,ocamlModTypeRestr,ocamlModTRWith,ocamlWith,ocamlWithRest,ocamlFullMod,ocamlVal
" Enclosing delimiters
-syn region ocamlEncl transparent matchgroup=ocamlKeyword start="(" matchgroup=ocamlKeyword end=")" contains=ALLBUT,@ocamlContained,ocamlParenErr
-syn region ocamlEncl transparent matchgroup=ocamlKeyword start="{" matchgroup=ocamlKeyword end="}" contains=ALLBUT,@ocamlContained,ocamlBraceErr
-syn region ocamlEncl transparent matchgroup=ocamlKeyword start="\[" matchgroup=ocamlKeyword end="\]" contains=ALLBUT,@ocamlContained,ocamlBrackErr
-syn region ocamlEncl transparent matchgroup=ocamlKeyword start="\[|" matchgroup=ocamlKeyword end="|\]" contains=ALLBUT,@ocamlContained,ocamlArrErr
+syn region ocamlNone transparent matchgroup=ocamlEncl start="(" matchgroup=ocamlEncl end=")" contains=ALLBUT,@ocamlContained,ocamlParenErr
+syn region ocamlNone transparent matchgroup=ocamlEncl start="{" matchgroup=ocamlEncl end="}" contains=ALLBUT,@ocamlContained,ocamlBraceErr
+syn region ocamlNone transparent matchgroup=ocamlEncl start="\[" matchgroup=ocamlEncl end="\]" contains=ALLBUT,@ocamlContained,ocamlBrackErr
+syn region ocamlNone transparent matchgroup=ocamlEncl start="\[|" matchgroup=ocamlEncl end="|\]" contains=ALLBUT,@ocamlContained,ocamlArrErr
" Comments
@@ -124,10 +121,6 @@ syn region ocamlPpx matchgroup=ocamlPpxEncl start="\[@\{1,3\}" contains=TOP end=
"" Modules
-" "sig"
-syn region ocamlSig matchgroup=ocamlSigEncl start="\<sig\>" matchgroup=ocamlSigEncl end="\<end\>" contains=ALLBUT,@ocamlContained,ocamlEndErr,ocamlModule
-syn region ocamlModSpec matchgroup=ocamlKeyword start="\<module\>" matchgroup=ocamlModule end="\<\u\(\w\|'\)*\>" contained contains=@ocamlAllErrs,ocamlComment skipwhite skipempty nextgroup=ocamlModTRWith,ocamlMPRestr
-
" "open"
syn match ocamlKeyword "\<open\>" skipwhite skipempty nextgroup=ocamlFullMod
@@ -135,51 +128,66 @@ syn match ocamlKeyword "\<open\>" skipwhite skipempty nextgroup=ocamlFullMod
syn match ocamlKeyword "\<include\>" skipwhite skipempty nextgroup=ocamlModParam,ocamlFullMod
" "module" - somewhat complicated stuff ;-)
-syn region ocamlModule matchgroup=ocamlKeyword start="\<module\>" matchgroup=ocamlModule end="\<\u\(\w\|'\)*\>" contains=@ocamlAllErrs,ocamlComment skipwhite skipempty nextgroup=ocamlPreDef
-syn region ocamlPreDef start="."me=e-1 matchgroup=ocamlKeyword end="\l\|=\|)"me=e-1 contained contains=@ocamlAllErrs,ocamlComment,ocamlModParam,ocamlGenMod,ocamlModTypeRestr,ocamlModTRWith nextgroup=ocamlModPreRHS
-syn region ocamlModParam start="([^*]" end=")" contained contains=ocamlGenMod,ocamlModParam1,ocamlSig,ocamlVal
+" 2022-10: please document it?
+syn region ocamlModule matchgroup=ocamlKeyword start="\<module\>" matchgroup=ocamlModule end="\<_\|\u\(\w\|'\)*\>" contains=@ocamlAllErrs,ocamlComment skipwhite skipempty nextgroup=ocamlPreDef
+syn region ocamlPreDef start="."me=e-1 end="[a-z:=)]\@=" contained contains=@ocamlAllErrs,ocamlComment,ocamlModParam,ocamlGenMod,ocamlModTypeRestr nextgroup=ocamlModTypePre,ocamlModPreRHS
+syn region ocamlModParam start="(\*\@!" end=")" contained contains=ocamlGenMod,ocamlModParam,ocamlModParam1,ocamlSig,ocamlVal
syn match ocamlModParam1 "\<\u\(\w\|'\)*\>" contained skipwhite skipempty
syn match ocamlGenMod "()" contained skipwhite skipempty
-syn region ocamlMPRestr start=":" end="."me=e-1 contained contains=@ocamlComment skipwhite skipempty nextgroup=ocamlMPRestr1,ocamlMPRestr2,ocamlMPRestr3
-syn region ocamlMPRestr1 matchgroup=ocamlSigEncl start="\ssig\s\=" matchgroup=ocamlSigEncl end="\<end\>" contained contains=ALLBUT,@ocamlContained,ocamlEndErr,ocamlModule
-syn region ocamlMPRestr2 start="\sfunctor\(\s\|(\)\="me=e-1 matchgroup=ocamlKeyword end="->" contained contains=@ocamlAllErrs,ocamlComment,ocamlModParam,ocamlGenMod skipwhite skipempty nextgroup=ocamlFuncWith,ocamlMPRestr2
-syn match ocamlMPRestr3 "\w\(\w\|'\)*\( *\. *\w\(\w\|'\)*\)*" contained
+syn match ocamlModTypePre ":" contained skipwhite skipempty nextgroup=ocamlModTRWith,ocamlSig,ocamlFunctor,ocamlModTypeRestr,ocamlModTypeOf
+syn match ocamlModTypeRestr "\<\w\(\w\|'\)*\( *\. *\w\(\w\|'\)*\)*\>" contained
+
syn match ocamlModPreRHS "=" contained skipwhite skipempty nextgroup=ocamlModParam,ocamlFullMod
syn keyword ocamlKeyword val
-syn region ocamlVal matchgroup=ocamlKeyword start="\<val\>" matchgroup=ocamlLCIdentifier end="\<\l\(\w\|'\)*\>" contains=@ocamlAllErrs,ocamlComment,ocamlFullMod skipwhite skipempty nextgroup=ocamlMPRestr
+syn region ocamlVal matchgroup=ocamlKeyword start="\<val\>" matchgroup=ocamlLCIdentifier end="\<\l\(\w\|'\)*\>" contains=@ocamlAllErrs,ocamlComment,ocamlFullMod skipwhite skipempty nextgroup=ocamlModTypePre
syn region ocamlModRHS start="." end=". *\w\|([^*]"me=e-2 contained contains=ocamlComment skipwhite skipempty nextgroup=ocamlModParam,ocamlFullMod
syn match ocamlFullMod "\<\u\(\w\|'\)*\( *\. *\u\(\w\|'\)*\)*" contained skipwhite skipempty nextgroup=ocamlFuncWith
-syn region ocamlFuncWith start="([^*)]"me=e-1 end=")" contained contains=ocamlComment,ocamlWith,ocamlFuncStruct skipwhite skipempty nextgroup=ocamlFuncWith
-syn region ocamlFuncStruct matchgroup=ocamlStructEncl start="[^a-zA-Z]struct\>"hs=s+1 matchgroup=ocamlStructEncl end="\<end\>" contains=ALLBUT,@ocamlContained,ocamlEndErr
+syn region ocamlFuncWith start="([*)]\@!" end=")" contained contains=ocamlComment,ocamlWith,ocamlStruct skipwhite skipempty nextgroup=ocamlFuncWith
-syn match ocamlModTypeRestr "\<\w\(\w\|'\)*\( *\. *\w\(\w\|'\)*\)*\>" contained
-syn region ocamlModTRWith start=":\s*("hs=s+1 end=")" contained contains=@ocamlAENoParen,ocamlWith
+syn region ocamlModTRWith start="(\*\@!" end=")" contained contains=@ocamlAENoParen,ocamlWith
syn match ocamlWith "\<\(\u\(\w\|'\)* *\. *\)*\w\(\w\|'\)*\>" contained skipwhite skipempty nextgroup=ocamlWithRest
syn region ocamlWithRest start="[^)]" end=")"me=e-1 contained contains=ALLBUT,@ocamlContained
" "struct"
syn region ocamlStruct matchgroup=ocamlStructEncl start="\<\(module\s\+\)\=struct\>" matchgroup=ocamlStructEncl end="\<end\>" contains=ALLBUT,@ocamlContained,ocamlEndErr
+" "sig"
+syn region ocamlSig matchgroup=ocamlSigEncl start="\<sig\>" matchgroup=ocamlSigEncl end="\<end\>" contains=ALLBUT,@ocamlContained,ocamlEndErr
+
+" "functor"
+syn region ocamlFunctor start="\<functor\>" matchgroup=ocamlKeyword end="->" contains=@ocamlAllErrs,ocamlComment,ocamlModParam,ocamlGenMod skipwhite skipempty nextgroup=ocamlStruct,ocamlSig,ocamlFuncWith,ocamlFunctor
+
" "module type"
-syn region ocamlKeyword start="\<module\>\s*\<type\>\(\s*\<of\>\)\=" matchgroup=ocamlModule end="\<\w\(\w\|'\)*\>" contains=ocamlComment skipwhite skipempty nextgroup=ocamlMTDef
+syn region ocamlModTypeOf start="\<module\s\+type\(\s\+of\)\=\>" matchgroup=ocamlModule end="\<\w\(\w\|'\)*\>" contains=ocamlComment skipwhite skipempty nextgroup=ocamlMTDef
syn match ocamlMTDef "=\s*\w\(\w\|'\)*\>"hs=s+1,me=s+1 skipwhite skipempty nextgroup=ocamlFullMod
" Quoted strings
syn region ocamlString matchgroup=ocamlQuotedStringDelim start="{\z\([a-z_]*\)|" end="|\z1}" contains=@Spell
+syn region ocamlString matchgroup=ocamlQuotedStringDelim start="{%[a-z_]\+\(\.[a-z_]\+\)\?\( \z\([a-z_]\+\)\)\?|" end="|\z1}" contains=@Spell
syn keyword ocamlKeyword and as assert class
-syn keyword ocamlKeyword constraint else
-syn keyword ocamlKeyword exception external fun
-
+syn keyword ocamlKeyword else
+syn keyword ocamlKeyword external
syn keyword ocamlKeyword in inherit initializer
syn keyword ocamlKeyword lazy let match
-syn keyword ocamlKeyword method mutable new nonrec of
-syn keyword ocamlKeyword parser private rec
-syn keyword ocamlKeyword try type
+syn keyword ocamlKeyword method new
+syn keyword ocamlKeyword parser rec
+syn keyword ocamlKeyword try
syn keyword ocamlKeyword virtual when while with
+" Keywords which are handled by the type linter:
+" as (within a type equation)
+" constraint exception mutable nonrec of private type
+
+" The `fun` keyword has special treatment because of the syntax `fun … : t -> e`
+" where `->` ends the type context rather than being part of it; to handle that,
+" we blacklist the ocamlTypeAnnot matchgroup, and we plug ocamlFunTypeAnnot
+" instead (later in this file, by using containedin=ocamlFun):
+syn region ocamlFun matchgroup=ocamlKeyword start='\<fun\>' matchgroup=ocamlArrow end='->'
+\ contains=ALLBUT,@ocamlContained,ocamlArrow,ocamlInfixOp,ocamlTypeAnnot
+
if exists("ocaml_revised")
syn keyword ocamlKeyword do value
syn keyword ocamlBoolean True False
@@ -188,14 +196,10 @@ else
syn keyword ocamlBoolean true false
endif
-syn keyword ocamlType array bool char exn float format format4
-syn keyword ocamlType int int32 int64 lazy_t list nativeint option
-syn keyword ocamlType bytes string unit
-
-syn match ocamlConstructor "(\s*)"
-syn match ocamlConstructor "\[\s*\]"
-syn match ocamlConstructor "\[|\s*>|]"
-syn match ocamlConstructor "\[<\s*>\]"
+syn match ocamlEmptyConstructor "(\s*)"
+syn match ocamlEmptyConstructor "\[\s*\]"
+syn match ocamlEmptyConstructor "\[|\s*>|]"
+syn match ocamlEmptyConstructor "\[<\s*>\]"
syn match ocamlConstructor "\u\(\w\|'\)*\>"
" Polymorphic variants
@@ -210,26 +214,24 @@ syn match ocamlCharErr "'\\\d\d'\|'\\\d'"
syn match ocamlCharErr "'\\[^\'ntbr]'"
syn region ocamlString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=@Spell
-syn match ocamlTopStop ";;"
-
syn match ocamlAnyVar "\<_\>"
-syn match ocamlKeyChar "|[^\]]"me=e-1
+syn match ocamlKeyChar "|]\@!"
syn match ocamlKeyChar ";"
syn match ocamlKeyChar "\~"
syn match ocamlKeyChar "?"
+" NOTE: for correct precedence, the rule for ";;" must come after that for ";"
+syn match ocamlTopStop ";;"
+
"" Operators
" The grammar of operators is found there:
" https://caml.inria.fr/pub/docs/manual-ocaml/names.html#operator-name
" https://caml.inria.fr/pub/docs/manual-ocaml/extn.html#s:ext-ops
" https://caml.inria.fr/pub/docs/manual-ocaml/extn.html#s:index-operators
-" =, *, < and > are both operator names and keywords, we let the user choose how
-" to display them (has to be declared before regular infix operators):
+" = is both an operator name and a keyword, we let the user choose how
+" to display it (has to be declared before regular infix operators):
syn match ocamlEqual "="
-syn match ocamlStar "*"
-syn match ocamlAngle "<"
-syn match ocamlAngle ">"
" Custom indexing operators:
syn region ocamlIndexing matchgroup=ocamlIndexingOp
\ start="\.[~?!:|&$%=>@^/*+-][~?!.:|&$%<=>@^*/+-]*\_s*("
@@ -248,8 +250,8 @@ syn match ocamlExtensionOp "#[#~?!.:|&$%<=>@^*/+-]\+"
" Infix and prefix operators:
syn match ocamlPrefixOp "![~?!.:|&$%<=>@^*/+-]*"
syn match ocamlPrefixOp "[~?][~?!.:|&$%<=>@^*/+-]\+"
-syn match ocamlInfixOp "[&$%@^/+-][~?!.:|&$%<=>@^*/+-]*"
-syn match ocamlInfixOp "[|<=>*][~?!.:|&$%<=>@^*/+-]\+"
+syn match ocamlInfixOp "[&$%<>@^*/+-][~?!.:|&$%<=>@^*/+-]*"
+syn match ocamlInfixOp "[|=][~?!.:|&$%<=>@^*/+-]\+"
syn match ocamlInfixOp "#[~?!.:|&$%<=>@^*/+-]\+#\@!"
syn match ocamlInfixOp "!=[~?!.:|&$%<=>@^*/+-]\@!"
syn keyword ocamlInfixOpKeyword asr land lor lsl lsr lxor mod or
@@ -266,6 +268,9 @@ else
syn match ocamlKeyChar "<-[~?!.:|&$%<=>@^*/+-]\@!"
endif
+" Script shebang (has to be declared after operators)
+syn match ocamlShebang "\%1l^#!.*$"
+
syn match ocamlNumber "-\=\<\d\(_\|\d\)*[l|L|n]\?\>"
syn match ocamlNumber "-\=\<0[x|X]\(\x\|_\)\+[l|L|n]\?\>"
syn match ocamlNumber "-\=\<0[o|O]\(\o\|_\)\+[l|L|n]\?\>"
@@ -273,10 +278,264 @@ syn match ocamlNumber "-\=\<0[b|B]\([01]\|_\)\+[l|L|n]\?\>"
syn match ocamlFloat "-\=\<\d\(_\|\d\)*\.\?\(_\|\d\)*\([eE][-+]\=\d\(_\|\d\)*\)\=\>"
" Labels
-syn match ocamlLabel "\~\(\l\|_\)\(\w\|'\)*"lc=1
-syn match ocamlLabel "?\(\l\|_\)\(\w\|'\)*"lc=1
+syn match ocamlLabel "[~?]\(\l\|_\)\(\w\|'\)*:\?"
syn region ocamlLabel transparent matchgroup=ocamlLabel start="[~?](\(\l\|_\)\(\w\|'\)*"lc=2 end=")"me=e-1 contains=ALLBUT,@ocamlContained,ocamlParenErr
+""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+
+"" Type contexts
+
+" How we recognize type contexts is explained in `type-linter-notes.md`
+" and a test suite is found in `type-linter-test.ml`.
+"
+" ocamlTypeExpr is the cluster of things that can make up a type expression
+" (in a loose sense, e.g. the “as” keyword and universal quantification are
+" included). Regions containing a type expression use it like this:
+"
+" contains=@ocamlTypeExpr,...
+"
+" ocamlTypeContained is the cluster of things that can be found in a type
+" expression or a type definition. It is not expected to be used in any region,
+" it exists solely for throwing things in it that should not pollute the main
+" linter.
+"
+" Both clusters are filled in incrementally. Every match group that is not to be
+" found at the main level must be declared as “contained” and added to either
+" ocamlTypeExpr or ocamlTypeContained.
+"
+" In these clusters we don’t put generic things that can also be found elswhere,
+" i.e. ocamlComment and ocamlPpx, because everything that is in these clusters
+" is also put in ocamlContained and thus ignored by the main linter.
+
+"syn cluster ocamlTypeExpr contains=
+syn cluster ocamlTypeContained contains=@ocamlTypeExpr
+syn cluster ocamlContained add=@ocamlTypeContained
+
+" We’ll use a “catch-all” highlighting group to show as error anything that is
+" not matched more specifically; we don’t want spaces to be reported as errors
+" (different background color), so we just catch them here:
+syn cluster ocamlTypeExpr add=ocamlTypeBlank
+syn match ocamlTypeBlank contained "\_s\+"
+hi link ocamlTypeBlank NONE
+
+" NOTE: Carefully avoid catching "(*" here.
+syn cluster ocamlTypeExpr add=ocamlTypeParen
+syn region ocamlTypeParen contained transparent
+\ matchgroup=ocamlEncl start="(\*\@!"
+\ matchgroup=ocamlEncl end=")"
+\ contains=@ocamlTypeExpr,ocamlComment,ocamlPpx
+
+syn cluster ocamlTypeExpr add=ocamlTypeKeyChar,ocamlTypeAs
+syn match ocamlTypeKeyChar contained "->"
+syn match ocamlTypeKeyChar contained "\*"
+syn match ocamlTypeKeyChar contained "#"
+syn match ocamlTypeKeyChar contained ","
+syn match ocamlTypeKeyChar contained "\."
+syn keyword ocamlTypeAs contained as
+hi link ocamlTypeAs ocamlKeyword
+
+syn cluster ocamlTypeExpr add=ocamlTypeVariance
+syn match ocamlTypeVariance contained "[-+!]\ze *\('\|\<_\>\)"
+syn match ocamlTypeVariance contained "[-+] *!\+\ze *\('\|\<_\>\)"
+syn match ocamlTypeVariance contained "! *[-+]\+\ze *\('\|\<_\>\)"
+
+syn cluster ocamlTypeContained add=ocamlTypeEq
+syn match ocamlTypeEq contained "[+:]\?="
+hi link ocamlTypeEq ocamlKeyChar
+
+syn cluster ocamlTypeExpr add=ocamlTypeVar,ocamlTypeConstr,ocamlTypeAnyVar,ocamlTypeBuiltin
+syn match ocamlTypeVar contained "'\(\l\|_\)\(\w\|'\)*\>"
+syn match ocamlTypeConstr contained "\<\(\l\|_\)\(\w\|'\)*\>"
+" NOTE: for correct precedence, the rule for the wildcard (ocamlTypeAnyVar)
+" must come after the rule for type constructors (ocamlTypeConstr).
+syn match ocamlTypeAnyVar contained "\<_\>"
+" NOTE: For correct precedence, these builtin names must occur after the rule
+" for type constructors (ocamlTypeConstr) but before the rule for non-optional
+" labeled arguments (ocamlTypeLabel). For the latter to take precedence over
+" these builtin names, we use “syn match” here instead of “syn keyword”.
+syn match ocamlTypeBuiltin contained "\<array\>"
+syn match ocamlTypeBuiltin contained "\<bool\>"
+syn match ocamlTypeBuiltin contained "\<bytes\>"
+syn match ocamlTypeBuiltin contained "\<char\>"
+syn match ocamlTypeBuiltin contained "\<exn\>"
+syn match ocamlTypeBuiltin contained "\<float\>"
+syn match ocamlTypeBuiltin contained "\<format\>"
+syn match ocamlTypeBuiltin contained "\<format4\>"
+syn match ocamlTypeBuiltin contained "\<format6\>"
+syn match ocamlTypeBuiltin contained "\<in_channel\>"
+syn match ocamlTypeBuiltin contained "\<int\>"
+syn match ocamlTypeBuiltin contained "\<int32\>"
+syn match ocamlTypeBuiltin contained "\<int64\>"
+syn match ocamlTypeBuiltin contained "\<lazy_t\>"
+syn match ocamlTypeBuiltin contained "\<list\>"
+syn match ocamlTypeBuiltin contained "\<nativeint\>"
+syn match ocamlTypeBuiltin contained "\<option\>"
+syn match ocamlTypeBuiltin contained "\<out_channel\>"
+syn match ocamlTypeBuiltin contained "\<ref\>"
+syn match ocamlTypeBuiltin contained "\<result\>"
+syn match ocamlTypeBuiltin contained "\<scanner\>"
+syn match ocamlTypeBuiltin contained "\<string\>"
+syn match ocamlTypeBuiltin contained "\<unit\>"
+
+syn cluster ocamlTypeExpr add=ocamlTypeLabel
+syn match ocamlTypeLabel contained "?\?\(\l\|_\)\(\w\|'\)*\_s*:[>=]\@!"
+hi link ocamlTypeLabel ocamlLabel
+
+" Object type
+syn cluster ocamlTypeExpr add=ocamlTypeObject
+syn region ocamlTypeObject contained
+\ matchgroup=ocamlEncl start="<"
+\ matchgroup=ocamlEncl end=">"
+\ contains=ocamlTypeObjectDots,ocamlLCIdentifier,ocamlTypeObjectAnnot,ocamlTypeBlank,ocamlComment,ocamlPpx
+hi link ocamlTypeObject ocamlTypeCatchAll
+syn cluster ocamlTypeContained add=ocamlTypeObjectDots
+syn match ocamlTypeObjectDots contained "\.\."
+hi link ocamlTypeObjectDots ocamlKeyChar
+syn cluster ocamlTypeContained add=ocamlTypeObjectAnnot
+syn region ocamlTypeObjectAnnot contained
+\ matchgroup=ocamlKeyChar start=":"
+\ matchgroup=ocamlKeyChar end=";\|>\@="
+\ contains=@ocamlTypeExpr,ocamlComment,ocamlPpx
+hi link ocamlTypeObjectAnnot ocamlTypeCatchAll
+
+" Record type definition
+syn cluster ocamlTypeContained add=ocamlTypeRecordDecl
+syn region ocamlTypeRecordDecl contained
+\ matchgroup=ocamlEncl start="{"
+\ matchgroup=ocamlEncl end="}"
+\ contains=ocamlTypeMutable,ocamlLCIdentifier,ocamlTypeRecordAnnot,ocamlTypeBlank,ocamlComment,ocamlPpx
+hi link ocamlTypeRecordDecl ocamlTypeCatchAll
+syn cluster ocamlTypeContained add=ocamlTypeMutable
+syn keyword ocamlTypeMutable contained mutable
+hi link ocamlTypeMutable ocamlKeyword
+syn cluster ocamlTypeContained add=ocamlTypeRecordAnnot
+syn region ocamlTypeRecordAnnot contained
+\ matchgroup=ocamlKeyChar start=":"
+\ matchgroup=ocamlKeyChar end=";\|}\@="
+\ contains=@ocamlTypeExpr,ocamlComment,ocamlPpx
+hi link ocamlTypeRecordAnnot ocamlTypeCatchAll
+
+" Polymorphic variant types
+" NOTE: Carefully avoid catching "[@" here.
+syn cluster ocamlTypeExpr add=ocamlTypeVariant
+syn region ocamlTypeVariant contained
+\ matchgroup=ocamlEncl start="\[>" start="\[<" start="\[@\@!"
+\ matchgroup=ocamlEncl end="\]"
+\ contains=ocamlTypeVariantKeyChar,ocamlTypeVariantConstr,ocamlTypeVariantAnnot,ocamlTypeBlank,ocamlComment,ocamlPpx
+hi link ocamlTypeVariant ocamlTypeCatchAll
+syn cluster ocamlTypeContained add=ocamlTypeVariantKeyChar
+syn match ocamlTypeVariantKeyChar contained "|"
+syn match ocamlTypeVariantKeyChar contained ">"
+hi link ocamlTypeVariantKeyChar ocamlKeyChar
+syn cluster ocamlTypeContained add=ocamlTypeVariantConstr
+syn match ocamlTypeVariantConstr contained "`\w\(\w\|'\)*\>"
+hi link ocamlTypeVariantConstr ocamlConstructor
+syn cluster ocamlTypeContained add=ocamlTypeVariantAnnot
+syn region ocamlTypeVariantAnnot contained
+\ matchgroup=ocamlKeyword start="\<of\>"
+\ matchgroup=ocamlKeyChar end="|\|>\|\]\@="
+\ contains=@ocamlTypeExpr,ocamlTypeAmp,ocamlComment,ocamlPpx
+hi link ocamlTypeVariantAnnot ocamlTypeCatchAll
+syn cluster ocamlTypeContained add=ocamlTypeAmp
+syn match ocamlTypeAmp contained "&"
+hi link ocamlTypeAmp ocamlTypeKeyChar
+
+" Sum type definition
+syn cluster ocamlTypeContained add=ocamlTypeSumDecl
+syn region ocamlTypeSumDecl contained
+\ matchgroup=ocamlTypeSumBar start="|"
+\ matchgroup=ocamlTypeSumConstr start="\<\u\(\w\|'\)*\>"
+\ matchgroup=ocamlTypeSumConstr start="\<false\>" start="\<true\>"
+\ matchgroup=ocamlTypeSumConstr start="(\_s*)" start="\[\_s*]" start="(\_s*::\_s*)"
+\ matchgroup=NONE end="\(\<type\>\|\<exception\>\|\<val\>\|\<module\>\|\<class\>\|\<method\>\|\<constraint\>\|\<inherit\>\|\<object\>\|\<struct\>\|\<open\>\|\<include\>\|\<let\>\|\<external\>\|\<in\>\|\<end\>\|)\|]\|}\|;\|;;\|=\)\@="
+\ matchgroup=NONE end="\(\<and\>\)\@="
+\ contains=ocamlTypeSumBar,ocamlTypeSumConstr,ocamlTypeSumAnnot,ocamlTypeBlank,ocamlComment,ocamlPpx
+hi link ocamlTypeSumDecl ocamlTypeCatchAll
+syn cluster ocamlTypeContained add=ocamlTypeSumBar
+syn match ocamlTypeSumBar contained "|"
+hi link ocamlTypeSumBar ocamlKeyChar
+syn cluster ocamlTypeContained add=ocamlTypeSumConstr
+syn match ocamlTypeSumConstr contained "\<\u\(\w\|'\)*\>"
+syn match ocamlTypeSumConstr contained "\<false\>"
+syn match ocamlTypeSumConstr contained "\<true\>"
+syn match ocamlTypeSumConstr contained "(\_s*)"
+syn match ocamlTypeSumConstr contained "\[\_s*]"
+syn match ocamlTypeSumConstr contained "(\_s*::\_s*)"
+hi link ocamlTypeSumConstr ocamlConstructor
+syn cluster ocamlTypeContained add=ocamlTypeSumAnnot
+syn region ocamlTypeSumAnnot contained
+\ matchgroup=ocamlKeyword start="\<of\>"
+\ matchgroup=ocamlKeyChar start=":"
+\ matchgroup=NONE end="|\@="
+\ matchgroup=NONE end="\(\<type\>\|\<exception\>\|\<val\>\|\<module\>\|\<class\>\|\<method\>\|\<constraint\>\|\<inherit\>\|\<object\>\|\<struct\>\|\<open\>\|\<include\>\|\<let\>\|\<external\>\|\<in\>\|\<end\>\|)\|]\|}\|;\|;;\)\@="
+\ matchgroup=NONE end="\(\<and\>\)\@="
+\ contains=@ocamlTypeExpr,ocamlTypeRecordDecl,ocamlComment,ocamlPpx
+hi link ocamlTypeSumAnnot ocamlTypeCatchAll
+
+" Type context opened by “type” (type definition), “constraint” (type
+" constraint) and “exception” (exception definition)
+syn region ocamlTypeDef
+\ matchgroup=ocamlKeyword start="\<type\>\(\_s\+\<nonrec\>\)\?\|\<constraint\>\|\<exception\>"
+\ matchgroup=NONE end="\(\<type\>\|\<exception\>\|\<val\>\|\<module\>\|\<class\>\|\<method\>\|\<constraint\>\|\<inherit\>\|\<object\>\|\<struct\>\|\<open\>\|\<include\>\|\<let\>\|\<external\>\|\<in\>\|\<end\>\|)\|]\|}\|;\|;;\)\@="
+\ contains=@ocamlTypeExpr,ocamlTypeEq,ocamlTypePrivate,ocamlTypeDefDots,ocamlTypeRecordDecl,ocamlTypeSumDecl,ocamlTypeDefAnd,ocamlComment,ocamlPpx
+hi link ocamlTypeDef ocamlTypeCatchAll
+syn cluster ocamlTypeContained add=ocamlTypePrivate
+syn keyword ocamlTypePrivate contained private
+hi link ocamlTypePrivate ocamlKeyword
+syn cluster ocamlTypeContained add=ocamlTypeDefAnd
+syn keyword ocamlTypeDefAnd contained and
+hi link ocamlTypeDefAnd ocamlKeyword
+syn cluster ocamlTypeContained add=ocamlTypeDefDots
+syn match ocamlTypeDefDots contained "\.\."
+hi link ocamlTypeDefDots ocamlKeyChar
+
+" When "exception" is preceded by "with", "|" or "(", that’s not an exception
+" definition but an exception pattern; we simply highlight the keyword without
+" starting a type context.
+" NOTE: These rules must occur after that for "exception".
+syn match ocamlKeyword "\<with\_s\+exception\>"lc=4
+syn match ocamlKeyword "|\_s*exception\>"lc=1
+syn match ocamlKeyword "(\_s*exception\>"lc=1
+
+" Type context opened by “:” (countless kinds of type annotations) and “:>”
+" (type coercions)
+syn region ocamlTypeAnnot matchgroup=ocamlKeyChar start=":\(>\|\_s*type\>\|[>:=]\@!\)"
+\ matchgroup=NONE end="\(\<type\>\|\<exception\>\|\<val\>\|\<module\>\|\<class\>\|\<method\>\|\<constraint\>\|\<inherit\>\|\<object\>\|\<struct\>\|\<open\>\|\<include\>\|\<let\>\|\<external\>\|\<in\>\|\<end\>\|)\|]\|}\|;\|;;\)\@="
+\ matchgroup=NONE end="\(;\|}\)\@="
+\ matchgroup=NONE end="\(=\|:>\)\@="
+\ contains=@ocamlTypeExpr,ocamlComment,ocamlPpx
+hi link ocamlTypeAnnot ocamlTypeCatchAll
+
+" Type annotation that gives the return type of a `fun` keyword
+" (the type context is ended by `->`)
+syn cluster ocamlTypeContained add=ocamlFunTypeAnnot
+syn region ocamlFunTypeAnnot contained containedin=ocamlFun
+\ matchgroup=ocamlKeyChar start=":"
+\ matchgroup=NONE end="\(->\)\@="
+\ contains=@ocamlTypeExpr,ocamlComment,ocamlPpx
+hi link ocamlFunTypeAnnot ocamlTypeCatchAll
+
+" Module paths (including functors) in types.
+" NOTE: This rule must occur after the rule for ocamlTypeSumDecl as it must take
+" precedence over it (otherwise the module name would be mistakenly highlighted
+" as a constructor).
+" NOTE: Carefully avoid catching "(*" here.
+syn cluster ocamlTypeExpr add=ocamlTypeModPath
+syn match ocamlTypeModPath contained "\<\u\(\w\|'\)*\_s*\."
+syn region ocamlTypeModPath contained transparent
+\ matchgroup=ocamlModPath start="\<\u\(\w\|'\)*\_s*(\*\@!"
+\ matchgroup=ocamlModPath end=")\_s*\."
+\ contains=ocamlTypeDotlessModPath,ocamlTypeBlank,ocamlComment,ocamlPpx
+hi link ocamlTypeModPath ocamlModPath
+syn cluster ocamlTypeContained add=ocamlTypeDotlessModPath
+syn match ocamlTypeDotlessModPath contained "\<\u\(\w\|'\)*\_s*\.\?"
+syn region ocamlTypeDotlessModPath contained transparent
+\ matchgroup=ocamlModPath start="\<\u\(\w\|'\)*\_s*(\*\@!"
+\ matchgroup=ocamlModPath end=")\_s*\.\?"
+\ contains=ocamlTypeDotlessModPath,ocamlTypeBlank,ocamlComment,ocamlPpx
+hi link ocamlTypeDotlessModPath ocamlTypeModPath
+
+""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Synchronization
syn sync minlines=50
@@ -306,27 +565,25 @@ hi def link ocamlBrackErr Error
hi def link ocamlParenErr Error
hi def link ocamlArrErr Error
-hi def link ocamlCommentErr Error
-
hi def link ocamlCountErr Error
hi def link ocamlDoErr Error
hi def link ocamlDoneErr Error
hi def link ocamlEndErr Error
hi def link ocamlThenErr Error
+hi def link ocamlKwErr Error
hi def link ocamlCharErr Error
hi def link ocamlErr Error
hi def link ocamlComment Comment
+hi def link ocamlShebang ocamlComment
hi def link ocamlModPath Include
hi def link ocamlObject Include
hi def link ocamlModule Include
hi def link ocamlModParam1 Include
hi def link ocamlGenMod Include
-hi def link ocamlModType Include
-hi def link ocamlMPRestr3 Include
hi def link ocamlFullMod Include
hi def link ocamlFuncWith Include
hi def link ocamlModParam Include
@@ -339,10 +596,13 @@ hi def link ocamlStructEncl ocamlModule
hi def link ocamlScript Include
hi def link ocamlConstructor Constant
+hi def link ocamlEmptyConstructor ocamlConstructor
hi def link ocamlVal Keyword
+hi def link ocamlModTypePre Keyword
hi def link ocamlModPreRHS Keyword
-hi def link ocamlMPRestr2 Keyword
+hi def link ocamlFunctor Keyword
+hi def link ocamlModTypeOf Keyword
hi def link ocamlKeyword Keyword
hi def link ocamlMethod Include
hi def link ocamlArrow Keyword
@@ -352,8 +612,6 @@ hi def link ocamlTopStop Keyword
hi def link ocamlRefAssign ocamlKeyChar
hi def link ocamlEqual ocamlKeyChar
-hi def link ocamlStar ocamlInfixOp
-hi def link ocamlAngle ocamlInfixOp
hi def link ocamlCons ocamlInfixOp
hi def link ocamlPrefixOp ocamlOperator
@@ -377,7 +635,24 @@ hi def link ocamlQuotedStringDelim Identifier
hi def link ocamlLabel Identifier
-hi def link ocamlType Type
+" Type linting groups that the user can customize:
+" - ocamlTypeCatchAll: anything in a type context that is not caught by more
+" specific rules (in principle, this should only match syntax errors)
+" - ocamlTypeConstr: type constructors
+" - ocamlTypeBuiltin: builtin type constructors (like int or list)
+" - ocamlTypeVar: type variables ('a)
+" - ocamlTypeAnyVar: wildcard (_)
+" - ocamlTypeVariance: variance and injectivity indications (+'a, !'a)
+" - ocamlTypeKeyChar: symbols such as -> and *
+" Default values below mimick the behavior before the type linter was
+" implemented, but now we can do better. :-)
+hi def link ocamlTypeCatchAll Error
+hi def link ocamlTypeConstr NONE
+hi def link ocamlTypeBuiltin Type
+hi def link ocamlTypeVar NONE
+hi def link ocamlTypeAnyVar NONE
+hi def link ocamlTypeVariance ocamlKeyChar
+hi def link ocamlTypeKeyChar ocamlKeyChar
hi def link ocamlTodo Todo
diff --git a/runtime/syntax/opam.vim b/runtime/syntax/opam.vim
index 9ac1d41ce7..da296627e5 100644
--- a/runtime/syntax/opam.vim
+++ b/runtime/syntax/opam.vim
@@ -1,5 +1,5 @@
" Vim syntax file
-" Language: OPAM - OCaml package manager
+" Language: opam - OCaml package manager
" Maintainer: Markus Mottl <markus.mottl@gmail.com>
" URL: https://github.com/ocaml/vim-ocaml
" Last Change:
@@ -11,20 +11,55 @@ endif
" need %{vars}%
" env: [[CAML_LD_LIBRARY_PATH = "%{lib}%/stublibs"]]
-syn keyword opamKeyword1 remove depends pin-depends depopts conflicts env packages patches version maintainer tags license homepage authors doc install author available name depexts substs synopsis description
-syn match opamKeyword2 "\v(bug-reports|post-messages|ocaml-version|opam-version|dev-repo|build-test|build-doc|build)"
+syn iskeyword a-z,A-Z,-
+syn keyword opamKeyword1 author
+syn keyword opamKeyword1 authors
+syn keyword opamKeyword1 available
+syn keyword opamKeyword1 bug-reports
+syn keyword opamKeyword1 build
+syn keyword opamKeyword1 build-env
+syn keyword opamKeyword1 conflict-class
+syn keyword opamKeyword1 conflicts
+syn keyword opamKeyword1 depends
+syn keyword opamKeyword1 depexts
+syn keyword opamKeyword1 depopts
+syn keyword opamKeyword1 description
+syn keyword opamKeyword1 dev-repo
+syn keyword opamKeyword1 doc
+syn keyword opamKeyword1 extra-files
+syn keyword opamKeyword1 features
+syn keyword opamKeyword1 flags
+syn keyword opamKeyword1 homepage
+syn keyword opamKeyword1 install
+syn keyword opamKeyword1 libraries
+syn keyword opamKeyword1 license
+syn keyword opamKeyword1 maintainer
+syn keyword opamKeyword1 messages
+syn keyword opamKeyword1 name
+syn keyword opamKeyword1 opam-version
+syn keyword opamKeyword1 patches
+syn keyword opamKeyword1 pin-depends
+syn keyword opamKeyword1 post-messages
+syn keyword opamKeyword1 remove
+syn keyword opamKeyword1 run-test
+syn keyword opamKeyword1 setenv
+syn keyword opamKeyword1 substs
+syn keyword opamKeyword1 synopsis
+syn keyword opamKeyword1 syntax
+syn keyword opamKeyword1 tags
+syn keyword opamKeyword1 version
syn keyword opamTodo FIXME NOTE NOTES TODO XXX contained
syn match opamComment "#.*$" contains=opamTodo,@Spell
syn match opamOperator ">\|<\|=\|<=\|>="
-syn region opamInterpolate start=/%{/ end=/}%/ contained
-syn region opamString start=/"/ end=/"/ contains=opamInterpolate
-syn region opamSeq start=/\[/ end=/\]/ contains=ALLBUT,opamKeyword1,opamKeyword2
-syn region opamExp start=/{/ end=/}/ contains=ALLBUT,opamKeyword1,opamKeyword2
+syn match opamUnclosedInterpolate "%{[^ "]*" contained
+syn match opamInterpolate "%{[^ "]\+}%" contained
+syn region opamString start=/"/ end=/"/ contains=opamInterpolate,OpamUnclosedInterpolate
+syn region opamSeq start=/\[/ end=/\]/ contains=ALLBUT,opamKeyword1
+syn region opamExp start=/{/ end=/}/ contains=ALLBUT,opamKeyword1
hi link opamKeyword1 Keyword
-hi link opamKeyword2 Keyword
hi link opamString String
hi link opamExp Function
@@ -32,6 +67,7 @@ hi link opamSeq Statement
hi link opamOperator Operator
hi link opamComment Comment
hi link opamInterpolate Identifier
+hi link opamUnclosedInterpolate Error
let b:current_syntax = "opam"
diff --git a/runtime/syntax/progress.vim b/runtime/syntax/progress.vim
index 5e7cfef299..4b8f61287c 100644
--- a/runtime/syntax/progress.vim
+++ b/runtime/syntax/progress.vim
@@ -3,13 +3,13 @@
" Filename extensions: *.p (collides with Pascal),
" *.i (collides with assembler)
" *.w (collides with cweb)
-" Maintainer: Philip Uren <philuSPAXY@ieee.org> Remove SPAXY spam block
+" Maintainer: Daniel Smith <daniel@rdnlsmith.com>
+" Previous Maintainer: Philip Uren <philuSPAXY@ieee.org> Remove SPAXY spam block
" Contributors: Matthew Stickney <mtstickneySPAXY@gmail.com>
" Chris Ruprecht <chrisSPAXY@ruprecht.org>
" Mikhail Kuperblum <mikhailSPAXY@whasup.com>
" John Florian <jflorianSPAXY@voyager.net>
-" Version: 13
-" Last Change: Nov 11 2012
+" Last Change: Jul 23 2024
" quit when a syntax file was already loaded
if exists("b:current_syntax")
@@ -116,8 +116,10 @@ syn match ProgressShowTab "\t"
" If you don't like white space on the end of lines, uncomment this:
" syn match ProgressSpaceError "\s\+$"
-syn region ProgressComment start="/\*" end="\*/" contains=ProgressComment,ProgressTodo,ProgressDebug,@Spell
-syn region ProgressInclude start="^[ ]*[{]" end="[}]" contains=ProgressPreProc,ProgressOperator,ProgressString,ProgressComment
+syn region ProgressBlockComment start="/\*" end="\*/" contains=ProgressBlockComment,ProgressTodo,ProgressDebug,@Spell
+syn match ProgressLineComment "//.*$" contains=ProgressTodo,ProgressDebug,@Spell
+syn cluster ProgressComment contains=ProgressBlockComment,ProgressLineComment
+syn region ProgressInclude start="^[ ]*[{]" end="[}]" contains=ProgressPreProc,ProgressOperator,ProgressString,@ProgressComment
syn region ProgressPreProc start="&" end="\>" contained
" This next line works reasonably well.
@@ -281,6 +283,8 @@ syn sync lines=800
hi def link ProgressByte Number
hi def link ProgressCase Repeat
hi def link ProgressComment Comment
+hi def link ProgressBlockComment ProgressComment
+hi def link ProgressLineComment ProgressComment
hi def link ProgressConditional Conditional
hi def link ProgressDebug Debug
hi def link ProgressDo Repeat
diff --git a/runtime/syntax/query.lua b/runtime/syntax/query.lua
index 1e129dbeff..2dfe29f69b 100644
--- a/runtime/syntax/query.lua
+++ b/runtime/syntax/query.lua
@@ -1,6 +1,6 @@
-- Neovim syntax file
-- Language: Treesitter query
--- Last Change: 2022 Apr 13
+-- Last Change: 2024 Jul 03
-- it's a lisp!
-vim.cmd([[ runtime! syntax/lisp.vim ]])
+vim.cmd([[runtime! syntax/lisp.vim]])
diff --git a/runtime/syntax/rasi.vim b/runtime/syntax/rasi.vim
new file mode 100644
index 0000000000..40c3393fc5
--- /dev/null
+++ b/runtime/syntax/rasi.vim
@@ -0,0 +1,298 @@
+" 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
diff --git a/runtime/syntax/salt.vim b/runtime/syntax/salt.vim
new file mode 100644
index 0000000000..fdbce2f677
--- /dev/null
+++ b/runtime/syntax/salt.vim
@@ -0,0 +1,16 @@
+" Vim syntax file
+" Maintainer: Gregory Anders
+" Last Changed: 2024-09-16
+
+if exists('b:current_syntax')
+ finish
+endif
+
+" Salt state files are just YAML with embedded Jinja
+runtime! syntax/yaml.vim
+unlet! b:current_syntax
+
+runtime! syntax/jinja.vim
+unlet! b:current_syntax
+
+let b:current_syntax = 'salt'
diff --git a/runtime/syntax/scheme.vim b/runtime/syntax/scheme.vim
index c4454fc57c..59b0cc5b18 100644
--- a/runtime/syntax/scheme.vim
+++ b/runtime/syntax/scheme.vim
@@ -1,12 +1,12 @@
" Vim syntax file
-" Language: Scheme (R7RS)
-" Last Change: 2021-01-03
-" Author: Evan Hanson <evhan@foldling.org>
-" Maintainer: Evan Hanson <evhan@foldling.org>
-" Previous Author: Dirk van Deun <dirk@igwe.vub.ac.be>
+" Language: Scheme (R7RS)
+" Last Change: 2024 Jun 21
+" Author: Evan Hanson <evhan@foldling.org>
+" Maintainer: Evan Hanson <evhan@foldling.org>
+" Previous Author: Dirk van Deun <dirk@igwe.vub.ac.be>
" Previous Maintainer: Sergey Khorev <sergey.khorev@gmail.com>
-" Repository: https://git.foldling.org/vim-scheme.git
-" URL: https://foldling.org/vim/syntax/scheme.vim
+" Repository: https://git.foldling.org/vim-scheme.git
+" URL: https://foldling.org/vim/syntax/scheme.vim
if exists('b:current_syntax')
finish
@@ -50,9 +50,11 @@ syn match schemeBoolean /#f\(alse\)\?/
syn match schemeCharacter /#\\.[^ `'\t\n\[\]()]*/
syn match schemeCharacter /#\\x[0-9a-fA-F]\+/
-syn match schemeComment /;.*$/ contains=@Spell
+syn match schemeComment /;.*$/ contains=schemeTodo,@Spell
-syn region schemeMultilineComment start=/#|/ end=/|#/ contains=schemeMultilineComment,@Spell
+syn region schemeMultilineComment start=/#|/ end=/|#/ contains=schemeTodo,schemeMultilineComment,@Spell
+
+syn match schemeTodo /\c\<\(todo\|xxx\|fixme\|note\):\?\>/ contained
syn region schemeForm matchgroup=schemeParentheses start="(" end=")" contains=ALLBUT,schemeUnquote,schemeDatumCommentForm,@schemeImportCluster
syn region schemeForm matchgroup=schemeParentheses start="\[" end="\]" contains=ALLBUT,schemeUnquote,schemeDatumCommentForm,@schemeImportCluster
@@ -427,6 +429,7 @@ syn keyword schemeFunction write-string
syn keyword schemeFunction write-u8
syn keyword schemeFunction zero?
+hi def link schemeTodo Todo
hi def link schemeBoolean Boolean
hi def link schemeCharacter Character
hi def link schemeComment Comment
diff --git a/runtime/syntax/sdc.vim b/runtime/syntax/sdc.vim
index dbfa35eeb6..ae2aae5f07 100644
--- a/runtime/syntax/sdc.vim
+++ b/runtime/syntax/sdc.vim
@@ -1,9 +1,10 @@
" Vim syntax file
" Language: SDC - Synopsys Design Constraints
" Maintainer: Maurizio Tranchero - maurizio.tranchero@gmail.com
-" Last Change: Thu Mar 25 17:35:16 CET 2009
" Credits: based on TCL Vim syntax file
" Version: 0.3
+" Last Change: Thu Mar 25 17:35:16 CET 2009
+" 2024 Jul 17 by Vim Project (update to SDC 2.1)
" Quit when a syntax file was already loaded
if exists("b:current_syntax")
@@ -13,16 +14,48 @@ endif
" Read the TCL syntax to start with
runtime! syntax/tcl.vim
-" SDC-specific keywords
+" TCL extension related to SDC and available from some vendors
+" (not defined in SDC standard!)
syn keyword sdcCollections foreach_in_collection
-syn keyword sdcObjectsQuery get_clocks get_ports
syn keyword sdcObjectsInfo get_point_info get_node_info get_path_info
syn keyword sdcObjectsInfo get_timing_paths set_attribute
-syn keyword sdcConstraints set_false_path
+
+" SDC rev. 2.1 specific keywords
+syn keyword sdcObjectsQuery get_clocks get_ports get_cells
+syn keyword sdcObjectsQuery get_pins get_nets all_inputs
+syn keyword sdcObjectsQuery all_outputs all_registers all_clocks
+syn keyword sdcObjectsQuery get_libs get_lib_cells get_lib_pins
+
+syn keyword sdcConstraints set_false_path set_clock_groups set_sense
+syn keyword sdcConstraints set_propagated_clock set_clock_gating_check
+syn keyword sdcConstraints set_ideal_latency set_ideal_network
+syn keyword sdcConstraints set_ideal_transistion set_max_time_borrow
+syn keyword sdcConstraints set_data_check group_path set_max_transition
+syn keyword sdcConstraints set_max_fanout set_driving_cell
+syn keyword sdcConstraints set_port_fanout_number set_multi_cycle_path
+syn keyword sdcConstraints set_disable_timing set_min_pulse_width
+
syn keyword sdcNonIdealities set_min_delay set_max_delay
syn keyword sdcNonIdealities set_input_delay set_output_delay
syn keyword sdcNonIdealities set_load set_min_capacitance set_max_capacitance
+syn keyword sdcNonIdealities set_clock_latency set_clock_transition set_clock_uncertainty
+syn keyword sdcNonIdealities set_resistance set_timing_derate set_drive
+syn keyword sdcNonIdealities set_input_transition set_fanout_load
+
syn keyword sdcCreateOperations create_clock create_timing_netlist update_timing_netlist
+syn keyword sdcCreateOperations create_generated_clock
+
+syn keyword sdcPowerArea set_max_area create_voltage_area
+syn keyword sdcPowerArea set_level_shifter_threshold set_max_dynamic_power
+syn keyword sdcPowerArea set_level_shifter_strategy set_max_leakage_power
+
+syn keyword sdcModeConfig set_case_analysis set_logic_dc
+syn keyword sdcModeConfig set_logic_zero set_logic_one
+
+syn keyword sdcMiscCommmands sdc_version set_wire_load_selection_group
+syn keyword sdcMiscCommmands set_units set_wire_load_mode set_wire_load_model
+syn keyword sdcMiscCommmands set_wire_load_min_block_size set_operating_conditions
+syn keyword sdcMiscCommmands current_design
" command flags highlighting
syn match sdcFlags "[[:space:]]-[[:alpha:]_]*\>"
@@ -31,9 +64,12 @@ syn match sdcFlags "[[:space:]]-[[:alpha:]_]*\>"
hi def link sdcCollections Repeat
hi def link sdcObjectsInfo Operator
hi def link sdcCreateOperations Operator
-hi def link sdcObjectsQuery Operator
+hi def link sdcObjectsQuery Function
hi def link sdcConstraints Operator
hi def link sdcNonIdealities Operator
+hi def link sdcPowerArea Operator
+hi def link sdcModeConfig Operator
+hi def link sdcMiscCommmands Operator
hi def link sdcFlags Special
let b:current_syntax = "sdc"
diff --git a/runtime/syntax/shared/debversions.vim b/runtime/syntax/shared/debversions.vim
index e18eca96b1..56f18b969a 100644
--- a/runtime/syntax/shared/debversions.vim
+++ b/runtime/syntax/shared/debversions.vim
@@ -1,7 +1,7 @@
" Vim syntax file
" Language: Debian version information
" Maintainer: Debian Vim Maintainers
-" Last Change: 2024 Apr 27
+" Last Change: 2024 May 25
" URL: https://salsa.debian.org/vim-team/vim-debian/blob/main/syntax/shared/debversions.vim
let s:cpo = &cpo
@@ -11,7 +11,7 @@ let g:debSharedSupportedVersions = [
\ 'oldstable', 'stable', 'testing', 'unstable', 'experimental', 'sid', 'rc-buggy',
\ 'bullseye', 'bookworm', 'trixie', 'forky',
\
- \ 'trusty', 'xenial', 'bionic', 'focal', 'jammy', 'mantic', 'noble', 'oracular',
+ \ 'focal', 'jammy', 'mantic', 'noble', 'oracular',
\ 'devel'
\ ]
let g:debSharedUnsupportedVersions = [
@@ -22,8 +22,9 @@ let g:debSharedUnsupportedVersions = [
\ 'warty', 'hoary', 'breezy', 'dapper', 'edgy', 'feisty',
\ 'gutsy', 'hardy', 'intrepid', 'jaunty', 'karmic', 'lucid',
\ 'maverick', 'natty', 'oneiric', 'precise', 'quantal', 'raring', 'saucy',
- \ 'utopic', 'vivid', 'wily', 'yakkety', 'zesty', 'artful', 'cosmic',
- \ 'disco', 'eoan', 'hirsute', 'impish', 'kinetic', 'lunar', 'groovy'
+ \ 'trusty', 'utopic', 'vivid', 'wily', 'xenial', 'yakkety', 'zesty',
+ \ 'artful', 'bionic', 'cosmic', 'disco', 'eoan', 'hirsute',
+ \ 'impish', 'kinetic', 'lunar', 'groovy'
\ ]
let &cpo=s:cpo
diff --git a/runtime/syntax/shared/typescriptcommon.vim b/runtime/syntax/shared/typescriptcommon.vim
index d06525115e..3af79a38fb 100644
--- a/runtime/syntax/shared/typescriptcommon.vim
+++ b/runtime/syntax/shared/typescriptcommon.vim
@@ -1,7 +1,7 @@
" Vim syntax file
" Language: TypeScript and TypeScriptReact
" Maintainer: Herrington Darkholme
-" Last Change: 2023 Aug 24
+" Last Change: 2024 May 24
" Based On: Herrington Darkholme's yats.vim
" Changes: See https://github.com/HerringtonDarkholme/yats.vim
" Credits: See yats.vim on github
@@ -49,13 +49,13 @@ syntax match typescriptProp contained /\K\k*!\?/
\ nextgroup=@afterIdentifier
\ skipwhite skipempty
-syntax region typescriptIndexExpr contained matchgroup=typescriptProperty start=/\[/rs=s+1 end=/]/he=e-1 contains=@typescriptValue nextgroup=@typescriptSymbols,typescriptDotNotation,typescriptFuncCallArg skipwhite skipempty
+syntax region typescriptIndexExpr contained matchgroup=typescriptProperty start=/\[/ end=/]/ contains=@typescriptValue,typescriptCastKeyword nextgroup=@typescriptSymbols,typescriptDotNotation,typescriptFuncCallArg skipwhite skipempty
syntax match typescriptDotNotation /\.\|?\.\|!\./ nextgroup=typescriptProp skipnl
syntax match typescriptDotStyleNotation /\.style\./ nextgroup=typescriptDOMStyle transparent
" syntax match typescriptFuncCall contained /[a-zA-Z]\k*\ze(/ nextgroup=typescriptFuncCallArg
syntax region typescriptParenExp matchgroup=typescriptParens start=/(/ end=/)/ contains=@typescriptComments,@typescriptValue,typescriptCastKeyword nextgroup=@typescriptSymbols skipwhite skipempty
-syntax region typescriptFuncCallArg contained matchgroup=typescriptParens start=/(/ end=/)/ contains=@typescriptValue,@typescriptComments nextgroup=@typescriptSymbols,typescriptDotNotation skipwhite skipempty skipnl
+syntax region typescriptFuncCallArg contained matchgroup=typescriptParens start=/(/ end=/)/ contains=@typescriptValue,@typescriptComments,typescriptCastKeyword nextgroup=@typescriptSymbols,typescriptDotNotation skipwhite skipempty skipnl
syntax region typescriptEventFuncCallArg contained matchgroup=typescriptParens start=/(/ end=/)/ contains=@typescriptEventExpression
syntax region typescriptEventString contained start=/\z(["']\)/ skip=/\\\\\|\\\z1\|\\\n/ end=/\z1\|$/ contains=typescriptASCII,@events
@@ -116,20 +116,33 @@ syntax match typescriptASCII contained /\\\d\d\d/
syntax region typescriptTemplateSubstitution matchgroup=typescriptTemplateSB
\ start=/\${/ end=/}/
- \ contains=@typescriptValue
+ \ contains=@typescriptValue,typescriptCastKeyword
\ contained
-syntax region typescriptString
+syntax region typescriptString
\ start=+\z(["']\)+ skip=+\\\%(\z1\|$\)+ end=+\z1+ end=+$+
\ contains=typescriptSpecial,@Spell
+ \ nextgroup=@typescriptSymbols
+ \ skipwhite skipempty
\ extend
syntax match typescriptSpecial contained "\v\\%(x\x\x|u%(\x{4}|\{\x{1,6}})|c\u|.)"
-" From vim runtime
-" <https://github.com/vim/vim/blob/master/runtime/syntax/javascript.vim#L48>
-syntax region typescriptRegexpString start=+/[^/*]+me=e-1 skip=+\\\\\|\\/+ end=+/[gimuy]\{0,5\}\s*$+ end=+/[gimuy]\{0,5\}\s*[;.,)\]}:]+me=e-1 nextgroup=typescriptDotNotation oneline
+" From pangloss/vim-javascript
+" <https://github.com/pangloss/vim-javascript/blob/d6e137563c47fb59f26ed25d044c0c7532304f18/syntax/javascript.vim#L64-L72>
+syntax region typescriptRegexpCharClass contained start=+\[+ skip=+\\.+ end=+\]+ contains=typescriptSpecial extend
+syntax match typescriptRegexpBoundary contained "\v\c[$^]|\\b"
+syntax match typescriptRegexpBackRef contained "\v\\[1-9]\d*"
+syntax match typescriptRegexpQuantifier contained "\v[^\\]%([?*+]|\{\d+%(,\d*)?})\??"lc=1
+syntax match typescriptRegexpOr contained "|"
+syntax match typescriptRegexpMod contained "\v\(\?[:=!>]"lc=1
+syntax region typescriptRegexpGroup contained start="[^\\]("lc=1 skip="\\.\|\[\(\\.\|[^]]\+\)\]" end=")" contains=typescriptRegexpCharClass,@typescriptRegexpSpecial keepend
+syntax region typescriptRegexpString
+ \ start=+\%(\%(\<return\|\<typeof\|\_[^)\]'"[:blank:][:alnum:]_$]\)\s*\)\@<=/\ze[^*/]+ skip=+\\.\|\[[^]]\{1,}\]+ end=+/[gimyus]\{,6}+
+ \ contains=typescriptRegexpCharClass,typescriptRegexpGroup,@typescriptRegexpSpecial
+ \ oneline keepend extend
+syntax cluster typescriptRegexpSpecial contains=typescriptSpecial,typescriptRegexpBoundary,typescriptRegexpBackRef,typescriptRegexpQuantifier,typescriptRegexpOr,typescriptRegexpMod
syntax region typescriptTemplate
\ start=/`/ skip=/\\\\\|\\`\|\n/ end=/`\|$/
@@ -140,7 +153,7 @@ syntax region typescriptTemplate
"Array
syntax region typescriptArray matchgroup=typescriptBraces
\ start=/\[/ end=/]/
- \ contains=@typescriptValue,@typescriptComments
+ \ contains=@typescriptValue,@typescriptComments,typescriptCastKeyword
\ nextgroup=@typescriptSymbols,typescriptDotNotation
\ skipwhite skipempty fold
@@ -153,7 +166,7 @@ syntax match typescriptNumber /\<\%(\d[0-9_]*\%(\.\d[0-9_]*\)\=\|\.\d[0-9_]*\)\%
syntax region typescriptObjectLiteral matchgroup=typescriptBraces
\ start=/{/ end=/}/
- \ contains=@typescriptComments,typescriptObjectLabel,typescriptStringProperty,typescriptComputedPropertyName,typescriptObjectAsyncKeyword
+ \ contains=@typescriptComments,typescriptObjectLabel,typescriptStringProperty,typescriptComputedPropertyName,typescriptObjectAsyncKeyword,typescriptTernary,typescriptCastKeyword
\ fold contained
syntax keyword typescriptObjectAsyncKeyword async contained
@@ -223,11 +236,11 @@ syntax match typescriptBinaryOp contained /\*\*=\?/ nextgroup=@typescriptValue
syntax cluster typescriptSymbols contains=typescriptBinaryOp,typescriptKeywordOp,typescriptTernary,typescriptAssign,typescriptCastKeyword
-" runtime syntax/basic/reserved.vim
+" runtime syntax/ts-common/reserved.vim
"Import
syntax keyword typescriptImport from as
syntax keyword typescriptImport import
- \ nextgroup=typescriptImportType
+ \ nextgroup=typescriptImportType,typescriptTypeBlock,typescriptDefaultImportName
\ skipwhite
syntax keyword typescriptImportType type
\ contained
@@ -238,20 +251,11 @@ syntax match typescriptExportType /\<type\s*{\@=/
\ contained skipwhite skipempty skipnl
syntax keyword typescriptModule namespace module
-"this
-
-"JavaScript Prototype
-syntax keyword typescriptPrototype prototype
- \ nextgroup=@afterIdentifier
-syntax keyword typescriptCastKeyword as
+syntax keyword typescriptCastKeyword as satisfies
\ nextgroup=@typescriptType
\ skipwhite
-"Program Keywords
-syntax keyword typescriptIdentifier arguments this super
- \ nextgroup=@afterIdentifier
-
syntax keyword typescriptVariable let var
\ nextgroup=@typescriptVariableDeclarations
\ skipwhite skipempty
@@ -260,6 +264,10 @@ syntax keyword typescriptVariable const
\ nextgroup=typescriptEnum,@typescriptVariableDeclarations
\ skipwhite skipempty
+syntax keyword typescriptUsing using
+ \ nextgroup=@typescriptVariableDeclarations
+ \ skipwhite skipempty
+
syntax region typescriptEnum matchgroup=typescriptEnumKeyword start=/enum / end=/\ze{/
\ nextgroup=typescriptBlock
\ skipwhite
@@ -272,7 +280,6 @@ syntax keyword typescriptOperator delete new typeof void
syntax keyword typescriptForOperator contained in of
syntax keyword typescriptBoolean true false nextgroup=@typescriptSymbols skipwhite skipempty
-syntax keyword typescriptNull null undefined nextgroup=@typescriptSymbols skipwhite skipempty
syntax keyword typescriptMessage alert confirm prompt status
\ nextgroup=typescriptDotNotation,typescriptFuncCallArg
syntax keyword typescriptGlobal self top parent
@@ -290,10 +297,10 @@ syntax keyword typescriptCase case nextgroup=@typescriptPrimiti
syntax keyword typescriptDefault default containedin=typescriptBlock nextgroup=@typescriptValue,typescriptClassKeyword,typescriptInterfaceKeyword skipwhite oneline
syntax keyword typescriptStatementKeyword with
syntax keyword typescriptStatementKeyword yield skipwhite nextgroup=@typescriptValue containedin=typescriptBlock
-syntax keyword typescriptStatementKeyword return skipwhite contained nextgroup=@typescriptValue containedin=typescriptBlock
syntax keyword typescriptTry try
-syntax keyword typescriptExceptions catch throw finally
+syntax keyword typescriptExceptions throw finally
+syntax keyword typescriptExceptions catch nextgroup=typescriptCall skipwhite skipempty oneline
syntax keyword typescriptDebugger debugger
syntax keyword typescriptAsyncFor await nextgroup=typescriptLoopParen skipwhite skipempty contained
@@ -321,6 +328,24 @@ syntax cluster typescriptAmbients contains=
\ typescriptEnumKeyword,typescriptEnum,
\ typescriptModule
+syntax keyword typescriptIdentifier arguments nextgroup=@afterIdentifier
+syntax match typescriptDefaultImportName /\v\h\k*( |,)/
+ \ contained
+ \ nextgroup=typescriptTypeBlock
+ \ skipwhite skipempty
+
+syntax region typescriptTypeBlock
+ \ matchgroup=typescriptBraces
+ \ start=/{/ end=/}/
+ \ contained
+ \ contains=typescriptIdentifierName,typescriptImportType
+ \ fold
+
+"Program Keywords
+syntax keyword typescriptNull null undefined nextgroup=@typescriptSymbols skipwhite skipempty
+syntax keyword typescriptIdentifier this super prototype nextgroup=@afterIdentifier
+syntax keyword typescriptStatementKeyword return skipwhite contained nextgroup=@typescriptValue containedin=typescriptBlock
+
"Syntax coloring for Node.js shebang line
syntax match shellbang "^#!.*node\>"
syntax match shellbang "^#!.*iojs\>"
@@ -536,7 +561,7 @@ syntax region typescriptGenericFunc matchgroup=typescriptTypeBrackets
\ contained skipwhite skipnl
syntax region typescriptFuncType matchgroup=typescriptParens
- \ start=/(/ end=/)\s*=>/me=e-2
+ \ start=/(\(\k\+:\|)\)\@=/ end=/)\s*=>/me=e-2
\ contains=@typescriptParameterList
\ nextgroup=typescriptFuncTypeArrow
\ contained skipwhite skipnl oneline
@@ -546,7 +571,6 @@ syntax match typescriptFuncTypeArrow /=>/
\ containedin=typescriptFuncType
\ contained skipwhite skipnl
-
syntax keyword typescriptConstructorType new
\ nextgroup=@typescriptFunctionType
\ contained skipwhite skipnl
@@ -623,25 +647,24 @@ syntax keyword typescriptReadonlyArrayKeyword readonly
" extension
-if get(g:, 'yats_host_keyword', 1)
- syntax keyword typescriptGlobal containedin=typescriptIdentifierName Function Boolean
- " use of nextgroup Suggested by Doug Kearns
+if get(g:, 'typescript_host_keyword', 1)
+ syntax keyword typescriptGlobal containedin=typescriptIdentifierName Function Boolean nextgroup=typescriptFuncCallArg
syntax keyword typescriptGlobal containedin=typescriptIdentifierName Error EvalError nextgroup=typescriptFuncCallArg
- syntax keyword typescriptGlobal containedin=typescriptIdentifierName InternalError
- syntax keyword typescriptGlobal containedin=typescriptIdentifierName RangeError ReferenceError
- syntax keyword typescriptGlobal containedin=typescriptIdentifierName StopIteration
- syntax keyword typescriptGlobal containedin=typescriptIdentifierName SyntaxError TypeError
- syntax keyword typescriptGlobal containedin=typescriptIdentifierName URIError Date
- syntax keyword typescriptGlobal containedin=typescriptIdentifierName Float32Array
- syntax keyword typescriptGlobal containedin=typescriptIdentifierName Float64Array
- syntax keyword typescriptGlobal containedin=typescriptIdentifierName Int16Array Int32Array
- syntax keyword typescriptGlobal containedin=typescriptIdentifierName Int8Array Uint16Array
- syntax keyword typescriptGlobal containedin=typescriptIdentifierName Uint32Array Uint8Array
- syntax keyword typescriptGlobal containedin=typescriptIdentifierName Uint8ClampedArray
- syntax keyword typescriptGlobal containedin=typescriptIdentifierName ParallelArray
- syntax keyword typescriptGlobal containedin=typescriptIdentifierName ArrayBuffer DataView
- syntax keyword typescriptGlobal containedin=typescriptIdentifierName Iterator Generator
- syntax keyword typescriptGlobal containedin=typescriptIdentifierName Reflect Proxy
+ syntax keyword typescriptGlobal containedin=typescriptIdentifierName InternalError nextgroup=typescriptFuncCallArg
+ syntax keyword typescriptGlobal containedin=typescriptIdentifierName RangeError ReferenceError nextgroup=typescriptFuncCallArg
+ syntax keyword typescriptGlobal containedin=typescriptIdentifierName StopIteration nextgroup=typescriptFuncCallArg
+ syntax keyword typescriptGlobal containedin=typescriptIdentifierName SyntaxError TypeError nextgroup=typescriptFuncCallArg
+ syntax keyword typescriptGlobal containedin=typescriptIdentifierName URIError Date nextgroup=typescriptFuncCallArg
+ syntax keyword typescriptGlobal containedin=typescriptIdentifierName Float32Array nextgroup=typescriptFuncCallArg
+ syntax keyword typescriptGlobal containedin=typescriptIdentifierName Float64Array nextgroup=typescriptFuncCallArg
+ syntax keyword typescriptGlobal containedin=typescriptIdentifierName Int16Array Int32Array nextgroup=typescriptFuncCallArg
+ syntax keyword typescriptGlobal containedin=typescriptIdentifierName Int8Array Uint16Array nextgroup=typescriptFuncCallArg
+ syntax keyword typescriptGlobal containedin=typescriptIdentifierName Uint32Array Uint8Array nextgroup=typescriptFuncCallArg
+ syntax keyword typescriptGlobal containedin=typescriptIdentifierName Uint8ClampedArray nextgroup=typescriptFuncCallArg
+ syntax keyword typescriptGlobal containedin=typescriptIdentifierName ParallelArray nextgroup=typescriptFuncCallArg
+ syntax keyword typescriptGlobal containedin=typescriptIdentifierName ArrayBuffer DataView nextgroup=typescriptFuncCallArg
+ syntax keyword typescriptGlobal containedin=typescriptIdentifierName Iterator Generator nextgroup=typescriptFuncCallArg
+ syntax keyword typescriptGlobal containedin=typescriptIdentifierName Reflect Proxy nextgroup=typescriptFuncCallArg
syntax keyword typescriptGlobal containedin=typescriptIdentifierName arguments
hi def link typescriptGlobal Structure
syntax keyword typescriptGlobalMethod containedin=typescriptIdentifierName eval uneval nextgroup=typescriptFuncCallArg
@@ -675,12 +698,12 @@ if get(g:, 'yats_host_keyword', 1)
hi def link typescriptStringStaticMethod Keyword
syntax keyword typescriptStringMethod contained anchor charAt charCodeAt codePointAt nextgroup=typescriptFuncCallArg
syntax keyword typescriptStringMethod contained concat endsWith includes indexOf lastIndexOf nextgroup=typescriptFuncCallArg
- syntax keyword typescriptStringMethod contained link localeCompare match normalize nextgroup=typescriptFuncCallArg
- syntax keyword typescriptStringMethod contained padStart padEnd repeat replace search nextgroup=typescriptFuncCallArg
+ syntax keyword typescriptStringMethod contained link localeCompare match matchAll normalize nextgroup=typescriptFuncCallArg
+ syntax keyword typescriptStringMethod contained padStart padEnd repeat replace replaceAll search nextgroup=typescriptFuncCallArg
syntax keyword typescriptStringMethod contained slice split startsWith substr substring nextgroup=typescriptFuncCallArg
syntax keyword typescriptStringMethod contained toLocaleLowerCase toLocaleUpperCase nextgroup=typescriptFuncCallArg
syntax keyword typescriptStringMethod contained toLowerCase toString toUpperCase trim nextgroup=typescriptFuncCallArg
- syntax keyword typescriptStringMethod contained valueOf nextgroup=typescriptFuncCallArg
+ syntax keyword typescriptStringMethod contained trimEnd trimStart valueOf nextgroup=typescriptFuncCallArg
syntax cluster props add=typescriptStringMethod
hi def link typescriptStringMethod Keyword
@@ -689,18 +712,18 @@ if get(g:, 'yats_host_keyword', 1)
syntax keyword typescriptArrayStaticMethod contained from isArray of nextgroup=typescriptFuncCallArg
hi def link typescriptArrayStaticMethod Keyword
syntax keyword typescriptArrayMethod contained concat copyWithin entries every fill nextgroup=typescriptFuncCallArg
- syntax keyword typescriptArrayMethod contained filter find findIndex forEach indexOf nextgroup=typescriptFuncCallArg
- syntax keyword typescriptArrayMethod contained includes join keys lastIndexOf map nextgroup=typescriptFuncCallArg
+ syntax keyword typescriptArrayMethod contained filter find findIndex flat flatMap forEach nextgroup=typescriptFuncCallArg
+ syntax keyword typescriptArrayMethod contained includes indexOf join keys lastIndexOf map nextgroup=typescriptFuncCallArg
syntax keyword typescriptArrayMethod contained pop push reduce reduceRight reverse nextgroup=typescriptFuncCallArg
syntax keyword typescriptArrayMethod contained shift slice some sort splice toLocaleString nextgroup=typescriptFuncCallArg
- syntax keyword typescriptArrayMethod contained toSource toString unshift nextgroup=typescriptFuncCallArg
+ syntax keyword typescriptArrayMethod contained toSource toString unshift values nextgroup=typescriptFuncCallArg
syntax cluster props add=typescriptArrayMethod
hi def link typescriptArrayMethod Keyword
syntax keyword typescriptGlobal containedin=typescriptIdentifierName Object nextgroup=typescriptGlobalObjectDot,typescriptFuncCallArg
syntax match typescriptGlobalObjectDot /\./ contained nextgroup=typescriptObjectStaticMethod,typescriptProp
syntax keyword typescriptObjectStaticMethod contained create defineProperties defineProperty nextgroup=typescriptFuncCallArg
- syntax keyword typescriptObjectStaticMethod contained entries freeze getOwnPropertyDescriptors nextgroup=typescriptFuncCallArg
+ syntax keyword typescriptObjectStaticMethod contained entries freeze fromEntries getOwnPropertyDescriptors nextgroup=typescriptFuncCallArg
syntax keyword typescriptObjectStaticMethod contained getOwnPropertyDescriptor getOwnPropertyNames nextgroup=typescriptFuncCallArg
syntax keyword typescriptObjectStaticMethod contained getOwnPropertySymbols getPrototypeOf nextgroup=typescriptFuncCallArg
syntax keyword typescriptObjectStaticMethod contained is isExtensible isFrozen isSealed nextgroup=typescriptFuncCallArg
@@ -715,7 +738,7 @@ if get(g:, 'yats_host_keyword', 1)
syntax keyword typescriptGlobal containedin=typescriptIdentifierName Symbol nextgroup=typescriptGlobalSymbolDot,typescriptFuncCallArg
syntax match typescriptGlobalSymbolDot /\./ contained nextgroup=typescriptSymbolStaticProp,typescriptSymbolStaticMethod,typescriptProp
- syntax keyword typescriptSymbolStaticProp contained length iterator match replace
+ syntax keyword typescriptSymbolStaticProp contained description length iterator match matchAll replace
syntax keyword typescriptSymbolStaticProp contained search split hasInstance isConcatSpreadable
syntax keyword typescriptSymbolStaticProp contained unscopables species toPrimitive
syntax keyword typescriptSymbolStaticProp contained toStringTag
@@ -771,7 +794,7 @@ if get(g:, 'yats_host_keyword', 1)
syntax match typescriptGlobalRegExpDot /\./ contained nextgroup=typescriptRegExpStaticProp,typescriptProp
syntax keyword typescriptRegExpStaticProp contained lastIndex
hi def link typescriptRegExpStaticProp Keyword
- syntax keyword typescriptRegExpProp contained global ignoreCase multiline source sticky
+ syntax keyword typescriptRegExpProp contained dotAll global ignoreCase multiline source sticky
syntax cluster props add=typescriptRegExpProp
hi def link typescriptRegExpProp Keyword
syntax keyword typescriptRegExpMethod contained exec test nextgroup=typescriptFuncCallArg
@@ -805,7 +828,7 @@ if get(g:, 'yats_host_keyword', 1)
syntax keyword typescriptGlobal containedin=typescriptIdentifierName Promise nextgroup=typescriptGlobalPromiseDot,typescriptFuncCallArg
syntax match typescriptGlobalPromiseDot /\./ contained nextgroup=typescriptPromiseStaticMethod,typescriptProp
- syntax keyword typescriptPromiseStaticMethod contained resolve reject all race nextgroup=typescriptFuncCallArg
+ syntax keyword typescriptPromiseStaticMethod contained all allSettled any race reject resolve nextgroup=typescriptFuncCallArg
hi def link typescriptPromiseStaticMethod Keyword
syntax keyword typescriptPromiseMethod contained then catch finally nextgroup=typescriptFuncCallArg
syntax cluster props add=typescriptPromiseMethod
@@ -1232,7 +1255,8 @@ if get(g:, 'yats_host_keyword', 1)
syntax cluster props add=typescriptBOMHistoryMethod
hi def link typescriptBOMHistoryMethod Keyword
- syntax keyword typescriptGlobal containedin=typescriptIdentifierName console
+ syntax keyword typescriptGlobal containedin=typescriptIdentifierName console nextgroup=typescriptGlobalConsoleDot
+ syntax match typescriptGlobalConsoleDot /\./ contained nextgroup=typescriptConsoleMethod,typescriptProp
syntax keyword typescriptConsoleMethod contained count dir error group groupCollapsed nextgroup=typescriptFuncCallArg
syntax keyword typescriptConsoleMethod contained groupEnd info log time timeEnd trace nextgroup=typescriptFuncCallArg
syntax keyword typescriptConsoleMethod contained warn nextgroup=typescriptFuncCallArg
@@ -1735,8 +1759,6 @@ if get(g:, 'yats_host_keyword', 1)
syntax keyword typescriptServiceWorkerEvent contained install activate fetch
syntax cluster events add=typescriptServiceWorkerEvent
hi def link typescriptServiceWorkerEvent Title
-
-
endif
" patch
@@ -1764,6 +1786,7 @@ syntax cluster typescriptPropertyMemberDeclaration contains=
\ typescriptClassStatic,
\ typescriptAccessibilityModifier,
\ typescriptReadonlyModifier,
+ \ typescriptAutoAccessor,
\ typescriptMethodAccessor,
\ @typescriptMembers
" \ typescriptMemberVariableDeclaration
@@ -1780,7 +1803,9 @@ syntax keyword typescriptClassStatic static
syntax keyword typescriptAccessibilityModifier public private protected contained
-syntax keyword typescriptReadonlyModifier readonly contained
+syntax keyword typescriptReadonlyModifier readonly override contained
+
+syntax keyword typescriptAutoAccessor accessor contained
syntax region typescriptStringMember contained
\ start=/\z(["']\)/ skip=/\\\\\|\\\z1\|\\\n/ end=/\z1/
@@ -1789,7 +1814,7 @@ syntax region typescriptStringMember contained
syntax region typescriptComputedMember contained matchgroup=typescriptProperty
\ start=/\[/rs=s+1 end=/]/
- \ contains=@typescriptValue,typescriptMember,typescriptMappedIn
+ \ contains=@typescriptValue,typescriptMember,typescriptMappedIn,typescriptCastKeyword
\ nextgroup=@memberNextGroup
\ skipwhite skipempty
@@ -1861,7 +1886,7 @@ syntax match typescriptInterfaceComma /,/ contained nextgroup=typescriptInterfac
"Block VariableStatement EmptyStatement ExpressionStatement IfStatement IterationStatement ContinueStatement BreakStatement ReturnStatement WithStatement LabelledStatement SwitchStatement ThrowStatement TryStatement DebuggerStatement
syntax cluster typescriptStatement
- \ contains=typescriptBlock,typescriptVariable,
+ \ contains=typescriptBlock,typescriptVariable,typescriptUsing,
\ @typescriptTopExpression,typescriptAssign,
\ typescriptConditional,typescriptRepeat,typescriptBranch,
\ typescriptLabel,typescriptStatementKeyword,
@@ -1899,16 +1924,14 @@ syntax cluster typescriptValue
syntax cluster typescriptEventExpression contains=typescriptArrowFuncDef,typescriptParenExp,@typescriptValue,typescriptRegexpString,@typescriptEventTypes,typescriptOperator,typescriptGlobal,jsxRegion
syntax keyword typescriptAsyncFuncKeyword async
- \ nextgroup=typescriptFuncKeyword,typescriptArrowFuncDef
+ \ nextgroup=typescriptFuncKeyword,typescriptArrowFuncDef,typescriptArrowFuncTypeParameter
\ skipwhite
syntax keyword typescriptAsyncFuncKeyword await
- \ nextgroup=@typescriptValue
+ \ nextgroup=@typescriptValue,typescriptUsing
\ skipwhite
-syntax keyword typescriptFuncKeyword function
- \ nextgroup=typescriptAsyncFunc,typescriptFuncName,@typescriptCallSignature
- \ skipwhite skipempty
+syntax keyword typescriptFuncKeyword function nextgroup=typescriptAsyncFunc,typescriptFuncName,@typescriptCallSignature skipwhite skipempty
syntax match typescriptAsyncFunc contained /*/
\ nextgroup=typescriptFuncName,@typescriptCallSignature
@@ -1918,39 +1941,33 @@ syntax match typescriptFuncName contained /\K\k*/
\ nextgroup=@typescriptCallSignature
\ skipwhite
-" destructuring ({ a: ee }) =>
-syntax match typescriptArrowFuncDef contained /(\(\s*\({\_[^}]*}\|\k\+\)\(:\_[^)]\)\?,\?\)\+)\s*=>/
- \ contains=typescriptArrowFuncArg,typescriptArrowFunc
- \ nextgroup=@typescriptExpression,typescriptBlock
- \ skipwhite skipempty
-
-" matches `(a) =>` or `([a]) =>` or
-" `(
-" a) =>`
-syntax match typescriptArrowFuncDef contained /(\(\_s*[a-zA-Z\$_\[.]\_[^)]*\)*)\s*=>/
+syntax match typescriptArrowFuncDef contained /\K\k*\s*=>/
\ contains=typescriptArrowFuncArg,typescriptArrowFunc
\ nextgroup=@typescriptExpression,typescriptBlock
\ skipwhite skipempty
-syntax match typescriptArrowFuncDef contained /\K\k*\s*=>/
- \ contains=typescriptArrowFuncArg,typescriptArrowFunc
+syntax match typescriptArrowFuncDef contained /(\%(\_[^()]\+\|(\_[^()]*)\)*)\_s*=>/
+ \ contains=typescriptArrowFuncArg,typescriptArrowFunc,@typescriptCallSignature
\ nextgroup=@typescriptExpression,typescriptBlock
\ skipwhite skipempty
-" TODO: optimize this pattern
-syntax region typescriptArrowFuncDef contained start=/(\_[^(^)]*):/ end=/=>/
- \ contains=typescriptArrowFuncArg,typescriptArrowFunc,typescriptTypeAnnotation
+syntax region typescriptArrowFuncDef contained start=/(\%(\_[^()]\+\|(\_[^()]*)\)*):/ matchgroup=typescriptArrowFunc end=/=>/
+ \ contains=typescriptArrowFuncArg,typescriptTypeAnnotation,@typescriptCallSignature
\ nextgroup=@typescriptExpression,typescriptBlock
\ skipwhite skipempty keepend
+syntax region typescriptArrowFuncTypeParameter start=/</ end=/>/
+ \ contains=@typescriptTypeParameterCluster
+ \ nextgroup=typescriptArrowFuncDef
+ \ contained skipwhite skipnl
+
syntax match typescriptArrowFunc /=>/
syntax match typescriptArrowFuncArg contained /\K\k*/
-syntax region typescriptArrowFuncArg contained start=/<\|(/ end=/\ze=>/ contains=@typescriptCallSignature
syntax region typescriptReturnAnnotation contained start=/:/ end=/{/me=e-1 contains=@typescriptType nextgroup=typescriptBlock
-syntax region typescriptFuncImpl contained start=/function\>/ end=/{/me=e-1
+syntax region typescriptFuncImpl contained start=/function\>/ end=/{\|;\|\n/me=e-1
\ contains=typescriptFuncKeyword
\ nextgroup=typescriptBlock
@@ -1970,7 +1987,7 @@ syntax match typescriptDecorator /@\([_$a-zA-Z][_$a-zA-Z0-9]*\.\)*[_$a-zA-Z][_$a
\ nextgroup=typescriptFuncCallArg,typescriptTypeArguments
\ contains=@_semantic,typescriptDotNotation
-" Define the default highlighting.
+
hi def link typescriptReserved Error
hi def link typescriptEndColons Exception
@@ -2013,6 +2030,7 @@ hi def link typescriptDefault typescriptCase
hi def link typescriptBranch Conditional
hi def link typescriptIdentifier Structure
hi def link typescriptVariable Identifier
+hi def link typescriptUsing Identifier
hi def link typescriptDestructureVariable PreProc
hi def link typescriptEnumKeyword Identifier
hi def link typescriptRepeat Repeat
@@ -2050,16 +2068,13 @@ hi def link typescriptFuncKeyword Keyword
hi def link typescriptAsyncFunc Keyword
hi def link typescriptArrowFunc Type
hi def link typescriptFuncName Function
-hi def link typescriptFuncArg PreProc
+hi def link typescriptFuncCallArg PreProc
hi def link typescriptArrowFuncArg PreProc
hi def link typescriptFuncComma Operator
hi def link typescriptClassKeyword Keyword
hi def link typescriptClassExtends Keyword
-" hi def link typescriptClassName Function
hi def link typescriptAbstract Special
-" hi def link typescriptClassHeritage Function
-" hi def link typescriptInterfaceHeritage Function
hi def link typescriptClassStatic StorageClass
hi def link typescriptReadonlyModifier Keyword
hi def link typescriptInterfaceKeyword Keyword
@@ -2077,6 +2092,7 @@ hi def link typescriptFuncTypeArrow Function
hi def link typescriptConstructorType Function
hi def link typescriptTypeQuery Keyword
hi def link typescriptAccessibilityModifier Keyword
+hi def link typescriptAutoAccessor Keyword
hi def link typescriptOptionalMark PreProc
hi def link typescriptFuncType Special
hi def link typescriptMappedIn Special
diff --git a/runtime/syntax/spec.vim b/runtime/syntax/spec.vim
index 4cb3a343eb..730a0b8cc5 100644
--- a/runtime/syntax/spec.vim
+++ b/runtime/syntax/spec.vim
@@ -4,6 +4,7 @@
" Maintainer: Igor Gnatenko i.gnatenko.brain@gmail.com
" Former Maintainer: Donovan Rebbechi elflord@panix.com (until March 2014)
" Last Change: 2020 May 25
+" 2024 Sep 10 by Vim Project: add file triggers support, #15569
" quit when a syntax file was already loaded
if exists("b:current_syntax")
@@ -111,7 +112,7 @@ syn region specDescriptionArea matchgroup=specSection start='^%description' end=
syn region specPackageArea matchgroup=specSection start='^%package' end='^%'me=e-1 contains=specPackageOpts,specPreAmble,specComment
"%% Scripts Section %%
-syn region specScriptArea matchgroup=specSection start='^%\(prep\|generate_buildrequires\|conf\|build\|install\|clean\|check\|pre\|postun\|preun\|post\|posttrans\)\>' skip='^%{\|^%\(define\|patch\d*\|configure\|GNUconfigure\|setup\|autosetup\|autopatch\|find_lang\|make_build\|makeinstall\|make_install\)\>' end='^%'me=e-1 contains=specSpecialVariables,specVariables,@specCommands,specVariables,shDo,shFor,shCaseEsac,specNoNumberHilite,specCommandOpts,shComment,shIf,specSpecialChar,specMacroIdentifier,specSectionMacroArea,specSectionMacroBracketArea,shOperator,shQuote1,shQuote2
+syn region specScriptArea matchgroup=specSection start='^%\(prep\|generate_buildrequires\|conf\|build\|install\|clean\|check\|pre\|postun\|preun\|post\|posttrans\|filetriggerin\|filetriggerun\|filetriggerpostun\|transfiletriggerin\|transfiletriggerun\|transfiletriggerpostun\)\>' skip='^%{\|^%\(define\|patch\d*\|configure\|GNUconfigure\|setup\|autosetup\|autopatch\|find_lang\|make_build\|makeinstall\|make_install\)\>' end='^%'me=e-1 contains=specSpecialVariables,specVariables,@specCommands,specVariables,shDo,shFor,shCaseEsac,specNoNumberHilite,specCommandOpts,shComment,shIf,specSpecialChar,specMacroIdentifier,specSectionMacroArea,specSectionMacroBracketArea,shOperator,shQuote1,shQuote2
"%% Changelog Section %%
syn region specChangelogArea matchgroup=specSection start='^%changelog' end='^%'me=e-1 contains=specEmail,specURL,specWeekday,specMonth,specNumber,specComment,specLicense
diff --git a/runtime/syntax/stylus.vim b/runtime/syntax/stylus.vim
index fd0f33b65a..d8bf641e60 100644
--- a/runtime/syntax/stylus.vim
+++ b/runtime/syntax/stylus.vim
@@ -4,17 +4,7 @@
" Filenames: *.styl, *.stylus
" Based On: Tim Pope (sass.vim)
" Created: Dec 14, 2011
-" Modified: Apr 29, 2024
-
-if main_syntax == "css"
- syn sync minlines=10
-endif
-
-" let b:current_syntax = "css"
-"
-if main_syntax == 'css'
- unlet main_syntax
-endif
+" Modified: May 28, 2024
syn case ignore
diff --git a/runtime/syntax/sudoers.vim b/runtime/syntax/sudoers.vim
index bf2d337d9e..4cdf598be0 100644
--- a/runtime/syntax/sudoers.vim
+++ b/runtime/syntax/sudoers.vim
@@ -2,9 +2,10 @@
" Language: sudoers(5) configuration files
" Maintainer: Eisuke Kawashima ( e.kawaschima+vim AT gmail.com )
" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
-" Latest Revision: 2021 Mar 15
+" Latest Revision: 2024 Sep 02
" Recent Changes: Support for #include and #includedir.
" Added many new options (Samuel D. Leslie)
+" Update allowed Tag_Spec Runas_Spec syntax items
if exists("b:current_syntax")
finish
@@ -22,7 +23,7 @@ syn match sudoersUserSpec '^' nextgroup=@sudoersUserInSpec skipwhite
syn match sudoersSpecEquals contained '=' nextgroup=@sudoersCmndSpecList skipwhite
-syn cluster sudoersCmndSpecList contains=sudoersUserRunasBegin,sudoersPASSWD,@sudoersCmndInSpec
+syn cluster sudoersCmndSpecList contains=sudoersUserRunasBegin,sudoersTagSpec,@sudoersCmndInSpec
syn keyword sudoersTodo contained TODO FIXME XXX NOTE
@@ -92,10 +93,11 @@ syn cluster sudoersUserList contains=sudoersUserListComma,sudoersUserLis
syn match sudoersUserSpecComma contained ',' nextgroup=@sudoersUserInSpec skipwhite skipnl
syn cluster sudoersUserSpec contains=sudoersUserSpecComma,@sudoersHostInSpec
-syn match sudoersUserRunasBegin contained '(' nextgroup=@sudoersUserInRunas skipwhite skipnl
+syn match sudoersUserRunasBegin contained '(' nextgroup=@sudoersUserInRunas,sudoersUserRunasColon skipwhite skipnl
syn match sudoersUserRunasComma contained ',' nextgroup=@sudoersUserInRunas skipwhite skipnl
-syn match sudoersUserRunasEnd contained ')' nextgroup=sudoersPASSWD,@sudoersCmndInSpec skipwhite skipnl
-syn cluster sudoersUserRunas contains=sudoersUserRunasComma,@sudoersUserInRunas,sudoersUserRunasEnd
+syn match sudoersUserRunasColon contained ':' nextgroup=@sudoersUserInRunas skipwhite skipnl
+syn match sudoersUserRunasEnd contained ')' nextgroup=sudoersTagSpec,@sudoersCmndInSpec skipwhite skipnl
+syn cluster sudoersUserRunas contains=sudoersUserRunasComma,sudoersUserRunasColon,@sudoersUserInRunas,sudoersUserRunasEnd
syn match sudoersHostAliasEquals contained '=' nextgroup=@sudoersHostInList skipwhite skipnl
@@ -291,7 +293,7 @@ syn region sudoersStringValue contained start=+"+ skip=+\\"+ end=+"+ nextgroup
syn match sudoersListValue contained '[^[:space:],:=\\]*\%(\\[[:space:],:=\\][^[:space:],:=\\]*\)*' nextgroup=sudoersParameterListComma skipwhite skipnl
syn region sudoersListValue contained start=+"+ skip=+\\"+ end=+"+ nextgroup=sudoersParameterListComma skipwhite skipnl
-syn match sudoersPASSWD contained '\%(NO\)\=PASSWD:' nextgroup=@sudoersCmndInSpec skipwhite
+syn match sudoersTagSpec contained '\%(NO\)\=\%(EXEC\|FOLLOW\|LOG_\%(INPUT\|OUTPUT\)\|MAIL\|INTERCEPT\|PASSWD\|SETENV\):' nextgroup=sudoersTagSpec,@sudoersCmndInSpec skipwhite
hi def link sudoersSpecEquals Operator
hi def link sudoersTodo Todo
@@ -345,6 +347,7 @@ hi def link sudoersUserListColon Delimiter
hi def link sudoersUserSpecComma Delimiter
hi def link sudoersUserRunasBegin Delimiter
hi def link sudoersUserRunasComma Delimiter
+hi def link sudoersUserRunasColon Delimiter
hi def link sudoersUserRunasEnd Delimiter
hi def link sudoersHostAliasEquals Operator
hi def link sudoersHostListComma Delimiter
@@ -381,7 +384,7 @@ hi def link sudoersListParameterEquals Operator
hi def link sudoersIntegerValue Number
hi def link sudoersStringValue String
hi def link sudoersListValue String
-hi def link sudoersPASSWD Special
+hi def link sudoersTagSpec Special
hi def link sudoersInclude Statement
let b:current_syntax = "sudoers"
diff --git a/runtime/syntax/swayconfig.vim b/runtime/syntax/swayconfig.vim
index 401412adfd..d09d476a5a 100644
--- a/runtime/syntax/swayconfig.vim
+++ b/runtime/syntax/swayconfig.vim
@@ -2,8 +2,8 @@
" Language: sway config file
" Original Author: Josef Litos (JosefLitos/i3config.vim)
" Maintainer: James Eapen <james.eapen@vai.org>
-" Version: 1.2.3
-" Last Change: 2024-05-23
+" Version: 1.2.4
+" Last Change: 2024-05-24
" References:
" http://i3wm.org/docs/userguide.html#configuring
@@ -34,12 +34,12 @@ syn region i3ConfigBindArgument start=/--input-device=['"]/ end=/\s/ contained c
syn region i3ConfigBindCombo matchgroup=i3ConfigParen start=/{$/ end=/^\s*}$/ contained contains=i3ConfigBindArgument,i3ConfigBindCombo,i3ConfigComment fold keepend extend
" hack for blocks with start outside parsing range
-syn region swayConfigBlockOrphan start=/^\s\+\(--[a-z-]\+ \)*\([A-Z$][$a-zA-Z0-9_+]\+\|[a-z]\) [a-z[]/ skip=/\\$\|$\n^\s*}$/ end=/$/ contains=i3ConfigBindArgument,i3ConfigBindCombo,i3ConfigParen keepend extend
+syn region swayConfigBlockOrphan start=/^\s\+\(--[a-z-]\+ \)*\([$A-Z][$0-9A-Za-z_+]\+\|[a-z]\) [a-z[]/ skip=/\\$\|$\n^\s*}$/ end=/$/ contains=i3ConfigBindArgument,i3ConfigBindCombo,i3ConfigParen keepend extend
syn region i3ConfigExec start=/ {$/ end=/^\s*}$/ contained contains=i3ConfigExecAction,@i3ConfigSh,i3ConfigComment fold keepend extend
syn keyword swayConfigFloatingModifierOpts normal inverse none contained
-syn match i3ConfigKeyword /floating_modifier \(none\|[$a-zA-Z0-9+]\+ \(normal\|inverse\)\)$/ contained contains=i3ConfigVariable,i3ConfigBindModkey,swayConfigFloatingModifierOpts
+syn match i3ConfigKeyword /floating_modifier \(none\|[$A-Z][0-9A-Za-z]\+ \(normal\|inverse\)\)$/ contained contains=i3ConfigVariable,i3ConfigBindModkey,swayConfigFloatingModifierOpts
syn match swayConfigI3Param /--i3/ contains=i3ConfigShParam skipwhite nextgroup=i3ConfigEdgeOpts
syn keyword i3ConfigKeyword hide_edge_borders contained skipwhite nextgroup=swayConfigI3Param,i3ConfigEdgeOpts
@@ -71,7 +71,7 @@ syn keyword i3ConfigBindKeyword bindswitch contained skipwhite nextgroup=swayCon
syn region swayConfigBlockOrphan start=/^\s\+\(lid\|tablet\):/ skip=/\\$\|$\n^\s*}$/ end=/$/ contains=swayConfigBindswitchArgument,swayConfigBindswitchType,i3ConfigParen keepend extend
" Bindgesture
-syn match swayConfigBindgestureArgument /--\(exact\|input-device=[:0-9a-zA-Z_/-]\+\|no-warn\) / contained nextgroup=swayConfigBindgestureArgument,swayConfigBindgestureCombo
+syn match swayConfigBindgestureArgument /--\(exact\|input-device=[:0-9A-Za-z_/-]\+\|no-warn\) / contained nextgroup=swayConfigBindgestureArgument,swayConfigBindgestureCombo
syn keyword swayConfigBindgestureType hold swipe pinch contained
syn keyword swayConfigBindgestureDir up down left right inward outward clockwise counterclockwise contained
syn match swayConfigBindgestureCombo /\(hold\(:[1-5]\)\?\|swipe\(:[3-5]\)\?\(:up\|:down\|:left\|:right\)\?\|pinch\(:[2-5]\)\?:\(+\?\(inward\|outward\|clockwise\|counterclockwise\|up\|down\|left\|right\)\)\+\) / contained contains=i3ConfigNumber,swayConfigBindgestureType,i3ConfigColonOperator,swayConfigBindgestureDir,i3ConfigBindModifier nextgroup=swayConfigBindgestureCombo,i3ConfigBind
diff --git a/runtime/syntax/terraform.vim b/runtime/syntax/terraform.vim
new file mode 100644
index 0000000000..559dc79568
--- /dev/null
+++ b/runtime/syntax/terraform.vim
@@ -0,0 +1,17 @@
+" Vim syntax file
+" Language: Terraform
+" Maintainer: Gregory Anders
+" Upstream: https://github.com/hashivim/vim-terraform
+" Last Change: 2024-09-03
+
+if exists('b:current_syntax')
+ finish
+endif
+
+runtime! syntax/hcl.vim
+
+syn keyword terraType string bool number object tuple list map set any
+
+hi def link terraType Type
+
+let b:current_syntax = 'terraform'
diff --git a/runtime/syntax/thrift.vim b/runtime/syntax/thrift.vim
new file mode 100644
index 0000000000..502e98852a
--- /dev/null
+++ b/runtime/syntax/thrift.vim
@@ -0,0 +1,74 @@
+" Vim syntax file
+" Language: Thrift
+" Original Author: Martin Smith <martin@facebook.com>
+" Maintainer: Yinzuo Jiang <jiangyinzuo@foxmail.com>
+" Last Change: 2024/07/29
+" https://github.com/apache/thrift/blob/master/contrib/thrift.vim
+"
+" Licensed to the Apache Software Foundation (ASF) under one
+" or more contributor license agreements. See the NOTICE file
+" distributed with this work for additional information
+" regarding copyright ownership. The ASF licenses this file
+" to you under the Apache License, Version 2.0 (the
+" "License"); you may not use this file except in compliance
+" with the License. You may obtain a copy of the License at
+"
+" http://www.apache.org/licenses/LICENSE-2.0
+"
+" Unless required by applicable law or agreed to in writing,
+" software distributed under the License is distributed on an
+" "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+" KIND, either express or implied. See the License for the
+" specific language governing permissions and limitations
+" under the License.
+"
+
+if exists("b:current_syntax")
+ finish
+endif
+
+" Todo
+syn keyword thriftTodo TODO todo FIXME fixme XXX xxx contained
+
+" Comments
+syn match thriftComment "#.*" contains=thriftTodo
+syn region thriftComment start="/\*" end="\*/" contains=thriftTodo
+syn match thriftComment "//.\{-}\(?>\|$\)\@="
+
+" String
+syn region thriftStringDouble matchgroup=None start=+"+ end=+"+
+
+" Number
+syn match thriftNumber "-\=\<\d\+\>" contained
+
+" Keywords
+syn keyword thriftKeyword namespace
+syn keyword thriftKeyword xsd_all xsd_optional xsd_nillable xsd_attrs
+syn keyword thriftKeyword include cpp_include cpp_type const optional required
+syn keyword thriftBasicTypes void bool byte i8 i16 i32 i64 double string binary
+syn keyword thriftStructure map list set struct typedef exception enum throws union
+
+" Special
+syn match thriftSpecial "\d\+:"
+
+" Structure
+syn keyword thriftStructure service oneway extends
+"async" { return tok_async; }
+"exception" { return tok_xception; }
+"extends" { return tok_extends; }
+"throws" { return tok_throws; }
+"service" { return tok_service; }
+"enum" { return tok_enum; }
+"const" { return tok_const; }
+
+hi def link thriftComment Comment
+hi def link thriftKeyword Special
+hi def link thriftBasicTypes Type
+hi def link thriftStructure StorageClass
+hi def link thriftTodo Todo
+hi def link thriftString String
+hi def link thriftNumber Number
+hi def link thriftSpecial Special
+hi def link thriftStructure Structure
+
+let b:current_syntax = "thrift"
diff --git a/runtime/syntax/tmux.vim b/runtime/syntax/tmux.vim
index 9766ed55d7..4b8454dd51 100644
--- a/runtime/syntax/tmux.vim
+++ b/runtime/syntax/tmux.vim
@@ -1,5 +1,5 @@
" Language: tmux(1) configuration file
-" Version: 3.4 (git-608d1134)
+" Version: 3.4 (git-3d8ead8a)
" URL: https://github.com/ericpruitt/tmux.vim/
" Maintainer: Eric Pruitt <eric.pruitt@gmail.com>
" License: 2-Clause BSD (http://opensource.org/licenses/BSD-2-Clause)
@@ -28,7 +28,7 @@ syn match tmuxKey /\(C-\|M-\|\^\)\+\S\+/ display
syn match tmuxNumber /\<\d\+\>/ display
syn match tmuxFlags /\s-\a\+/ display
syn match tmuxVariableExpansion /\$\({[A-Za-z_]\w*}\|[A-Za-z_]\w*\)/ display
-syn match tmuxControl /\(^\|\s\)%\(if\|elif\|else\|endif\)\($\|\s\)/ display
+syn match tmuxControl /\(^\|\s\)%\(if\|elif\|else\|endif\|hidden\)\($\|\s\)/ display
syn match tmuxEscape /\\\(u\x\{4\}\|U\x\{8\}\|\o\{3\}\|[\\ernt$]\)/ display
" Missing closing bracket.
@@ -37,7 +37,7 @@ syn match tmuxInvalidVariableExpansion /\${[^}]*$/ display
syn match tmuxInvalidVariableExpansion /\${[^A-Za-z_][^}]*}/ display
syn match tmuxInvalidVariableExpansion /\$[^A-Za-z_{ \t]/ display
" Contains invalid character.
-syn match tmuxInvalidVariableExpansion /\${[^}]*[^A-Za-z0-9_][^}]*}/ display
+syn match tmuxInvalidVariableExpansion /\${[^}]*[^A-Za-z0-9_}][^}]*}/ display
syn region tmuxComment start=/#/ skip=/\\\@<!\\$/ end=/$/ contains=tmuxTodo,@Spell
@@ -99,11 +99,11 @@ syn keyword tmuxOptions
\ after-set-environment after-set-hook after-set-option after-show-environment
\ after-show-messages after-show-options after-split-window after-unbind-key
\ aggressive-resize alert-activity alert-bell alert-silence allow-passthrough
-\ allow-rename alternate-screen assume-paste-time automatic-rename
-\ automatic-rename-format backspace base-index bell-action buffer-limit
-\ client-active client-attached client-detached client-focus-in
+\ allow-rename allow-set-title alternate-screen assume-paste-time
+\ automatic-rename automatic-rename-format backspace base-index bell-action
+\ buffer-limit client-active client-attached client-detached client-focus-in
\ client-focus-out client-resized client-session-changed clock-mode-color
-\ clock-mode-colour clock-mode-style command-alias copy-command
+\ clock-mode-colour clock-mode-style command-alias command-error copy-command
\ copy-mode-current-match-style copy-mode-mark-style copy-mode-match-style
\ cursor-color cursor-colour cursor-style default-command default-shell
\ default-size default-terminal destroy-unattached detach-on-destroy
diff --git a/runtime/syntax/tsv.vim b/runtime/syntax/tsv.vim
new file mode 100644
index 0000000000..f0dd9f717d
--- /dev/null
+++ b/runtime/syntax/tsv.vim
@@ -0,0 +1,12 @@
+" Vim filetype plugin file
+" Language: Tab separated values (TSV)
+" Last Change: 2024 Jul 16
+" This runtime file is looking for a new maintainer.
+
+if exists('b:current_syntax')
+ finish
+endif
+
+let b:csv_delimiter = '\t' " enforce tab delimiter
+runtime! syntax/csv.vim
+let b:current_syntax = 'tsv'
diff --git a/runtime/syntax/typescript.vim b/runtime/syntax/typescript.vim
index 5389c21497..03520fd56a 100644
--- a/runtime/syntax/typescript.vim
+++ b/runtime/syntax/typescript.vim
@@ -1,7 +1,7 @@
" Vim syntax file
" Language: TypeScript
" Maintainer: Herrington Darkholme
-" Last Change: 2023 Aug 13
+" Last Change: 2024 May 24
" Based On: Herrington Darkholme's yats.vim
" Changes: Go to https://github.com/HerringtonDarkholme/yats.vim for recent changes.
" Origin: https://github.com/othree/yajs
diff --git a/runtime/syntax/typescriptreact.vim b/runtime/syntax/typescriptreact.vim
index 1c510459f5..061ec4d81e 100644
--- a/runtime/syntax/typescriptreact.vim
+++ b/runtime/syntax/typescriptreact.vim
@@ -1,7 +1,7 @@
" Vim syntax file
" Language: TypeScript with React (JSX)
" Maintainer: The Vim Project <https://github.com/vim/vim>
-" Last Change: 2023 Aug 13
+" Last Change: 2024 May 26
" Based On: Herrington Darkholme's yats.vim
" Changes: See https://github.com/HerringtonDarkholme/yats.vim
" Credits: See yats.vim on github
@@ -118,13 +118,14 @@ syntax match tsxEqual +=+ display contained
" <tag id="sample">
" s~~~~~~e
-syntax region tsxString contained start=+"+ end=+"+ contains=tsxEntity,@Spell display
+syntax region tsxString contained start=+"+ skip=+\\"+ end=+"+ contains=tsxEntity,@Spell display
+syntax region tsxString contained start=+'+ skip=+\\'+ end=+'+ contains=tsxEntity,@Spell display
" <tag key={this.props.key}>
" s~~~~~~~~~~~~~~e
syntax region tsxEscJs
\ contained
- \ contains=@typescriptValue,@tsxComment
+ \ contains=@typescriptValue,@tsxComment,typescriptObjectSpread
\ matchgroup=typescriptBraces
\ start=+{+
\ end=+}+
diff --git a/runtime/syntax/typst.vim b/runtime/syntax/typst.vim
new file mode 100644
index 0000000000..82fdadb3d5
--- /dev/null
+++ b/runtime/syntax/typst.vim
@@ -0,0 +1,472 @@
+" Vim syntax file
+" Language: Typst
+" Maintainer: Gregory Anders <greg@gpanders.com>
+" Last Change: 2024-07-14
+" Based on: https://github.com/kaarmu/typst.vim
+
+if exists('b:current_syntax')
+ finish
+endif
+
+syntax sync fromstart
+syntax spell toplevel
+
+" Common {{{1
+syntax cluster typstCommon
+ \ contains=@typstComment
+
+" Common > Comment {{{2
+syntax cluster typstComment
+ \ contains=typstCommentBlock,typstCommentLine
+syntax match typstCommentBlock
+ \ #/\*\%(\_.\{-}\)\*/#
+ \ contains=typstCommentTodo,@Spell
+syntax match typstCommentLine
+ \ #//.*#
+ \ contains=typstCommentTodo,@Spell
+syntax keyword typstCommentTodo
+ \ contained
+ \ TODO FIXME XXX TBD
+
+
+" Code {{{1
+syntax cluster typstCode
+ \ contains=@typstCommon
+ \ ,@typstCodeKeywords
+ \ ,@typstCodeConstants
+ \ ,@typstCodeIdentifiers
+ \ ,@typstCodeFunctions
+ \ ,@typstCodeParens
+
+" Code > Keywords {{{2
+syntax cluster typstCodeKeywords
+ \ contains=typstCodeConditional
+ \ ,typstCodeRepeat
+ \ ,typstCodeKeyword
+ \ ,typstCodeStatement
+syntax keyword typstCodeConditional
+ \ contained
+ \ if else
+syntax keyword typstCodeRepeat
+ \ contained
+ \ while for
+syntax keyword typstCodeKeyword
+ \ contained
+ \ not in and or return
+syntax region typstCodeStatement
+ \ contained
+ \ matchgroup=typstCodeStatementWord start=/\v(let|set|import|include)>/
+ \ matchgroup=Noise end=/\v%(;|$)/
+ \ contains=@typstCode
+syntax region typstCodeStatement
+ \ contained
+ \ matchgroup=typstCodeStatementWord start=/show/
+ \ matchgroup=Noise end=/\v%(:|$)/ keepend
+ \ contains=@typstCode
+ \ skipwhite nextgroup=@typstCode,typstCodeShowRocket
+syntax match typstCodeShowRocket
+ \ contained
+ \ /.*=>/
+ \ contains=@typstCode
+ \ skipwhite nextgroup=@typstCode
+
+" Code > Identifiers {{{2
+syntax cluster typstCodeIdentifiers
+ \ contains=typstCodeIdentifier
+ \ ,typstCodeFieldAccess
+syntax match typstCodeIdentifier
+ \ contained
+ \ /\v\w\k*>(<%(let|set|show|import|include))@<![\.\[\(]@!/
+syntax match typstCodeFieldAccess
+ \ contained
+ \ /\v\w\k*>(<%(let|set|show|import|include))@<!\.[\[\(]@!/
+ \ nextgroup=typstCodeFieldAccess,typstCodeFunction
+
+" Code > Functions {{{2
+syntax cluster typstCodeFunctions
+ \ contains=typstCodeFunction
+syntax match typstCodeFunction
+ \ contained
+ \ /\v\w\k*>(<%(let|set|show|import|include))@<![\(\[]@=/
+ \ nextgroup=typstCodeFunctionArgument
+syntax match typstCodeFunctionArgument
+ \ contained
+ \ /\v%(%(\(.{-}\)|\[.{-}\]|\{.{-}\}))*/ transparent
+ \ contains=@typstCode
+
+" Code > Constants {{{2
+syntax cluster typstCodeConstants
+ \ contains=typstCodeConstant
+ \ ,typstCodeNumberInteger
+ \ ,typstCodeNumberFloat
+ \ ,typstCodeNumberLength
+ \ ,typstCodeNumberAngle
+ \ ,typstCodeNumberRatio
+ \ ,typstCodeNumberFraction
+ \ ,typstCodeString
+ \ ,typstCodeLabel
+syntax match typstCodeConstant
+ \ contained
+ \ /\v<%(none|auto|true|false)-@!>/
+syntax match typstCodeNumberInteger
+ \ contained
+ \ /\v<\d+>/
+
+syntax match typstCodeNumberFloat
+ \ contained
+ \ /\v<\d+\.\d*>/
+syntax match typstCodeNumberLength
+ \ contained
+ \ /\v<\d+(\.\d*)?(pt|mm|cm|in|em)>/
+syntax match typstCodeNumberAngle
+ \ contained
+ \ /\v<\d+(\.\d*)?(deg|rad)>/
+syntax match typstCodeNumberRatio
+ \ contained
+ \ /\v<\d+(\.\d*)?\%/
+syntax match typstCodeNumberFraction
+ \ contained
+ \ /\v<\d+(\.\d*)?fr>/
+syntax region typstCodeString
+ \ contained
+ \ start=/"/ skip=/\v\\\\|\\"/ end=/"/
+ \ contains=@Spell
+syntax match typstCodeLabel
+ \ contained
+ \ /\v\<\K%(\k*-*)*\>/
+
+" Code > Parens {{{2
+syntax cluster typstCodeParens
+ \ contains=typstCodeParen
+ \ ,typstCodeBrace
+ \ ,typstCodeBracket
+ \ ,typstCodeDollar
+ \ ,typstMarkupRawInline
+ \ ,typstMarkupRawBlock
+syntax region typstCodeParen
+ \ contained
+ \ matchgroup=Noise start=/(/ end=/)/
+ \ contains=@typstCode
+syntax region typstCodeBrace
+ \ contained
+ \ matchgroup=Noise start=/{/ end=/}/
+ \ contains=@typstCode
+syntax region typstCodeBracket
+ \ contained
+ \ matchgroup=Noise start=/\[/ end=/\]/
+ \ contains=@typstMarkup
+syntax region typstCodeDollar
+ \ contained
+ \ matchgroup=Number start=/\\\@<!\$/ end=/\\\@<!\$/
+ \ contains=@typstMath
+
+
+" Hashtag {{{1
+syntax cluster typstHashtag
+ \ contains=@typstHashtagKeywords
+ \ ,@typstHashtagConstants
+ \ ,@typstHashtagIdentifiers
+ \ ,@typstHashtagFunctions
+ \ ,@typstHashtagParens
+
+" Hashtag > Keywords {{{2
+syntax cluster typstHashtagKeywords
+ \ contains=typstHashtagConditional
+ \ ,typstHashtagRepeat
+ \ ,typstHashtagKeywords
+ \ ,typstHashtagStatement
+
+" syntax match typstHashtagControlFlowError
+" \ /\v#%(if|while|for)>-@!.{-}$\_.{-}%(\{|\[|\()/
+syntax match typstHashtagControlFlow
+ \ /\v#%(if|while|for)>.{-}\ze%(\{|\[|\()/
+ \ contains=typstHashtagConditional,typstHashtagRepeat
+ \ nextgroup=@typstCode
+syntax region typstHashtagConditional
+ \ contained
+ \ start=/\v#if>/ end=/\v\ze(\{|\[)/
+ \ contains=@typstCode
+syntax region typstHashtagRepeat
+ \ contained
+ \ start=/\v#(while|for)>/ end=/\v\ze(\{|\[)/
+ \ contains=@typstCode
+syntax match typstHashtagKeyword
+ \ /\v#(return)>/
+ \ skipwhite nextgroup=@typstCode
+syntax region typstHashtagStatement
+ \ matchgroup=typstHashtagStatementWord start=/\v#(let|set|import|include)>/
+ \ matchgroup=Noise end=/\v%(;|$)/
+ \ contains=@typstCode
+syntax region typstHashtagStatement
+ \ matchgroup=typstHashtagStatementWord start=/#show/
+ \ matchgroup=Noise end=/\v%(:|$)/ keepend
+ \ contains=@typstCode
+ \ skipwhite nextgroup=@typstCode,typstCodeShowRocket
+
+" Hashtag > Constants {{{2
+syntax cluster typstHashtagConstants
+ \ contains=typstHashtagConstant
+syntax match typstHashtagConstant
+ \ /\v#(none|auto|true|false)>/
+
+" Hashtag > Identifiers {{{2
+syntax cluster typstHashtagIdentifiers
+ \ contains=typstHashtagIdentifier
+ \ ,typstHashtagFieldAccess
+syntax match typstHashtagIdentifier
+ \ /\v#\w\k*>(<%(let|set|show|import|include))@<![\.\[\(]@!/
+syntax match typstHashtagFieldAccess
+ \ /\v#\w\k*>(<%(let|set|show|import|include))@<!\.[\[\(]@!/
+ \ nextgroup=typstCodeFieldAccess,typstCodeFunction
+
+" Hashtag > Functions {{{2
+syntax cluster typstHashtagFunctions
+ \ contains=typstHashtagFunction
+syntax match typstHashtagFunction
+ \ /\v#\w\k*>(<%(let|set|show|import|include))@<![\(\[]@=/
+ \ nextgroup=typstCodeFunctionArgument
+
+" Hashtag > Parens {{{2
+syntax cluster typstHashtagParens
+ \ contains=typstHashtagParen
+ \ ,typstHashtagBrace
+ \ ,typstHashtagBracket
+ \ ,typstHashtagDollar
+syntax region typstHashtagParen
+ \ matchgroup=Noise start=/#(/ end=/)/
+ \ contains=@typstCode
+syntax region typstHashtagBrace
+ \ matchgroup=Noise start=/#{/ end=/}/
+ \ contains=@typstCode
+syntax region typstHashtagBracket
+ \ matchgroup=Noise start=/#\[/ end=/\]/
+ \ contains=@typstMarkup
+syntax region typstHashtagDollar
+ \ matchgroup=Noise start=/#\$/ end=/\\\@<!\$/
+ \ contains=@typstMath
+
+
+" Markup {{{1
+syntax cluster typstMarkup
+ \ contains=@typstCommon
+ \ ,@Spell
+ \ ,@typstHashtag
+ \ ,@typstMarkupText
+ \ ,@typstMarkupParens
+
+" Markup > Text {{{2
+syntax cluster typstMarkupText
+ \ contains=typstMarkupRawInline
+ \ ,typstMarkupRawBlock
+ \ ,typstMarkupLabel
+ \ ,typstMarkupReference
+ \ ,typstMarkupUrl
+ \ ,typstMarkupHeading
+ \ ,typstMarkupBulletList
+ \ ,typstMarkupEnumList
+ \ ,typstMarkupTermList
+ \ ,typstMarkupBold
+ \ ,typstMarkupItalic
+ \ ,typstMarkupLinebreak
+ \ ,typstMarkupNonbreakingSpace
+ \ ,typstMarkupShy
+ \ ,typstMarkupDash
+ \ ,typstMarkupEllipsis
+
+" Raw Text
+syntax match typstMarkupRawInline
+ \ /`.\{-}`/
+syntax region typstMarkupRawBlock
+ \ matchgroup=Macro start=/```\w*/
+ \ matchgroup=Macro end=/```/ keepend
+syntax region typstMarkupCodeBlockTypst
+ \ matchgroup=Macro start=/```typst/
+ \ matchgroup=Macro end=/```/ contains=@typstCode keepend
+ \ concealends
+
+for s:name in get(g:, 'typst_embedded_languages', [])
+ let s:include = ['syntax include'
+ \ ,'@typstEmbedded_'..s:name
+ \ ,'syntax/'..s:name..'.vim']
+ let s:rule = ['syn region'
+ \,s:name
+ \,'matchgroup=Macro'
+ \,'start=/```'..s:name..'\>/ end=/```/'
+ \,'contains=@typstEmbedded_'..s:name
+ \,'keepend'
+ \,'concealends']
+ execute 'silent! ' .. join(s:include, ' ')
+ unlet! b:current_syntax
+ execute join(s:rule, ' ')
+endfor
+
+" Label & Reference
+syntax match typstMarkupLabel
+ \ /\v\<\K%(\k*-*)*\>/
+syntax match typstMarkupReference
+ \ /\v\@\K%(\k*-*)*/
+
+" URL
+syntax match typstMarkupUrl
+ \ #\v\w+://\S*#
+
+" Heading
+syntax match typstMarkupHeading
+ \ /^\s*\zs=\{1,6}\s.*$/
+ \ contains=typstMarkupLabel,@Spell
+
+" Lists
+syntax match typstMarkupBulletList
+ \ /\v^\s*-\s+/
+syntax match typstMarkupEnumList
+ \ /\v^\s*(\+|\d+\.)\s+/
+syntax region typstMarkupTermList
+ \ oneline start=/\v^\s*\/\s/ end=/:/
+ \ contains=@typstMarkup
+
+" Bold & Italic
+syntax match typstMarkupBold
+ \ /\v(\w|\\)@1<!\*\S@=.{-}(\n.{-1,})*\S@1<=\\@1<!\*/
+ \ contains=typstMarkupBoldRegion
+syntax match typstMarkupItalic
+ \ /\v(\w|\\)@1<!_\S@=.{-}(\n.{-1,})*\S@1<=\\@1<!_/
+ \ contains=typstMarkupItalicRegion
+syntax match typstMarkupBoldItalic
+ \ contained
+ \ /\v(\w|\\)@1<![_\*]\S@=.{-}(\n.{-1,})*\S@1<=\\@1<!\2/
+ \ contains=typstMarkupBoldRegion,typstMarkupItalicRegion
+syntax region typstMarkupBoldRegion
+ \ contained
+ \ transparent matchgroup=typstMarkupBold
+ \ start=/\(^\|[^0-9a-zA-Z]\)\@<=\*/ end=/\*\($\|[^0-9a-zA-Z]\)\@=/
+ \ concealends contains=typstMarkupBoldItalic,typstMarkupLabel,@Spell
+syntax region typstMarkupItalicRegion
+ \ contained
+ \ transparent matchgroup=typstMarkupItalic
+ \ start=/\(^\|[^0-9a-zA-Z]\)\@<=_/ end=/_\($\|[^0-9a-zA-Z]\)\@=/
+ \ concealends contains=typstMarkupBoldItalic,typstMarkupLabel,@Spell
+
+" Linebreak & Special Whitespace
+syntax match typstMarkupLinebreak
+ \ /\\\\/
+syntax match typstMarkupNonbreakingSpace
+ \ /\~/
+syntax match typstMarkupShy
+ \ /-?/
+
+" Special Symbols
+syntax match typstMarkupDash
+ \ /-\{2,3}/
+syntax match typstMarkupEllipsis
+ \ /\.\.\./
+
+" Markup > Parens {{{2
+syntax cluster typstMarkupParens
+ \ contains=typstMarkupBracket
+ \ ,typstMarkupDollar
+syntax region typstMarkupBracket
+ \ matchgroup=Noise start=/\[/ end=/\]/
+ \ contains=@typstMarkup
+syntax region typstMarkupDollar
+ \ matchgroup=Special start=/\\\@<!\$/ end=/\\\@<!\$/
+ \ contains=@typstMath
+
+
+" Math {{{1
+syntax cluster typstMath
+ \ contains=@typstCommon
+ \ ,@typstHashtag
+ \ ,typstMathIdentifier
+ \ ,typstMathFunction
+ \ ,typstMathNumber
+ \ ,typstMathSymbol
+ \ ,typstMathBold
+ \ ,typstMathScripts
+ \ ,typstMathQuote
+
+syntax match typstMathIdentifier
+ \ /\a\a\+/
+ \ contained
+syntax match typstMathFunction
+ \ /\a\a\+\ze(/
+ \ contained
+syntax match typstMathNumber
+ \ /\<\d\+\>/
+ \ contained
+syntax region typstMathQuote
+ \ matchgroup=String start=/"/ skip=/\\"/ end=/"/
+ \ contained
+
+" Math > Linked groups {{{2
+highlight default link typstMathIdentifier Identifier
+highlight default link typstMathFunction Statement
+highlight default link typstMathNumber Number
+highlight default link typstMathSymbol Statement
+
+" Highlighting {{{1
+
+" Highlighting > Linked groups {{{2
+highlight default link typstCommentBlock Comment
+highlight default link typstCommentLine Comment
+highlight default link typstCommentTodo Todo
+highlight default link typstCodeConditional Conditional
+highlight default link typstCodeRepeat Repeat
+highlight default link typstCodeKeyword Keyword
+highlight default link typstCodeConstant Constant
+highlight default link typstCodeNumberInteger Number
+highlight default link typstCodeNumberFloat Number
+highlight default link typstCodeNumberLength Number
+highlight default link typstCodeNumberAngle Number
+highlight default link typstCodeNumberRatio Number
+highlight default link typstCodeNumberFraction Number
+highlight default link typstCodeString String
+highlight default link typstCodeLabel Structure
+highlight default link typstCodeStatementWord Statement
+highlight default link typstCodeIdentifier Identifier
+highlight default link typstCodeFieldAccess Identifier
+highlight default link typstCodeFunction Function
+highlight default link typstCodeParen Noise
+highlight default link typstCodeBrace Noise
+highlight default link typstCodeBracket Noise
+highlight default link typstCodeDollar Noise
+" highlight default link typstHashtagControlFlowError Error
+highlight default link typstHashtagConditional Conditional
+highlight default link typstHashtagRepeat Repeat
+highlight default link typstHashtagKeyword Keyword
+highlight default link typstHashtagConstant Constant
+highlight default link typstHashtagStatementWord Statement
+highlight default link typstHashtagIdentifier Identifier
+highlight default link typstHashtagFieldAccess Identifier
+highlight default link typstHashtagFunction Function
+highlight default link typstHashtagParen Noise
+highlight default link typstHashtagBrace Noise
+highlight default link typstHashtagBracket Noise
+highlight default link typstHashtagDollar Noise
+highlight default link typstMarkupRawInline Macro
+highlight default link typstMarkupRawBlock Macro
+highlight default link typstMarkupLabel Structure
+highlight default link typstMarkupReference Structure
+highlight default link typstMarkupBulletList Structure
+" highlight default link typstMarkupItalicError Error
+" highlight default link typstMarkupBoldError Error
+highlight default link typstMarkupEnumList Structure
+highlight default link typstMarkupLinebreak Structure
+highlight default link typstMarkupNonbreakingSpace Structure
+highlight default link typstMarkupShy Structure
+highlight default link typstMarkupDash Structure
+highlight default link typstMarkupEllipsis Structure
+highlight default link typstMarkupTermList Structure
+highlight default link typstMarkupDollar Noise
+
+" Highlighting > Custom Styling {{{2
+highlight! Conceal ctermfg=NONE ctermbg=NONE guifg=NONE guibg=NONE
+
+highlight default typstMarkupHeading term=underline,bold cterm=underline,bold gui=underline,bold
+highlight default typstMarkupUrl term=underline cterm=underline gui=underline
+highlight default typstMarkupBold term=bold cterm=bold gui=bold
+highlight default typstMarkupItalic term=italic cterm=italic gui=italic
+highlight default typstMarkupBoldItalic term=bold,italic cterm=bold,italic gui=bold,italic
+
+let b:current_syntax = 'typst'
+
+" }}}1
diff --git a/runtime/syntax/vim.vim b/runtime/syntax/vim.vim
index 4fc640bab1..9073c6e7bf 100644
--- a/runtime/syntax/vim.vim
+++ b/runtime/syntax/vim.vim
@@ -36,8 +36,8 @@ syn keyword vimOnlyOption contained nobiosk nobioskey noconsk noconskey nocp noc
" Invertible setting variants
syn keyword vimOnlyOption contained invbiosk invbioskey invconsk invconskey invcp invcompatible invguipty invmacatsui invsn invshortname invta invtextauto invtx invtextmode invtf invttyfast invtbi invttybuiltin invwiv invweirdinvert
" termcap codes (which can also be set) {{{2
-" GEN_SYN_VIM: vimOption term output code, START_STR='syn keyword vimOption contained', END_STR=''
-syn keyword vimOption contained t_AB t_AF t_AU t_AL t_al t_bc t_BE t_BD t_cd t_ce t_Ce t_CF t_cl t_cm t_Co t_CS t_Cs t_cs t_CV t_da t_db t_DL t_dl t_ds t_Ds t_EC t_EI t_fs t_fd t_fe t_GP t_IE t_IS t_ke t_ks t_le t_mb t_md t_me t_mr t_ms t_nd t_op t_RF t_RB t_RC t_RI t_Ri t_RK t_RS t_RT t_RV t_Sb t_SC t_se t_Sf t_SH t_SI t_Si t_so t_SR t_sr t_ST t_Te t_te t_TE t_ti t_TI t_Ts t_ts t_u7 t_ue t_us t_Us t_ut t_vb t_ve t_vi t_VS t_vs t_WP t_WS t_XM t_xn t_xs t_ZH t_ZR t_8f t_8b t_8u
+" GEN_SYN_VIM: vimOption term output code, START_STR='syn keyword vimOption contained', END_STR='skipwhite nextgroup=vimSetEqual,vimSetMod'
+syn keyword vimOption contained t_AB t_AF t_AU t_AL t_al t_bc t_BE t_BD t_cd t_ce t_Ce t_CF t_cl t_cm t_Co t_CS t_Cs t_cs t_CV t_da t_db t_DL t_dl t_ds t_Ds t_EC t_EI t_fs t_fd t_fe t_GP t_IE t_IS t_ke t_ks t_le t_mb t_md t_me t_mr t_ms t_nd t_op t_RF t_RB t_RC t_RI t_Ri t_RK t_RS t_RT t_RV t_Sb t_SC t_se t_Sf t_SH t_SI t_Si t_so t_SR t_sr t_ST t_Te t_te t_TE t_ti t_TI t_Ts t_ts t_u7 t_ue t_us t_Us t_ut t_vb t_ve t_vi t_VS t_vs t_WP t_WS t_XM t_xn t_xs t_ZH t_ZR t_8f t_8b t_8u t_xo skipwhite nextgroup=vimSetEqual,vimSetMod
" term key codes
syn keyword vimOption contained t_F1 t_F2 t_F3 t_F4 t_F5 t_F6 t_F7 t_F8 t_F9 t_k1 t_K1 t_k2 t_k3 t_K3 t_k4 t_K4 t_k5 t_K5 t_k6 t_K6 t_k7 t_K7 t_k8 t_K8 t_k9 t_K9 t_KA t_kb t_kB t_KB t_KC t_kd t_kD t_KD t_KE t_KF t_KG t_kh t_KH t_kI t_KI t_KJ t_KK t_kl t_KL t_kN t_kP t_kr t_ku
syn match vimTermOption contained "t_%1"
@@ -60,15 +60,20 @@ syn case ignore
syn keyword vimGroup contained Comment Constant String Character Number Boolean Float Identifier Function Statement Conditional Repeat Label Operator Keyword Exception PreProc Include Define Macro PreCondit Type StorageClass Structure Typedef Special SpecialChar Tag Delimiter SpecialComment Debug Underlined Ignore Error Todo
" Default highlighting groups {{{2
-syn keyword vimHLGroup contained ErrorMsg IncSearch ModeMsg NonText StatusLine StatusLineNC EndOfBuffer VertSplit DiffText PmenuSbar TabLineSel TabLineFill Cursor lCursor QuickFixLine CursorLineSign CursorLineFold CurSearch PmenuKind PmenuKindSel PmenuExtra PmenuExtraSel Normal Directory LineNr CursorLineNr MoreMsg Question Search SpellBad SpellCap SpellRare SpellLocal PmenuThumb Pmenu PmenuSel SpecialKey Title WarningMsg WildMenu Folded FoldColumn SignColumn Visual DiffAdd DiffChange DiffDelete TabLine CursorColumn CursorLine ColorColumn Conceal MatchParen CursorIM LineNrAbove LineNrBelow
-syn keyword vimOnlyHLGroup contained Menu Scrollbar StatusLineTerm StatusLineTermNC ToolbarButton ToolbarLine Tooltip VisualNOS
+syn keyword vimHLGroup contained ErrorMsg IncSearch ModeMsg NonText StatusLine StatusLineNC EndOfBuffer VertSplit DiffText PmenuSbar TabLineSel TabLineFill Cursor lCursor QuickFixLine CursorLineSign CursorLineFold CurSearch PmenuKind PmenuKindSel PmenuMatch PmenuMatchSel PmenuExtra PmenuExtraSel Normal Directory LineNr CursorLineNr MoreMsg Question Search SpellBad SpellCap SpellRare SpellLocal PmenuThumb Pmenu PmenuSel SpecialKey Title WarningMsg WildMenu Folded FoldColumn SignColumn Visual DiffAdd DiffChange DiffDelete TabLine CursorColumn CursorLine ColorColumn MatchParen StatusLineTerm StatusLineTermNC CursorIM LineNrAbove LineNrBelow
+syn match vimHLGroup contained "\<Conceal\>"
+syn keyword vimOnlyHLGroup contained Menu Scrollbar ToolbarButton ToolbarLine Tooltip VisualNOS
syn keyword nvimHLGroup contained FloatBorder FloatFooter FloatTitle MsgSeparator NormalFloat NormalNC Substitute TermCursor TermCursorNC VisualNC Whitespace WinBar WinBarNC WinSeparator
"}}}2
syn case match
" Special Vim Highlighting (not automatic) {{{1
-" Set up folding commands for this syntax highlighting file {{{2
+" Set up commands for this syntax highlighting file {{{2
+
+com! -nargs=* Vim9 execute <q-args> s:vim9script ? "" : "contained"
+com! -nargs=* VimL execute <q-args> s:vim9script ? "contained" : ""
+
if exists("g:vimsyn_folding") && g:vimsyn_folding =~# '[afhHlmpPrt]'
if g:vimsyn_folding =~# 'a'
com! -nargs=* VimFolda <args> fold
@@ -151,6 +156,14 @@ else
let s:vimsyn_maxlines= 60
endif
+" Nulls {{{2
+" =====
+Vim9 syn keyword vim9Null null null_blob null_channel null_class null_dict null_function null_job null_list null_object null_partial null_string
+
+" Booleans {{{2
+" ========
+Vim9 syn keyword vim9Boolean true false
+
" Numbers {{{2
" =======
syn case ignore
@@ -164,9 +177,11 @@ syn match vimNumber '\%(^\|\A\)\zs#\x\{6}' skipwhite nextgroup=vimGlobal,vimSub
syn case match
" All vimCommands are contained by vimIsCommand. {{{2
-syn cluster vimCmdList contains=vimAbb,vimAddress,vimAutoCmd,vimAugroup,vimBehave,vimDef,@vimEcho,vimEnddef,vimEndfunction,vimExecute,vimIsCommand,vimExtCmd,vimFor,vimFunction,vimGlobal,vimHighlight,vimLet,vimMap,vimMark,vimNotFunc,vimNorm,vimSet,vimSyntax,vimUnlet,vimUnmap,vimUserCmd,vimMenu,vimMenutranslate
+syn cluster vimCmdList contains=vimAbb,vimAddress,vimAutoCmd,vimAugroup,vimBehave,vimCall,vimCatch,vimConst,vimDef,vimDelcommand,@vimEcho,vimEnddef,vimEndfunction,vimExecute,vimIsCommand,vimExtCmd,vimFor,vimFunction,vimFuncFold,vimGlobal,vimHighlight,vimLet,vimLoadkeymap,vimMap,vimMark,vimMatch,vimNotFunc,vimNorm,vimSet,vimSleep,vimSyntax,vimThrow,vimUnlet,vimUnmap,vimUserCmd,vimMenu,vimMenutranslate,@vim9CmdList
+syn cluster vim9CmdList contains=vim9Const,vim9Final,vim9For,vim9Var
syn match vimCmdSep "[:|]\+" skipwhite nextgroup=@vimCmdList,vimSubst1
syn match vimIsCommand "\<\%(\h\w*\|[23]mat\%[ch]\)\>" contains=vimCommand
+syn match vimBang contained "!"
syn match vimVar contained "\<\h[a-zA-Z0-9#_]*\>"
syn match vimVar "\<[bwglstav]:\h[a-zA-Z0-9#_]*\>"
syn match vimVar "\s\zs&\%([lg]:\)\=\a\+\>"
@@ -175,7 +190,8 @@ syn match vimVar "\s\zs&t_k;"
syn match vimFBVar contained "\<[bwglstav]:\h[a-zA-Z0-9#_]*\>"
syn keyword vimCommand contained in
-syn cluster vimExprList contains=vimEnvvar,vimFunc,vimFuncVar,vimNumber,vimOper,vimOperParen,vimLetRegister,vimString,vimVar
+syn cluster vimExprList contains=vimEnvvar,vimFunc,vimNumber,vimOper,vimOperParen,vimLetRegister,vimString,vimVar,@vim9ExprList
+syn cluster vim9ExprList contains=vim9Boolean,vim9Null
" Insertions And Appends: insert append {{{2
" (buftype != nofile test avoids having append, change, insert show up in the command window)
@@ -195,6 +211,15 @@ syn match vimBehave "\<be\%[have]\>" nextgroup=vimBehaveBang,vimBehaveModel,vi
syn match vimBehaveBang contained "\a\@1<=!" nextgroup=vimBehaveModel skipwhite
syn keyword vimBehaveModel contained mswin xterm
+" Call {{{2
+" ====
+syn match vimCall "\<call\=\>" skipwhite nextgroup=vimFunc
+
+" Exception Handling {{{2
+syn keyword vimThrow th[row] skipwhite nextgroup=@vimExprList
+syn keyword vimCatch cat[ch] skipwhite nextgroup=vimCatchPattern
+syn region vimCatchPattern contained matchgroup=Delimiter start="\z([!#$%&'()*+,-./:;<=>?@[\]^_`{}~]\)" skip="\\\\\|\\\z1" end="\z1" contains=@vimSubstList oneline
+
" Filetypes {{{2
" =========
syn match vimFiletype "\<filet\%[ype]\(\s\+\I\i*\)*" skipwhite contains=vimFTCmd,vimFTOption,vimFTError
@@ -224,8 +249,8 @@ syn keyword vimAugroupKey contained aug[roup] skipwhite nextgroup=vimAugroupBan
" Operators: {{{2
" =========
-syn cluster vimOperGroup contains=vimEnvvar,vimFunc,vimFuncVar,vimOper,vimOperParen,vimNumber,vimString,vimRegister,@vimContinue,vim9Comment,vimVar
-syn match vimOper "||\|&&\|[-+*/%.!]" skipwhite nextgroup=vimString,vimSpecFile
+syn cluster vimOperGroup contains=vimEnvvar,vimFunc,vimFuncVar,vimOper,vimOperParen,vimNumber,vimString,vimRegister,@vimContinue,vim9Comment,vimVar,vimBoolean,vimNull
+syn match vimOper "||\|&&\|[-+*/%.!]" skipwhite nextgroup=vimString,vimSpecFile
syn match vimOper "\%#=1\(==\|!=\|>=\|<=\|=\~\|!\~\|>\|<\|=\|!\~#\)[?#]\{0,2}" skipwhite nextgroup=vimString,vimSpecFile
syn match vimOper "\(\<is\|\<isnot\)[?#]\{0,2}\>" skipwhite nextgroup=vimString,vimSpecFile
syn region vimOperParen matchgroup=vimParenSep start="(" end=")" contains=@vimOperGroup
@@ -240,8 +265,8 @@ syn cluster vimFuncList contains=vimFuncBang,vimFunctionError,vimFuncKey,vimFunc
syn cluster vimDefList contains=vimFuncBang,vimFunctionError,vimDefKey,vimFuncSID,Tag
syn cluster vimFuncBodyCommon contains=@vimCmdList,vimCmplxRepeat,vimContinue,vimCtrlChar,vimDef,vimEnvvar,vimFBVar,vimFunc,vimFunction,vimLetHereDoc,vimNotation,vimNotFunc,vimNumber,vimOper,vimOperParen,vimRegister,vimSearch,vimSpecFile,vimString,vimSubst,vimFuncFold
-syn cluster vimFuncBodyList contains=@vimFuncBodyCommon,vimComment,vimLineComment,vimFuncVar,vimInsert
-syn cluster vimDefBodyList contains=@vimFuncBodyCommon,vim9Comment,vim9LineComment
+syn cluster vimFuncBodyList contains=@vimFuncBodyCommon,vimComment,vimLineComment,vimFuncVar,vimInsert,vimConst,vimLet
+syn cluster vimDefBodyList contains=@vimFuncBodyCommon,vim9Comment,vim9LineComment,vim9Const,vim9Final,vim9Var,vim9Null,vim9Boolean,vim9For
syn region vimFuncPattern contained matchgroup=vimOper start="/" end="$" contains=@vimSubstList
syn match vimFunction "\<fu\%[nction]\>" skipwhite nextgroup=vimCmdSep,vimComment,vimFuncPattern contains=vimFuncKey
@@ -251,8 +276,8 @@ syn match vimFunction "\<fu\%[nction]\>!\=\s*\%(<[sS][iI][dD]>\|[sg]:\)\=\%(\i\|
syn match vimDef "\<def\s\+new\%(\i\|{.\{-1,}}\)\+" contains=@vimDefList nextgroup=vimDefParams
syn match vimDef "\<def\>!\=\s*\%(<[sS][iI][dD]>\|[sg]:\)\=\%(\i\|[#.]\|{.\{-1,}}\)\+" contains=@vimDefList nextgroup=vimDefParams
-syn match vimFuncComment contained +".*+ skipwhite skipnl nextgroup=vimFuncBody,vimEndfunction
-syn match vimDefComment contained "#.*" skipwhite skipnl nextgroup=vimDefBody,vimEnddef
+syn match vimFuncComment contained +".*+ skipwhite skipempty nextgroup=vimFuncBody,vimEndfunction
+syn match vimDefComment contained "#.*" skipwhite skipempty nextgroup=vimDefBody,vimEnddef
syn match vimFuncBang contained "!"
syn match vimFuncSID contained "\c<sid>"
@@ -260,24 +285,24 @@ syn match vimFuncSID contained "\<[sg]:"
syn keyword vimFuncKey contained fu[nction]
syn keyword vimDefKey contained def
-syn region vimFuncParams contained matchgroup=Delimiter start="(" skip=+\n\s*\\\|\n\s*"\\ + end=")" skipwhite skipnl nextgroup=vimFuncBody,vimFuncComment,vimEndfunction,vimFuncMod contains=vimFuncParam,@vimContinue
-syn region vimDefParams contained matchgroup=Delimiter start="(" end=")" skipwhite skipnl nextgroup=vimDefBody,vimDefComment,vimEnddef,vimReturnType contains=vimDefParam,vim9Comment
+syn region vimFuncParams contained matchgroup=Delimiter start="(" skip=+\n\s*\\\|\n\s*"\\ + end=")" skipwhite skipempty nextgroup=vimFuncBody,vimFuncComment,vimEndfunction,vimFuncMod,vim9CommentError contains=vimFuncParam,@vimContinue
+syn region vimDefParams contained matchgroup=Delimiter start="(" end=")" skipwhite skipempty nextgroup=vimDefBody,vimDefComment,vimEnddef,vimReturnType,vimCommentError contains=vimDefParam,vim9Comment,vimFuncParamEquals
syn match vimFuncParam contained "\<\h\w*\>\|\.\.\." skipwhite nextgroup=vimFuncParamEquals
syn match vimDefParam contained "\<\h\w*\>" skipwhite nextgroup=vimParamType,vimFuncParamEquals
-syn match vimFuncParamEquals contained "=" skipwhite nextgroup=@vimExprList
-syn match vimFuncMod contained "\<\%(abort\|closure\|dict\|range\)\>" skipwhite skipnl nextgroup=vimFuncBody,vimFuncComment,vimEndfunction,vimFuncMod
+syn match vimFuncParamEquals contained "=" skipwhite nextgroup=@vimExprList
+syn match vimFuncMod contained "\<\%(abort\|closure\|dict\|range\)\>" skipwhite skipempty nextgroup=vimFuncBody,vimFuncComment,vimEndfunction,vimFuncMod,vim9CommentError
-syn region vimFuncBody contained start="^" matchgroup=vimCommand end="\<endfu\%[nction]\>" contains=@vimFuncBodyList
-syn region vimDefBody contained start="^" matchgroup=vimCommand end="\<enddef\>" contains=@vimDefBodyList
+syn region vimFuncBody contained start="^." matchgroup=vimCmdSep start="|" matchgroup=vimCommand end="\<endfu\%[nction]\>" contains=@vimFuncBodyList skipwhite nextgroup=vimCmdSep,vimComment,vim9CommentError
+syn region vimDefBody contained start="^." matchgroup=vimCmdSep start="|" matchgroup=vimCommand end="\<enddef\>" contains=@vimDefBodyList skipwhite nextgroup=vimCmdSep,vim9Comment,vimCommentError
-syn match vimEndfunction "\<endf\%[unction]\>"
-syn match vimEnddef "\<enddef\>"
+syn match vimEndfunction "\<endf\%[unction]\>" skipwhite nextgroup=vimCmdSep,vimComment,vim9CommentError
+syn match vimEnddef "\<enddef\>" skipwhite nextgroup=vimCmdSep,vim9Comment,vimCommentError
if exists("g:vimsyn_folding") && g:vimsyn_folding =~# 'f'
- syn region vimFuncFold start="^\s*:\=\s*fu\%[nction]\>!\=\s*\%(<[sS][iI][dD]>\|[sg]:\)\=\%(\i\|[#.]\|{.\{-1,}}\)\+\s*(" end="^\s*:\=\s*endf\%[unction]\>" contains=vimFunction fold keepend extend transparent
- syn region vimFuncFold start="^\s*:\=\s*def\>!\=\s*\%(<[sS][iI][dD]>\|[sg]:\)\=\%(\i\|[#.]\)\+(" end="^\s*:\=\s*enddef\>" contains=vimDef fold keepend extend transparent
- syn region vimFuncFold start="^\s*:\=\s*def\s\+new\i\+(" end="^\s*:\=\s*enddef\>" contains=vimDef fold keepend extend transparent
+ syn region vimFuncFold start="\<fu\%[nction]\>!\=\s*\%(<[sS][iI][dD]>\|[sg]:\)\=\%(\i\|[#.]\|{.\{-1,}}\)\+\s*(" end="\<endf\%[unction]\>" contains=vimFunction fold keepend extend transparent
+ syn region vimFuncFold start="\<def\>!\=\s*\%(<[sS][iI][dD]>\|[sg]:\)\=\%(\i\|[#.]\)\+(" end="\<enddef\>" contains=vimDef fold keepend extend transparent
+ syn region vimFuncFold start="\<def\s\+new\i\+(" end="\<enddef\>" contains=vimDef fold keepend extend transparent
endif
syn match vimFuncVar contained "a:\%(\K\k*\|\d\+\)\>"
@@ -285,9 +310,9 @@ syn match vimFuncBlank contained "\s\+"
" Types: {{{2
" =====
-" vimTypes : new for vim9
-syn region vimReturnType contained start=":\s" end="$" matchgroup=vim9Comment end="\ze#" skipwhite skipnl nextgroup=vimDefBody,vimDefComment,vimEnddef contains=vimTypeSep transparent
-syn match vimParamType contained ":\s\+\a" skipwhite skipnl nextgroup=vimFuncParamEquals contains=vimTypeSep,@vimType
+
+syn region vimReturnType contained start=":\s" end="$" matchgroup=vim9Comment end="\ze[#"]" skipwhite skipempty nextgroup=vimDefBody,vimDefComment,vimEnddef,vimCommentError contains=vimTypeSep transparent
+syn match vimParamType contained ":\s" skipwhite skipnl nextgroup=@vimType contains=vimTypeSep
syn match vimTypeSep contained ":\s\@=" skipwhite nextgroup=@vimType
syn keyword vimType contained any blob bool channel float job number string void
@@ -314,7 +339,7 @@ else
endif
syn cluster vimKeymapLineComment contains=vim9\=KeymapLineComment
-syn region vimKeymap matchgroup=vimCommand start="\<loadk\%[eymap]\>" end="\%$" contains=vimKeymapStart
+syn region vimLoadkeymap matchgroup=vimCommand start="\<loadk\%[eymap]\>" end="\%$" contains=vimKeymapStart
" Special Filenames, Modifiers, Extension Removal: {{{2
" ===============================================
@@ -329,67 +354,73 @@ syn match vimSpecFileMod "\(:[phtre]\)\+" contained
" User-Specified Commands: {{{2
" =======================
syn cluster vimUserCmdList contains=@vimCmdList,vimCmplxRepeat,@vimComment,vimCtrlChar,vimEscapeBrace,vimFunc,vimNotation,vimNumber,vimOper,vimRegister,vimSpecFile,vimString,vimSubst,vimSubstRep,vimSubstRange
-syn keyword vimUserCommand contained com[mand]
-syn match vimUserCmdName contained "\<\u\w*\>" nextgroup=vimUserCmdBlock skipwhite
-syn match vimUserCmd "\<com\%[mand]!\=\>.*$" contains=vimUserAttrb,vimUserAttrbError,vimUserCommand,@vimUserCmdList,vimComFilter,vimCmdBlock,vimUserCmdName
-syn match vimUserAttrbError contained "-\a\+\ze\s"
-syn match vimUserAttrb contained "-nargs=[01*?+]" contains=vimUserAttrbKey,vimOper
-syn match vimUserAttrb contained "-complete=" contains=vimUserAttrbKey,vimOper nextgroup=vimUserAttrbCmplt,vimUserCmdError
-syn match vimUserAttrb contained "-range\(=%\|=\d\+\)\=" contains=vimNumber,vimOper,vimUserAttrbKey
-syn match vimUserAttrb contained "-count\(=\d\+\)\=" contains=vimNumber,vimOper,vimUserAttrbKey
-syn match vimUserAttrb contained "-bang\>" contains=vimOper,vimUserAttrbKey
-syn match vimUserAttrb contained "-bar\>" contains=vimOper,vimUserAttrbKey
-syn match vimUserAttrb contained "-buffer\>" contains=vimOper,vimUserAttrbKey
-syn match vimUserAttrb contained "-register\>" contains=vimOper,vimUserAttrbKey
+syn keyword vimUserCmdKey contained com[mand]
+syn match vimUserCmdName contained "\<\u[[:alnum:]]*\>" skipwhite nextgroup=vimUserCmdBlock
+syn match vimUserCmd "\<com\%[mand]\>!\=.*$" contains=vimUserCmdKey,vimBang,vimUserCmdAttr,vimUserCmdAttrError,vimUserCmdName,@vimUserCmdList,vimComFilter
+syn match vimUserCmdAttrError contained "-\a\+\ze\%(\s\|=\)"
+syn match vimUserCmdAttr contained "-addr=" contains=vimUserCmdAttrKey nextgroup=vimUserCmdAttrAddr
+syn match vimUserCmdAttr contained "-bang\>" contains=vimUserCmdAttrKey
+syn match vimUserCmdAttr contained "-bar\>" contains=vimUserCmdAttrKey
+syn match vimUserCmdAttr contained "-buffer\>" contains=vimUserCmdAttrKey
+syn match vimUserCmdAttr contained "-complete=" contains=vimUserCmdAttrKey nextgroup=vimUserCmdAttrCmplt,vimUserCmdError
+syn match vimUserCmdAttr contained "-count\>" contains=vimUserCmdAttrKey
+syn match vimUserCmdAttr contained "-count=" contains=vimUserCmdAttrKey nextgroup=vimNumber
+syn match vimUserCmdAttr contained "-keepscript\>" contains=vimUserCmdAttrKey
+syn match vimUserCmdAttr contained "-nargs=" contains=vimUserCmdAttrKey nextgroup=vimUserCmdAttrNargs
+syn match vimUserCmdAttr contained "-range\>" contains=vimUserCmdAttrKey
+syn match vimUserCmdAttr contained "-range=" contains=vimUserCmdAttrKey nextgroup=vimNumber,vimUserCmdAttrRange
+syn match vimUserCmdAttr contained "-register\>" contains=vimUserCmdAttrKey
+
+syn match vimUserCmdAttrNargs contained "[01*?+]"
+syn match vimUserCmdAttrRange contained "%"
+
if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_nousercmderror")
syn match vimUserCmdError contained "\S\+\>"
endif
-syn case ignore
-syn keyword vimUserAttrbKey contained bar ban[g] cou[nt] ra[nge] com[plete] n[args] re[gister]
-" GEN_SYN_VIM: vimUserAttrbCmplt, START_STR='syn keyword vimUserAttrbCmplt contained', END_STR=''
-syn keyword vimUserAttrbCmplt contained arglist augroup behave buffer color command compiler cscope diff_buffer dir environment event expression file file_in_path filetype function help highlight history keymap locale mapclear mapping menu messages syntax syntime option packadd runtime shellcmd sign tag tag_listfiles user var breakpoint scriptnames
-syn keyword vimUserAttrbCmplt contained custom customlist nextgroup=vimUserAttrbCmpltFunc,vimUserCmdError
-syn match vimUserAttrbCmpltFunc contained ",\%([sS]:\|<[sS][iI][dD]>\)\=\%(\h\w*\%([.#]\h\w*\)\+\|\h\w*\)"hs=s+1 nextgroup=vimUserCmdError
+syn case ignore
+syn keyword vimUserCmdAttrKey contained a[ddr] ban[g] bar bu[ffer] com[plete] cou[nt] k[eepscript] n[args] ra[nge] re[gister]
+" GEN_SYN_VIM: vimUserCmdAttrCmplt, START_STR='syn keyword vimUserCmdAttrCmplt contained', END_STR=''
+syn keyword vimUserCmdAttrCmplt contained arglist augroup behave breakpoint buffer color command compiler cscope diff_buffer dir dir_in_path environment event expression file file_in_path filetype function help highlight history keymap locale mapclear mapping menu messages option packadd runtime scriptnames shellcmd sign syntax syntime tag tag_listfiles user var
+syn keyword vimUserCmdAttrCmplt contained custom customlist nextgroup=vimUserCmdAttrCmpltFunc,vimUserCmdError
+syn match vimUserCmdAttrCmpltFunc contained ",\%([sS]:\|<[sS][iI][dD]>\)\=\%(\h\w*\%([.#]\h\w*\)\+\|\h\w*\)"hs=s+1 nextgroup=vimUserCmdError
+" GEN_SYN_VIM: vimUserCmdAttrAddr, START_STR='syn keyword vimUserCmdAttrAddr contained', END_STR=''
+syn keyword vimUserCmdAttrAddr contained arguments arg buffers buf lines line loaded_buffers load other quickfix qf tabs tab windows win
+syn match vimUserCmdAttrAddr contained "?"
syn case match
-syn match vimUserAttrbCmplt contained "custom,\u\w*"
syn region vimUserCmdBlock contained matchgroup=vimSep start="{" end="}" contains=@vimDefBodyList
+syn match vimDelcommand "\<delc\%[ommand]\>" skipwhite nextgroup=vimDelcommandAttr
+syn match vimDelcommandAttr contained "-buffer\>"
+
" Lower Priority Comments: after some vim commands... {{{2
" =======================
-syn region vimCommentString contained oneline start='\S\s\+"'ms=e end='"'
+if get(g:, "vimsyn_comment_strings", 1)
+ syn region vimCommentString contained oneline start='\S\s\+"'ms=e end='"' extend
+endif
if s:vim9script
- syn match vimComment excludenl +\s"[^\-:.%#=*].*$+lc=1 contains=@vimCommentGroup,vimCommentString contained
- syn match vimComment +\<endif\s\+".*$+lc=5 contains=@vimCommentGroup,vimCommentString contained
- syn match vimComment +\<else\s\+".*$+lc=4 contains=@vimCommentGroup,vimCommentString contained
- " Vim9 comments - TODO: might be highlighted while they don't work
- syn match vim9Comment excludenl +\s#[^{].*$+lc=1 contains=@vimCommentGroup,vimCommentString
- syn match vim9Comment +\<endif\s\+#[^{].*$+lc=5 contains=@vimCommentGroup,vimCommentString
- syn match vim9Comment +\<else\s\+#[^{].*$+lc=4 contains=@vimCommentGroup,vimCommentString
- " Vim9 comment inside expression
- " syn match vim9Comment +\s\zs#[^{].*$+ms=s+1 contains=@vimCommentGroup,vimCommentString
- " syn match vim9Comment +^\s*#[^{].*$+ contains=@vimCommentGroup,vimCommentString
- " syn match vim9Comment +^\s*#$+ contains=@vimCommentGroup,vimCommentString
-
syn cluster vimComment contains=vim9Comment
else
- syn match vimComment excludenl +\s"[^\-:.%#=*].*$+lc=1 contains=@vimCommentGroup,vimCommentString
- syn match vimComment +\<endif\s\+".*$+lc=5 contains=@vimCommentGroup,vimCommentString
- syn match vimComment +\<else\s\+".*$+lc=4 contains=@vimCommentGroup,vimCommentString
- " Vim9 comments - TODO: might be highlighted while they don't work
- syn match vim9Comment excludenl +\s#[^{].*$+lc=1 contains=@vimCommentGroup,vimCommentString contained
- syn match vim9Comment +\<endif\s\+#[^{].*$+lc=5 contains=@vimCommentGroup,vimCommentString contained
- syn match vim9Comment +\<else\s\+#[^{].*$+lc=4 contains=@vimCommentGroup,vimCommentString contained
- " Vim9 comment inside expression
- syn match vim9Comment +\s\zs#[^{].*$+ms=s+1 contains=@vimCommentGroup,vimCommentString contained
- syn match vim9Comment +^\s*#[^{].*$+ contains=@vimCommentGroup,vimCommentString contained
- syn match vim9Comment +^\s*#$+ contains=@vimCommentGroup,vimCommentString contained
-
syn cluster vimComment contains=vimComment
endif
+VimL syn match vimComment excludenl +\s"[^\-:.%#=*].*$+lc=1 contains=@vimCommentGroup,vimCommentString extend
+VimL syn match vimComment +\<endif\s\+".*$+lc=5 contains=@vimCommentGroup,vimCommentString extend
+VimL syn match vimComment +\<else\s\+".*$+lc=4 contains=@vimCommentGroup,vimCommentString extend
+" Vim9 comments - TODO: might be highlighted while they don't work
+Vim9 syn match vim9Comment excludenl +\s#[^{].*$+lc=1 contains=@vimCommentGroup,vimCommentString extend
+Vim9 syn match vim9Comment +\<endif\s\+#[^{].*$+lc=5 contains=@vimCommentGroup,vimCommentString extend
+Vim9 syn match vim9Comment +\<else\s\+#[^{].*$+lc=4 contains=@vimCommentGroup,vimCommentString extend
+" Vim9 comment inside expression
+Vim9 syn match vim9Comment +\s\zs#[^{].*$+ms=s+1 contains=@vimCommentGroup,vimCommentString contained extend
+Vim9 syn match vim9Comment +^\s*#[^{].*$+ contains=@vimCommentGroup,vimCommentString contained extend
+Vim9 syn match vim9Comment +^\s*#$+ contains=@vimCommentGroup,vimCommentString contained extend
+
+syn match vim9CommentError contained "#.*"
+syn match vimCommentError contained +".*+
+
" Environment Variables: {{{2
" =====================
syn match vimEnvvar "\$\I\i*"
@@ -405,8 +436,8 @@ syn region vimPatSepZone oneline contained matchgroup=vimPatSepZ start="\\%\
syn region vimPatRegion contained transparent matchgroup=vimPatSepR start="\\[z%]\=(" end="\\)" contains=@vimSubstList oneline
syn match vimNotPatSep contained "\\\\"
syn cluster vimStringGroup contains=vimEscape,vimEscapeBrace,vimPatSep,vimNotPatSep,vimPatSepErr,vimPatSepZone,@Spell
-syn region vimString oneline keepend start=+[^a-zA-Z>!\\@]"+lc=1 skip=+\\\\\|\\"+ matchgroup=vimStringEnd end=+"+ contains=@vimStringGroup
-syn region vimString oneline keepend start=+[^a-zA-Z>!\\@]'+lc=1 end=+'+
+syn region vimString oneline keepend start=+[^a-zA-Z>!\\@]"+lc=1 skip=+\\\\\|\\"+ matchgroup=vimStringEnd end=+"+ contains=@vimStringGroup extend
+syn region vimString oneline keepend start=+[^a-zA-Z>!\\@]'+lc=1 end=+'+ extend
"syn region vimString oneline start="\s/\s*\A"lc=1 skip="\\\\\|\\+" end="/" contains=@vimStringGroup " see tst45.vim
syn match vimString contained +"[^"]*\\$+ skipnl nextgroup=vimStringCont
syn match vimStringCont contained +\(\\\\\|.\)\{-}[^\\]"+
@@ -416,23 +447,22 @@ syn match vimEscape contained "\\\o\{1,3}\|\\[xX]\x\{1,2}\|\\u\x\{1,4}\|\\U\x\{1
syn match vimEscape contained "\\<" contains=vimNotation
syn match vimEscape contained "\\<\*[^>]*>\=>"
-syn region vimString oneline start=+$'+ skip=+''+ end=+'+ contains=vimStringInterpolationBrace,vimStringInterpolationExpr
-syn region vimString oneline start=+$"+ end=+"+ contains=@vimStringGroup,vimStringInterpolationBrace,vimStringInterpolationExpr
+syn region vimString oneline start=+$'+ skip=+''+ end=+'+ contains=@vimStringInterpolation extend
+syn region vimString oneline start=+$"+ end=+"+ contains=@vimStringGroup,@vimStringInterpolation extend
syn region vimStringInterpolationExpr oneline contained matchgroup=vimSep start=+{+ end=+}+ contains=@vimExprList
syn match vimStringInterpolationBrace contained "{{"
syn match vimStringInterpolationBrace contained "}}"
+syn cluster vimStringInterpolation contains=vimStringInterpolationExpr,vimStringInterpolationBrace
" Substitutions: {{{2
" =============
syn cluster vimSubstList contains=vimPatSep,vimPatRegion,vimPatSepErr,vimSubstTwoBS,vimSubstRange,vimNotation
syn cluster vimSubstRepList contains=vimSubstSubstr,vimSubstTwoBS,vimNotation
syn cluster vimSubstList add=vimCollection
-syn match vimSubst "^\s*\%(s\%[ubstitute]\|sm\%[agic]\|sno\%[magic]\)\>[\"#|]\@!" nextgroup=vimSubstPat
-syn match vimSubst "^\s*\%(s\%[ubstitute]\|sm\%[agic]\|sno\%[magic]\)_\@=" nextgroup=vimSubstPat
-syn match vimSubst "^\s*\%(s\%[ubstitute]\|sm\%[agic]\>\|sno\%[magic]\)\ze#.\{-}#.\{-}#" nextgroup=vimSubstPat
-syn match vimSubst1 contained "\%(s\%[ubstitute]\|sm\%[agic]\>\|sno\%[magic]\)\>[\"#|]\@!" nextgroup=vimSubstPat
-syn match vimSubst1 contained "\%(s\%[ubstitute]\|sm\%[agic]\>\|sno\%[magic]\)_\@=" nextgroup=vimSubstPat
-syn match vimSubst1 contained "\%(s\%[ubstitute]\|sm\%[agic]\>\|sno\%[magic]\)\ze#.\{-}#.\{-}#" nextgroup=vimSubstPat
+syn match vimSubst "^\s*\%(s\%[ubstitute]\|sm\%[agic]\|sno\%[magic]\)\>" skipwhite nextgroup=vimSubstPat
+syn match vimSubst "^\s*\%(s\%[ubstitute]\|sm\%[agic]\|sno\%[magic]\)[_#]\@=" skipwhite nextgroup=vimSubstPat
+syn match vimSubst1 contained "\%(s\%[ubstitute]\|sm\%[agic]\>\|sno\%[magic]\)\>" skipwhite nextgroup=vimSubstPat
+syn match vimSubst1 contained "\%(s\%[ubstitute]\|sm\%[agic]\>\|sno\%[magic]\)[_#]\@=" skipwhite nextgroup=vimSubstPat
" TODO: Vim9 illegal separators for abbreviated :s form are [-.:], :su\%[...] required
" : # is allowed but "not recommended" (see :h pattern-delimiter)
syn region vimSubstPat contained matchgroup=vimSubstDelim start="\z([!#$%&'()*+,-./:;<=>?@[\]^_`{}~]\)"rs=s+1 skip="\\\\\|\\\z1" end="\z1"re=e-1,me=e-1 contains=@vimSubstList nextgroup=vimSubstRep4 oneline
@@ -445,13 +475,17 @@ syn match vimSubstTwoBS contained "\\\\"
syn match vimSubstFlagErr contained "[^< \t\r|]\+" contains=vimSubstFlags
syn match vimSubstFlags contained "[&cegiIlnpr#]\+"
+" Vi compatibility
+syn match vimSubstDelim contained "\\"
+syn match vimSubstPat contained "\\\ze[/?&]" contains=vimSubstDelim nextgroup=vimSubstRep4
+
" 'String': {{{2
syn match vimString "[^(,]'[^']\{-}\zs'"
" Marks, Registers, Addresses, Filters: {{{2
syn match vimMark "'[a-zA-Z0-9]\ze[-+,!]" nextgroup=vimFilter,vimMarkNumber,vimSubst1
-syn match vimMark "'[<>]\ze[-+,!]" nextgroup=vimFilter,vimMarkNumber,vimSubst1
-syn match vimMark ",\zs'[<>]\ze" nextgroup=vimFilter,vimMarkNumber,vimSubst1
+syn match vimMark "'[[\]{}()<>]\ze[-+,!]" nextgroup=vimFilter,vimMarkNumber,vimSubst1
+syn match vimMark ",\zs'[[\]{}()<>]\ze" nextgroup=vimFilter,vimMarkNumber,vimSubst1
syn match vimMark "[!,:]\zs'[a-zA-Z0-9]" nextgroup=vimFilter,vimMarkNumber,vimSubst1
syn match vimMark "\<norm\%[al]\s\zs'[a-zA-Z0-9]" nextgroup=vimFilter,vimMarkNumber,vimSubst1
syn match vimMarkNumber "[-+]\d\+" contained contains=vimOper nextgroup=vimSubst1
@@ -478,28 +512,45 @@ syn match vimCmplxRepeat '[^a-zA-Z_/\\()]q[0-9a-zA-Z"]\>'lc=1
syn match vimCmplxRepeat '@[0-9a-z".=@:]\ze\($\|[^a-zA-Z]\>\)'
" Set command and associated set-options (vimOptions) with comment {{{2
-syn region vimSet matchgroup=vimCommand start="\<\%(setl\%[ocal]\|setg\%[lobal]\|se\%[t]\)\>" skip="\%(\\\\\)*\\.\n\@!" end="$" end="|" matchgroup=vimNotation end="<[cC][rR]>" keepend contains=vimSetEqual,vimOption,vimErrSetting,@vimComment,vimSetString,vimSetMod
-syn region vimSetEqual contained start="[=:]\|[-+^]=" skip="\\\\\|\\\s" end="[| \t]"me=e-1 end="$" contains=vimCtrlChar,vimSetSep,vimNotation,vimEnvvar
-syn region vimSetString contained start=+="+hs=s+1 skip=+\\\\\|\\"+ end=+"+ contains=vimCtrlChar
+syn match vimSet "\<\%(setl\%[ocal]\|setg\%[lobal]\|se\%[t]\)\>" skipwhite nextgroup=vimSetBang,vimSetRegion
+syn region vimSetRegion contained start="\S" skip=+\\\\\|\\|\|\n\s*\\\|\n\s*["#]\\ + matchgroup=vimCmdSep end="|" end="$" matchgroup=vimNotation end="<[cC][rR]>" keepend contains=@vimComment,@vimContinue,vimErrSetting,vimOption,vimSetAll,vimSetTermcap
+syn region vimSetEqual contained matchgroup=vimOper start="[=:]\|[-+^]=" skip=+\\\\\|\\|\|\\\s\|\n\s*\\\|\n\s*["#]\\ \|^\s*\\\|^\s*["#]\\ + matchgroup=vimCmdSep end="|" end="\ze\s" end="$" contains=@vimContinue,vimCtrlChar,vimEnvvar,vimNotation,vimSetSep
+syn match vimSetBang contained "\a\@1<=!" skipwhite nextgroup=vimSetAll,vimSetTermcap
+syn keyword vimSetAll contained all nextgroup=vimSetMod
+syn keyword vimSetTermcap contained termcap
+syn region vimSetString contained start=+="+hs=s+1 skip=+\\\\\|\\"+ end=+"+ contains=vimCtrlChar
syn match vimSetSep contained "[,:]"
-syn match vimSetMod contained "&vim\=\|[!&?<]\|all&"
+syn match vimSetMod contained "\a\@1<=\%(&vim\=\|[!&?<]\)"
-" Let: {{{2
-" ===
-syn keyword vimLet let skipwhite nextgroup=vimVar,vimFuncVar,vimLetHereDoc,vimLetRegister,vimVarList
-syn keyword vimConst cons[t] skipwhite nextgroup=vimVar,vimLetHereDoc,vimVarList
-syn region vimVarList contained start="\[" end="]" contains=vimVar,vimContinue
+" Variable Declarations: {{{2
+" =====================
+VimL syn keyword vimLet let skipwhite nextgroup=vimVar,vimFuncVar,vimLetRegister,vimVarList
+VimL syn keyword vimConst cons[t] skipwhite nextgroup=vimVar,vimVarList
+syn region vimVarList contained start="\[" end="]" contains=vimVar,@vimContinue
-syn keyword vimUnlet unl[et] skipwhite nextgroup=vimUnletBang,vimUnletVars
+VimL syn keyword vimUnlet unl[et] skipwhite nextgroup=vimUnletBang,vimUnletVars
syn match vimUnletBang contained "!" skipwhite nextgroup=vimUnletVars
syn region vimUnletVars contained start="$\I\|\h" skip="\n\s*\\" end="$" end="|" contains=vimVar,vimEnvvar,vimContinue,vimString,vimNumber
-VimFoldh syn region vimLetHereDoc matchgroup=vimLetHereDocStart start='=<<\s*\%(trim\s\+\%(eval\s\+\)\=\|eval\s\+\%(trim\s\+\)\=\)\=\z(\L\S*\)' matchgroup=vimLetHereDocStop end='^\s*\z1\s*$' extend
-syn keyword vimLet var skipwhite nextgroup=vimVar,vimFuncVar,vimLetHereDoc
+VimFoldh syn region vimLetHereDoc matchgroup=vimLetHereDocStart start='\%(^\z(\s*\)\S.*\)\@<==<<\s*trim\%(\s\+\)\@>\z(\L\S*\)' matchgroup=vimLetHereDocStop end='^\z1\=\z2$' extend
+VimFoldh syn region vimLetHereDoc matchgroup=vimLetHereDocStart start='=<<\%(\s*\)\@>\z(\L\S*\)' matchgroup=vimLetHereDocStop end='^\z1$' extend
+VimFoldh syn region vimLetHereDoc matchgroup=vimLetHereDocStart start='\%(^\z(\s*\)\S.*\)\@<==<<\s*\%(trim\s\+eval\|eval\s\+trim\)\%(\s\+\)\@>\z(\L\S*\)' matchgroup=vimLetHereDocStop end='^\z1\=\z2$' contains=@vimStringInterpolation extend
+VimFoldh syn region vimLetHereDoc matchgroup=vimLetHereDocStart start='=<<\s*eval\%(\s\+\)\@>\z(\L\S*\)' matchgroup=vimLetHereDocStop end='^\z1$' contains=@vimStringInterpolation extend
+
+Vim9 syn keyword vim9Const const skipwhite nextgroup=vim9Variable,vim9VariableList
+Vim9 syn keyword vim9Final final skipwhite nextgroup=vim9Variable,vim9VariableList
+Vim9 syn keyword vim9Var var skipwhite nextgroup=vim9Variable,vim9VariableList
+
+syn match vim9Variable contained "\<\h\w*\>" skipwhite nextgroup=vimTypeSep,vimLetHereDoc
+syn region vim9VariableList contained start="\[" end="]" contains=vim9Variable,@vimContinue
" For: {{{2
" ===
-syn keyword vimFor for skipwhite nextgroup=vimVar,vimVarList
+if s:vim9script
+ syn keyword vim9For for skipwhite nextgroup=vim9Variable,vim9VariableList
+else
+ syn keyword vimFor for skipwhite nextgroup=vimVar,vimVarList
+endif
" Abbreviations: {{{2
" =============
@@ -543,15 +594,17 @@ syn region vimExecute matchgroup=vimCommand start="\<exe\%[cute]\>" skip=+\\|\|\
" Maps: {{{2
" ====
-syn match vimMap "\<map\>\ze\s*(\@!" skipwhite nextgroup=vimMapMod,vimMapLhs
-syn match vimMap "\<map!" contains=vimMapBang skipwhite nextgroup=vimMapMod,vimMapLhs
-" GEN_SYN_VIM: vimCommand map, START_STR='syn keyword vimMap', END_STR='skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs'
-syn keyword vimMap cm[ap] cno[remap] im[ap] ino[remap] lm[ap] ln[oremap] nm[ap] nn[oremap] no[remap] om[ap] ono[remap] smap snor[emap] tma[p] tno[remap] vm[ap] vn[oremap] xm[ap] xn[oremap] skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs
+" GEN_SYN_VIM: vimCommand map, START_STR='syn keyword vimMap', END_STR='skipwhite nextgroup=vimMapMod,vimMapLhs'
+syn keyword vimMap cm[ap] cno[remap] im[ap] ino[remap] lm[ap] ln[oremap] nm[ap] nn[oremap] om[ap] ono[remap] smap snor[emap] tma[p] tno[remap] vm[ap] vn[oremap] xm[ap] xn[oremap] skipwhite nextgroup=vimMapMod,vimMapLhs
+syn match vimMap "\<map\>" skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs
+syn keyword vimMap no[remap] skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs
" GEN_SYN_VIM: vimCommand mapclear, START_STR='syn keyword vimMap', END_STR='skipwhite nextgroup=vimMapMod'
syn keyword vimMap cmapc[lear] imapc[lear] lmapc[lear] nmapc[lear] omapc[lear] smapc[lear] tmapc[lear] vmapc[lear] xmapc[lear] skipwhite nextgroup=vimMapMod
-syn keyword vimMap mapc[lear] skipwhite nextgroup=vimMapBang,vimMapMod
-" GEN_SYN_VIM: vimCommand unmap, START_STR='syn keyword vimUnmap', END_STR='skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs'
-syn keyword vimUnmap cu[nmap] iu[nmap] lu[nmap] nun[map] ou[nmap] sunm[ap] tunma[p] unm[ap] vu[nmap] xu[nmap] skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs
+syn keyword vimMap mapc[lear] skipwhite nextgroup=vimMapBang,vimMapMod
+" GEN_SYN_VIM: vimCommand unmap, START_STR='syn keyword vimUnmap', END_STR='skipwhite nextgroup=vimMapMod,vimMapLhs'
+syn keyword vimUnmap cu[nmap] iu[nmap] lu[nmap] nun[map] ou[nmap] sunm[ap] tunma[p] vu[nmap] xu[nmap] skipwhite nextgroup=vimMapMod,vimMapLhs
+syn keyword vimUnmap unm[ap] skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs
+
syn match vimMapLhs contained "\%(.\|\S\)\+" contains=vimCtrlChar,vimNotation skipwhite nextgroup=vimMapRhs
syn match vimMapLhs contained "\%(.\|\S\)\+\ze\s*$" contains=vimCtrlChar,vimNotation skipwhite skipnl nextgroup=vimMapRhsContinue
syn match vimMapBang contained "\a\@1<=!" skipwhite nextgroup=vimMapMod,vimMapLhs
@@ -618,6 +671,8 @@ syn match vimFunc "\%(\%([sSgGbBwWtTlL]:\|<[sS][iI][dD]>\)\=\%(\w\
syn match vimUserFunc contained "\%(\%([sSgGbBwWtTlL]:\|<[sS][iI][dD]>\)\=\%(\w\+\.\)*\I[a-zA-Z0-9_.]*\)\|\<\u[a-zA-Z0-9.]*\>\|\<if\>" contains=vimNotation
syn keyword vimFuncEcho contained ec ech echo
+syn match vimMap "\<map\%(\s\+(\)\@=" skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs
+
" User Command Highlighting: {{{2
syn match vimUsrCmd '^\s*\zs\u\%(\w*\)\@>\%([(#[]\|\s\+\%([-+*/%]\=\|\.\.\)=\)\@!'
@@ -630,13 +685,28 @@ if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimfunctionerror")
syn match vimBufnrWarn /\<bufnr\s*(\s*["']\.['"]\s*)/
endif
-syn match vimNotFunc "\<if\>\|\<el\%[seif]\>\|\<retu\%[rn]\>\|\<while\>" skipwhite nextgroup=vimOper,vimOperParen,vimVar,vimFunc,vimNotation
+syn match vimNotFunc "\<if\>\|\<el\%[seif]\>\|\<retu\%[rn]\>\|\<while\>" skipwhite nextgroup=@vimExprList,vimNotation
+
+" Match: {{{2
+" =====
+syn match vimMatch "\<[23]\=mat\%[ch]\>" skipwhite nextgroup=vimMatchGroup,vimMatchNone
+syn match vimMatchGroup contained "[[:alnum:]._-]\+" skipwhite nextgroup=vimMatchPattern
+syn case ignore
+syn keyword vimMatchNone contained none
+syn case match
+syn region vimMatchPattern contained matchgroup=Delimiter start="\z([!#$%&'()*+,-./:;<=>?@[\]^_`{}~]\)" skip="\\\\\|\\\z1" end="\z1" contains=@vimSubstList oneline
" Norm: {{{2
" ====
syn match vimNorm "\<norm\%[al]!\=" skipwhite nextgroup=vimNormCmds
syn match vimNormCmds contained ".*$"
+" Sleep: {{{2
+" =====
+syn keyword vimSleep sl[eep] skipwhite nextgroup=vimSleepBang,vimSleepArg
+syn match vimSleepBang contained "\a\@1<=!" skipwhite nextgroup=vimSleepArg
+syn match vimSleepArg contained "\<\%(\d\+\)\=m\=\>"
+
" Syntax: {{{2
"=======
syn match vimGroupList contained "[^[:space:],]\+\%(\s*,\s*[^[:space:],]\+\)*" contains=vimGroupSpecial
@@ -802,17 +872,20 @@ syn match vimCtrlChar "[- -]"
" Beginners - Patterns that involve ^ {{{2
" =========
-if s:vim9script
- syn match vimLineComment +^[ \t:]*".*$+ contains=@vimCommentGroup,vimCommentString,vimCommentTitle contained
- syn match vim9LineComment +^[ \t:]*#.*$+ contains=@vimCommentGroup,vimCommentString,vim9CommentTitle
-else
- syn match vimLineComment +^[ \t:]*".*$+ contains=@vimCommentGroup,vimCommentString,vimCommentTitle
- syn match vim9LineComment +^[ \t:]*#.*$+ contains=@vimCommentGroup,vimCommentString,vim9CommentTitle contained
-endif
+Vim9 syn region vim9LineComment start=+^[ \t:]*\zs#.*$+ skip=+\n\s*\\\|\n\s*#\\ + end="$" contains=@vimCommentGroup,vimCommentString,vim9CommentTitle extend
+VimL syn region vimLineComment start=+^[ \t:]*\zs".*$+ skip=+\n\s*\\\|\n\s*"\\ + end="$" contains=@vimCommentGroup,vimCommentString,vimCommentTitle extend
+
syn match vimCommentTitle '"\s*\%([sS]:\|\h\w*#\)\=\u\w*\(\s\+\u\w*\)*:'hs=s+1 contained contains=vimCommentTitleLeader,vimTodo,@vimCommentGroup
syn match vim9CommentTitle '#\s*\%([sS]:\|\h\w*#\)\=\u\w*\(\s\+\u\w*\)*:'hs=s+1 contained contains=vim9CommentTitleLeader,vimTodo,@vimCommentGroup
+
+" allowed anywhere in the file
+if !s:vim9script
+ syn match vimShebangError "^\s*\zs#!.*" display
+endif
+syn match vimShebang "\%^#!.*" display
+
syn match vimContinue "^\s*\zs\\"
-syn match vimContinueComment '^\s*\zs["#]\\ .*' contained
+syn match vimContinueComment '^\s*\zs["#]\\ .*'
syn cluster vimContinue contains=vimContinue,vimContinueComment
syn region vimString start="^\s*\\\z(['"]\)" skip='\\\\\|\\\z1' end="\z1" oneline keepend contains=@vimStringGroup,vimContinue
syn match vimCommentTitleLeader '"\s\+'ms=s+1 contained
@@ -845,12 +918,12 @@ endif
" Allows users to specify the type of embedded script highlighting
" they want: (perl/python/ruby/tcl support)
" g:vimsyn_embed == 0 : don't embed any scripts
-" g:vimsyn_embed =~# 'l' : embed lua
-" g:vimsyn_embed =~# 'm' : embed mzscheme
-" g:vimsyn_embed =~# 'p' : embed perl
-" g:vimsyn_embed =~# 'P' : embed python
-" g:vimsyn_embed =~# 'r' : embed ruby
-" g:vimsyn_embed =~# 't' : embed tcl
+" g:vimsyn_embed =~# 'l' : embed Lua
+" g:vimsyn_embed =~# 'm' : embed MzScheme
+" g:vimsyn_embed =~# 'p' : embed Perl
+" g:vimsyn_embed =~# 'P' : embed Python
+" g:vimsyn_embed =~# 'r' : embed Ruby
+" g:vimsyn_embed =~# 't' : embed Tcl
if !exists("g:vimsyn_embed")
let g:vimsyn_embed = 'l'
endif
@@ -869,12 +942,16 @@ if g:vimsyn_embed =~# 'l' && filereadable(s:luapath)
unlet! b:current_syntax
syn cluster vimFuncBodyList add=vimLuaRegion
exe "syn include @vimLuaScript ".s:luapath
- VimFoldl syn region vimLuaRegion matchgroup=vimScriptDelim start=+lua\s*<<\s*\z(.*\)$+ end=+^\z1$+ contains=@vimLuaScript
- VimFoldl syn region vimLuaRegion matchgroup=vimScriptDelim start=+lua\s*<<\s*$+ end=+\.$+ contains=@vimLuaScript
+ VimFoldl syn region vimLuaRegion matchgroup=vimScriptDelim start=+^\z(\s*\)lua\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimLuaScript
+ VimFoldl syn region vimLuaRegion matchgroup=vimScriptDelim start=+lua\s*<<\s*\z(\S*\)+ end=+^\z1$+ contains=@vimLuaScript
+ VimFoldl syn region vimLuaRegion matchgroup=vimScriptDelim start=+^\z(\s*\)lua\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimLuaScript
+ VimFoldl syn region vimLuaRegion matchgroup=vimScriptDelim start=+lua\s*<<\s*$+ end=+^\.$+ contains=@vimLuaScript
syn cluster vimFuncBodyList add=vimLuaRegion
else
- syn region vimEmbedError start=+lua\s*<<\s*\z(.*\)$+ end=+^\z1$+
- syn region vimEmbedError start=+lua\s*<<\s*$+ end=+\.$+
+ syn region vimEmbedError start=+^\z(\s*\)lua\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
+ syn region vimEmbedError start=+lua\s*<<\s*\z(\S*\)+ end=+^\z1$+
+ syn region vimEmbedError start=+^\z(\s*\)lua\s*<<\s*trim\s\*$+ end=+^\z1\.$+
+ syn region vimEmbedError start=+lua\s*<<\s*$+ end=+^\.$+
endif
unlet s:luapath
@@ -894,12 +971,16 @@ if g:vimsyn_embed =~# 'p' && filereadable(s:perlpath)
let s:foldmethod = &l:foldmethod
exe "syn include @vimPerlScript ".s:perlpath
let &l:foldmethod = s:foldmethod
- VimFoldp syn region vimPerlRegion matchgroup=vimScriptDelim start=+pe\%[rl]\s*<<\s*\z(\S*\)\ze\(\s*["#].*\)\=$+ end=+^\z1\ze\(\s*[#"].*\)\=$+ contains=@vimPerlScript
- VimFoldp syn region vimPerlRegion matchgroup=vimScriptDelim start=+pe\%[rl]\s*<<\s*$+ end=+\.$+ contains=@vimPerlScript
+ VimFoldp syn region vimPerlRegion matchgroup=vimScriptDelim start=+^\z(\s*\)pe\%[rl]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimPerlScript
+ VimFoldp syn region vimPerlRegion matchgroup=vimScriptDelim start=+pe\%[rl]\s*<<\s*\z(\S*\)+ end=+^\z1$+ contains=@vimPerlScript
+ VimFoldp syn region vimPerlRegion matchgroup=vimScriptDelim start=+^\z(\s*\)pe\%[rl]\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimPerlScript
+ VimFoldp syn region vimPerlRegion matchgroup=vimScriptDelim start=+pe\%[rl]\s*<<\s*$+ end=+\.$+ contains=@vimPerlScript
syn cluster vimFuncBodyList add=vimPerlRegion
else
- syn region vimEmbedError start=+pe\%[rl]\s*<<\s*\z(.*\)$+ end=+^\z1$+
- syn region vimEmbedError start=+pe\%[rl]\s*<<\s*$+ end=+\.$+
+ syn region vimEmbedError start=+^\z(\s*\)pe\%[rl]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
+ syn region vimEmbedError start=+pe\%[rl]\s*<<\s*\z(\S*\)+ end=+^\z1$+
+ syn region vimEmbedError start=+^\z(\s*\)pe\%[rl]\s*<<\s*trim\s\*$+ end=+^\z1\.$+
+ syn region vimEmbedError start=+pe\%[rl]\s*<<\s*$+ end=+^\.$+
endif
unlet s:perlpath
@@ -919,12 +1000,16 @@ if g:vimsyn_embed =~# 'r' && filereadable(s:rubypath)
let s:foldmethod = &l:foldmethod
exe "syn include @vimRubyScript ".s:rubypath
let &l:foldmethod = s:foldmethod
- VimFoldr syn region vimRubyRegion matchgroup=vimScriptDelim start=+rub[y]\s*<<\s*\z(\S*\)\ze\(\s*#.*\)\=$+ end=+^\z1\ze\(\s*".*\)\=$+ contains=@vimRubyScript
- syn region vimRubyRegion matchgroup=vimScriptDelim start=+rub[y]\s*<<\s*$+ end=+\.$+ contains=@vimRubyScript
+ VimFoldr syn region vimRubyRegion matchgroup=vimScriptDelim start=+^\z(\s*\)rub\%[y]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimRubyScript
+ VimFoldr syn region vimRubyRegion matchgroup=vimScriptDelim start=+rub\%[y]\s*<<\s*\z(\S*\)+ end=+^\z1$+ contains=@vimRubyScript
+ VimFoldr syn region vimRubyRegion matchgroup=vimScriptDelim start=+^\z(\s*\)rub\%[y]\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimRubyScript
+ VimFoldr syn region vimRubyRegion matchgroup=vimScriptDelim start=+rub\%[y]\s*<<\s*$+ end=+\.$+ contains=@vimRubyScript
syn cluster vimFuncBodyList add=vimRubyRegion
else
- syn region vimEmbedError start=+rub[y]\s*<<\s*\z(.*\)$+ end=+^\z1$+
- syn region vimEmbedError start=+rub[y]\s*<<\s*$+ end=+\.$+
+ syn region vimEmbedError start=+^\z(\s*\)rub\%[y]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
+ syn region vimEmbedError start=+rub\%[y]\s*<<\s*\z(\S.*\)+ end=+^\z1$+
+ syn region vimEmbedError start=+^\z(\s*\)rub\%[y]\s*<<\s*trim\s\*$+ end=+^\z1\.$+
+ syn region vimEmbedError start=+rub\%[y]\s*<<\s*$+ end=+^\.$+
endif
unlet s:rubypath
@@ -942,14 +1027,18 @@ if g:vimsyn_embed =~# 'P' && filereadable(s:pythonpath)
unlet! b:current_syntax
syn cluster vimFuncBodyList add=vimPythonRegion
exe "syn include @vimPythonScript ".s:pythonpath
- VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+py\%[thon][3x]\=\s*<<\s*\%(trim\s*\)\=\z(\S*\)\ze\(\s*#.*\)\=$+ end=+^\z1\ze\(\s*".*\)\=$+ contains=@vimPythonScript
- VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+py\%[thon][3x]\=\s*<<\s*\%(trim\s*\)\=$+ end=+\.$+ contains=@vimPythonScript
- VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+Py\%[thon]2or3\s*<<\s*\%(trim\s*\)\=\z(\S*\)\ze\(\s*#.*\)\=$+ end=+^\z1\ze\(\s*".*\)\=$+ contains=@vimPythonScript
- VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+Py\%[thon]2or3\=\s*<<\s*\%(trim\s*\)\=$+ end=+\.$+ contains=@vimPythonScript
+ VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+^\z(\s*\)py\%[thon][3x]\=\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimPythonScript
+ VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+py\%[thon][3x]\=\s*<<\s*\z(\S\+\)+ end=+^\z1$+ contains=@vimPythonScript
+ VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+^\z(\s*\)py\%[thon][3x]\=\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimPythonScript
+ VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+py\%[thon][3x]\=\s*<<\s*$+ end=+^\.$+ contains=@vimPythonScript
+ VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+Py\%[thon]2or3\s*<<\s*\%(trim\s*\)\=\z(\S\+\)+ end=+^\z1$+ contains=@vimPythonScript
+ VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+Py\%[thon]2or3\s*<<\s*\%(trim\s*\)\=$+ end=+^\.$+ contains=@vimPythonScript
syn cluster vimFuncBodyList add=vimPythonRegion
else
- syn region vimEmbedError start=+py\%[thon]3\=\s*<<\s*\z(.*\)$+ end=+^\z1$+
- syn region vimEmbedError start=+py\%[thon]3\=\s*<<\s*$+ end=+\.$+
+ syn region vimEmbedError start=+^\z(\s*\)py\%[thon][3x]\=\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
+ syn region vimEmbedError start=+py\%[thon][3x]\=\s*<<\s*\z(\S\+\)+ end=+^\z1$+
+ syn region vimEmbedError start=+^\z(\s*\)py\%[thon][3x]\=\s*<<\s*trim\s*$+ end=+^\z1\.$+
+ syn region vimEmbedError start=+py\%[thon][3x]\=\s*<<\s*$+ end=+^\.$+
endif
unlet s:pythonpath
@@ -974,17 +1063,23 @@ if s:trytcl
unlet! b:current_syntax
syn cluster vimFuncBodyList add=vimTclRegion
exe "syn include @vimTclScript ".s:tclpath
- VimFoldt syn region vimTclRegion matchgroup=vimScriptDelim start=+tc[l]\=\s*<<\s*\z(.*\)$+ end=+^\z1$+ contains=@vimTclScript
- VimFoldt syn region vimTclRegion matchgroup=vimScriptDelim start=+tc[l]\=\s*<<\s*$+ end=+\.$+ contains=@vimTclScript
+ VimFoldt syn region vimTclRegion matchgroup=vimScriptDelim start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimTclScript
+ VimFoldt syn region vimTclRegion matchgroup=vimScriptDelim start=+tc\%[l]\=\s*<<\s*\z(\S*\)+ end=+^\z1$+ contains=@vimTclScript
+ VimFoldt syn region vimTclRegion matchgroup=vimScriptDelim start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimTclScript
+ VimFoldt syn region vimTclRegion matchgroup=vimScriptDelim start=+tc\%[l]\=\s*<<\s*$+ end=+^\.$+ contains=@vimTclScript
syn cluster vimFuncBodyList add=vimTclScript
else
- syn region vimEmbedError start=+tc[l]\=\s*<<\s*\z(.*\)$+ end=+^\z1$+
- syn region vimEmbedError start=+tc[l]\=\s*<<\s*$+ end=+\.$+
+ syn region vimEmbedError start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
+ syn region vimEmbedError start=+tc\%[l]\=\s*<<\s*\z(\S*\)+ end=+^\z1$+
+ syn region vimEmbedError start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s\*$+ end=+^\z1\.$+
+ syn region vimEmbedError start=+tc\%[l]\=\s*<<\s*$+ end=+^\.$+
endif
unlet s:tclpath
else
- syn region vimEmbedError start=+tc[l]\=\s*<<\s*\z(.*\)$+ end=+^\z1$+
- syn region vimEmbedError start=+tc[l]\=\s*<<\s*$+ end=+\.$+
+ syn region vimEmbedError start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
+ syn region vimEmbedError start=+tc\%[l]\=\s*<<\s*\z(\S*\)+ end=+^\z1$+
+ syn region vimEmbedError start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s\*$+ end=+^\z1\.$+
+ syn region vimEmbedError start=+tc\%[l]\=\s*<<\s*$+ end=+^\.$+
endif
unlet s:trytcl
@@ -1005,12 +1100,16 @@ if g:vimsyn_embed =~# 'm' && filereadable(s:mzschemepath)
exe "syn include @vimMzSchemeScript ".s:mzschemepath
let &isk= s:iskKeep
unlet s:iskKeep
- VimFoldm syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+mz\%[scheme]\s*<<\s*\z(.*\)$+ end=+^\z1$+ contains=@vimMzSchemeScript
- VimFoldm syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+mz\%[scheme]\s*<<\s*$+ end=+\.$+ contains=@vimMzSchemeScript
+ VimFoldm syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+^\z(\s*\)mz\%[scheme]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimMzSchemeScript
+ VimFoldm syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+mz\%[scheme]\s*<<\s*\z(\S*\)+ end=+^\z1$+ contains=@vimMzSchemeScript
+ VimFoldm syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+^\z(\s*\)mz\%[scheme]\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimMzSchemeScript
+ VimFoldm syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+mz\%[scheme]\s*<<\s*$+ end=+^\.$+ contains=@vimMzSchemeScript
syn cluster vimFuncBodyList add=vimMzSchemeRegion
else
- syn region vimEmbedError start=+mz\%[scheme]\s*<<\s*\z(.*\)$+ end=+^\z1$+
- syn region vimEmbedError start=+mz\%[scheme]\s*<<\s*$+ end=+\.$+
+ syn region vimEmbedError start=+^\z(\s*\)mz\%[scheme]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
+ syn region vimEmbedError start=+mz\%[scheme]\s*<<\s*\z(\S*\)+ end=+^\z1$+
+ syn region vimEmbedError start=+^\z(\s*\)mz\%[scheme]\s*<<\s*trim\s\*$+ end=+^\z1\.$+
+ syn region vimEmbedError start=+mz\%[scheme]\s*<<\s*$+ end=+^\.$+
endif
unlet s:mzschemepath
@@ -1041,13 +1140,13 @@ if !exists("skip_vim_syntax_inits")
hi def link vimHiCtermError vimError
hi def link vimHiKeyError vimError
hi def link vimMapModErr vimError
+ hi def link vimShebangError vimError
hi def link vimSubstFlagErr vimError
hi def link vimSynCaseError vimError
hi def link vimSynFoldMethodError vimError
hi def link vimBufnrWarn vimWarn
endif
- hi def link vim9Vim9ScriptArg Special
hi def link vimAbb vimCommand
hi def link vimAddress vimMark
hi def link vimAugroupBang vimBang
@@ -1061,21 +1160,24 @@ if !exists("skip_vim_syntax_inits")
hi def link vimBehaveModel vimBehave
hi def link vimBehave vimCommand
hi def link vimBracket Delimiter
+ hi def link vimCall vimCommand
+ hi def link vimCatch vimCommand
hi def link vimCmplxRepeat SpecialChar
hi def link vimCommand Statement
hi def link vimComment Comment
- hi def link vim9Comment Comment
+ hi def link vimCommentError vimError
hi def link vimCommentString vimString
hi def link vimCommentTitle PreProc
- hi def link vim9CommentTitle PreProc
hi def link vimCondHL vimCommand
hi def link vimConst vimCommand
hi def link vimContinue Special
hi def link vimContinueComment vimComment
hi def link vimCtrlChar SpecialChar
- hi def link vimDefComment vimComment
+ hi def link vimDefComment vim9Comment
hi def link vimDefKey vimCommand
hi def link vimDefParam vimVar
+ hi def link vimDelcommand vimCommand
+ hi def link vimDelcommandAttr vimUserCmdAttr
hi def link vimEcho vimCommand
hi def link vimEchohlNone vimGroup
hi def link vimEchohl vimCommand
@@ -1135,13 +1237,15 @@ if !exists("skip_vim_syntax_inits")
hi def link vimLetHereDocStop Special
hi def link vimLetRegister Special
hi def link vimLineComment vimComment
- hi def link vim9LineComment vimComment
hi def link vimMapBang vimBang
hi def link vimMapModKey vimFuncSID
hi def link vimMapMod vimBracket
hi def link vimMap vimCommand
hi def link vimMark Number
hi def link vimMarkNumber vimNumber
+ hi def link vimMatch vimCommand
+ hi def link vimMatchGroup vimGroup
+ hi def link vimMatchNone vimGroup
hi def link vimMenuBang vimBang
hi def link vimMenuClear Special
hi def link vimMenuMod vimMapMod
@@ -1174,10 +1278,17 @@ if !exists("skip_vim_syntax_inits")
hi def link vimSearchDelim Statement
hi def link vimSearch vimString
hi def link vimSep Delimiter
+ hi def link vimSet vimCommand
+ hi def link vimSetAll vimOption
+ hi def link vimSetBang vimBang
hi def link vimSetMod vimOption
- hi def link vimSetSep Statement
+ hi def link vimSetSep vimSep
hi def link vimSetString vimString
- hi def link vim9Vim9Script vimCommand
+ hi def link vimSetTermcap vimOption
+ hi def link vimShebang PreProc
+ hi def link vimSleep vimCommand
+ hi def link vimSleepArg Constant
+ hi def link vimSleepBang vimBang
hi def link vimSpecFile Identifier
hi def link vimSpecFileMod vimSpecFile
hi def link vimSpecial Type
@@ -1218,22 +1329,39 @@ if !exists("skip_vim_syntax_inits")
hi def link vimSynReg Type
hi def link vimSyntax vimCommand
hi def link vimSynType vimSpecial
+ hi def link vimThrow vimCommand
hi def link vimTodo Todo
hi def link vimType Type
hi def link vimUnlet vimCommand
hi def link vimUnletBang vimBang
hi def link vimUnmap vimMap
- hi def link vimUserAttrbCmpltFunc Special
- hi def link vimUserAttrbCmplt vimSpecial
- hi def link vimUserAttrbKey vimOption
- hi def link vimUserAttrb vimSpecial
- hi def link vimUserAttrbError Error
+ hi def link vimUserCmdAttrAddr vimSpecial
+ hi def link vimUserCmdAttrCmplt vimSpecial
+ hi def link vimUserCmdAttrNargs vimSpecial
+ hi def link vimUserCmdAttrRange vimSpecial
+ hi def link vimUserCmdAttrKey vimUserCmdAttr
+ hi def link vimUserCmdAttr Special
+ hi def link vimUserCmdAttrError Error
hi def link vimUserCmdError Error
- hi def link vimUserCommand vimCommand
+ hi def link vimUserCmdKey vimCommand
hi def link vimUserFunc Normal
hi def link vimVar Identifier
hi def link vimWarn WarningMsg
+ hi def link vim9Boolean Boolean
+ hi def link vim9Comment Comment
+ hi def link vim9CommentError vimError
+ hi def link vim9CommentTitle PreProc
+ hi def link vim9Const vimCommand
+ hi def link vim9Final vimCommand
+ hi def link vim9For vimCommand
+ hi def link vim9LineComment vimComment
+ hi def link vim9Null Constant
+ hi def link vim9Var vimCommand
+ hi def link vim9Variable vimVar
+ hi def link vim9Vim9Script vimCommand
+ hi def link vim9Vim9ScriptArg Special
+
hi def link nvimAutoEvent vimAutoEvent
hi def link nvimHLGroup vimHLGroup
endif
@@ -1243,6 +1371,8 @@ let b:current_syntax = "vim"
" ---------------------------------------------------------------------
" Cleanup: {{{1
+delc Vim9
+delc VimL
delc VimFolda
delc VimFoldf
delc VimFoldh
diff --git a/runtime/syntax/yaml.vim b/runtime/syntax/yaml.vim
index 6ec806a4cb..e992bc02e6 100644
--- a/runtime/syntax/yaml.vim
+++ b/runtime/syntax/yaml.vim
@@ -129,7 +129,7 @@ syn region yamlFlowCollection matchgroup=yamlFlowIndicator start='\[' end='\]' c
execute 'syn match yamlPlainScalar /'.s:ns_plain_out.'/'
execute 'syn match yamlPlainScalar contained /'.s:ns_plain_in.'/'
-execute 'syn match yamlFlowMappingKey /'.s:ns_plain_in.'\%(\s\+'.s:ns_plain_in.'\)*\ze\s*:/ contained '.
+execute 'syn match yamlFlowMappingKey /'.s:ns_plain_in.'\%(\s\+'.s:ns_plain_in.'\)*\ze\s*:\%(\s\|$\)/ contained '.
\'nextgroup=yamlFlowMappingDelimiter skipwhite'
syn match yamlFlowMappingKeyStart /?/ contained nextgroup=@yamlFlowNode skipwhite
syn match yamlFlowMappingMerge /<<\ze\s*:/ contained nextgroup=yamlFlowMappingDelimiter skipwhite
diff --git a/runtime/syntax/zathurarc.vim b/runtime/syntax/zathurarc.vim
index 5e0526d02a..32997c2d2d 100644
--- a/runtime/syntax/zathurarc.vim
+++ b/runtime/syntax/zathurarc.vim
@@ -3,7 +3,7 @@
" Maintainer: Wu, Zhenyu <wuzhenyu@ustc.edu>
" Documentation: https://pwmt.org/projects/zathura/documentation/
" Upstream: https://github.com/Freed-Wu/zathurarc.vim
-" Latest Revision: 2024-04-02
+" Latest Revision: 2024-09-16
if exists('b:current_syntax')
finish
@@ -22,7 +22,7 @@ syntax region zathurarcString start=`'` skip=`\\'` end=`'`
syntax keyword zathurarcMode normal fullscreen presentation index
syntax keyword zathurarcBoolean true false
syntax keyword zathurarcCommand include map set unmap
-syntax keyword zathurarcOption abort-clear-search adjust-open advance-pages-per-row completion-bg completion-fg completion-group-bg completion-group-fg completion-highlight-bg completion-highlight-fg continuous-hist-save database dbus-raise-window dbus-service default-bg default-fg exec-command filemonitor first-page-column font guioptions highlight-active-color highlight-color highlight-fg highlight-transparency incremental-search index-active-bg index-active-fg index-bg index-fg inputbar-bg inputbar-fg link-hadjust link-zoom n-completion-items notification-bg notification-error-bg notification-error-fg notification-fg notification-warning-bg notification-warning-fg page-cache-size page-padding page-right-to-left page-thumbnail-size pages-per-row recolor recolor-darkcolor recolor-keephue recolor-lightcolor recolor-reverse-video render-loading render-loading-bg render-loading-fg sandbox scroll-full-overlap scroll-hstep scroll-page-aware scroll-step scroll-wrap search-hadjust selection-clipboard selection-notification show-directories show-hidden show-recent statusbar-basename statusbar-bg statusbar-fg statusbar-h-padding statusbar-home-tilde statusbar-page-percent statusbar-v-padding synctex synctex-editor-command vertical-center window-height window-icon window-icon-document window-title-basename window-title-home-tilde window-title-page window-width zoom-center zoom-max zoom-min zoom-step
+syntax keyword zathurarcOption abort-clear-search adjust-open advance-pages-per-row completion-bg completion-fg completion-group-bg completion-group-fg completion-highlight-bg completion-highlight-fg continuous-hist-save database dbus-raise-window dbus-service default-bg default-fg double-click-follow exec-command filemonitor first-page-column font guioptions highlight-active-color highlight-color highlight-fg highlight-transparency incremental-search index-active-bg index-active-fg index-bg index-fg inputbar-bg inputbar-fg link-hadjust link-zoom n-completion-items notification-bg notification-error-bg notification-error-fg notification-fg notification-warning-bg notification-warning-fg page-cache-size page-padding page-right-to-left page-thumbnail-size pages-per-row recolor recolor-darkcolor recolor-keephue recolor-lightcolor recolor-reverse-video render-loading render-loading-bg render-loading-fg sandbox scroll-full-overlap scroll-hstep scroll-page-aware scroll-step scroll-wrap search-hadjust selection-clipboard selection-notification show-directories show-hidden show-recent statusbar-basename statusbar-bg statusbar-fg statusbar-h-padding statusbar-home-tilde statusbar-page-percent statusbar-v-padding synctex synctex-editor-command vertical-center window-height window-icon window-icon-document window-title-basename window-title-home-tilde window-title-page window-width zoom-center zoom-max zoom-min zoom-step
highlight default link zathurarcComment Comment
highlight default link zathurarcNumber Number