Update runtime files
diff --git a/runtime/syntax/cs.vim b/runtime/syntax/cs.vim
index b4cb648..722ddbe 100644
--- a/runtime/syntax/cs.vim
+++ b/runtime/syntax/cs.vim
@@ -3,13 +3,16 @@
 " Maintainer:          Nick Jensen <nickspoon@gmail.com>
 " Former Maintainers:  Anduin Withers <awithers@anduin.com>
 "                      Johannes Zellner <johannes@zellner.org>
-" Last Change:         2020-11-23
+" Last Change:         2022-03-01
 " Filenames:           *.cs
 " License:             Vim (see :h license)
 " Repository:          https://github.com/nickspoons/vim-cs
 "
-" REFERENCES:
-" [1] ECMA TC39: C# Language Specification (WD13Oct01.doc)
+" References:
+"   -   ECMA-334 5th Edition: C# Language Specification
+"       https://www.ecma-international.org/publications-and-standards/standards/ecma-334/
+"   -   C# Language Design: Draft 6th Edition and later proposals
+"       https://github.com/dotnet/csharplang
 
 if exists('b:current_syntax')
   finish
@@ -19,37 +22,72 @@
 set cpoptions&vim
 
 syn keyword	csType	bool byte char decimal double float int long object sbyte short string T uint ulong ushort var void dynamic
-syn keyword	csStorage	delegate enum interface namespace struct
+syn keyword	csType	nint nuint " contextual
+
+syn keyword	csStorage	enum interface namespace struct
+syn match	csStorage	"\<delegate\>"
 syn keyword	csRepeat	break continue do for foreach goto return while
 syn keyword	csConditional	else if switch
 syn keyword	csLabel	case default
-syn match	csOperatorError	display +::+
-syn match	csGlobal	display +global::+
-" user labels (see [1] 8.6 Statements)
-syn match	csLabel	display +^\s*\I\i*\s*:\%([^:]\)\@=+
-syn keyword	csModifier	abstract const extern internal override private protected public readonly sealed static virtual volatile
-syn keyword	csConstant	false null true
-syn keyword	csException	try catch finally throw when
-syn keyword	csLinq	ascending by descending equals from group in into join let on orderby select where
-syn keyword	csAsync	async await
 
-syn keyword	csUnspecifiedStatement	as base checked event fixed in is lock nameof operator out params ref sizeof stackalloc this unchecked unsafe using
-syn keyword	csUnsupportedStatement	add remove value
+syn match	csNamespaceAlias	"@\=\h\w*\ze\_s*::" display
+syn match	csGlobalNamespaceAlias	"global\ze\_s*::" display
+syn cluster	csNamespaceAlias	contains=csGlobalNamespaceAlias,csNamespaceAlias,csNamespaceAliasQualifier
+
+" user labels
+syn match	csLabel	display +^\s*\I\i*\s*:\%([^:]\)\@=+
+
+" Function pointers
+syn match	csType	"\<delegate\s*\*" contains=csOpSymbols nextgroup=csManagedModifier skipwhite skipempty
+syn keyword	csManagedModifier	managed unmanaged contained
+
+" Modifiers
+syn match	csUsingModifier	"\<global\ze\_s\+using\>"
+syn keyword	csAccessModifier	internal private protected public
+" TODO: in new out
+syn keyword	csModifier	abstract const event override readonly sealed static virtual volatile
+syn match	csModifier	"\<\%(extern\|fixed\|unsafe\)\>"
+syn match	csModifier	"\<partial\ze\_s\+\%(class\|struct\|interface\|record\|void\)\>"
+
+syn keyword	csException	try catch finally throw when
+syn keyword	csLinq	ascending by descending equals from group in into join let on orderby select
+syn match	csLinq	"\<where\>"
+
+" Type parameter constraint clause
+syn match	csStorage	"\<where\>\ze\_s\+@\=\h\w*\_s*:"
+
+" Async
+syn keyword	csAsyncModifier	async
+syn keyword	csAsyncOperator	await
+
+syn match	csStorage	"\<extern\ze\s\+alias\>"
+syn match	csStorage	"\%(\<extern\s\+\)\@16<=alias\>"
+
+syn match	csStatement	"\<\%(checked\|unchecked\|unsafe\)\ze\_s*{"
+syn match	csStatement	"\<fixed\ze\_s*("
+syn keyword	csStatement	lock
+syn match	csStatement	"\<yield\ze\_s\+\%(return\|break\)\>"
+
+syn match	csAccessor	"\<\%(get\|set\|init\|add\|remove\)\ze\_s*\%([;{]\|=>\)"
+
+syn keyword	csAccess	base
+syn match	csAccess	"\<this\>"
+
+" Extension method parameter modifier
+syn match	csModifier	"\<this\ze\_s\+@\=\h"
+
+syn keyword	csUnspecifiedStatement	as in is nameof operator out params ref sizeof stackalloc using
+syn keyword	csUnsupportedStatement	value
 syn keyword	csUnspecifiedKeyword	explicit implicit
 
-" Contextual Keywords
-syn match	csContextualStatement	/\<yield[[:space:]\n]\+\%(return\|break\)/me=s+5
-syn match	csContextualStatement	/\<partial[[:space:]\n]\+\%(class\|struct\|interface\)/me=s+7
-syn match	csContextualStatement	/\<\%(get\|set\)\%(;\|[[:space:]\n]*{\)/me=s+3
-syn match	csContextualStatement	/\<\%(get\|set\)\s*=>/me=s+3
-syn match	csContextualStatement	/\<where\>[^:]\+:/me=s+5
-
 " Operators
-syn keyword	csTypeOf	typeof contained
-syn region	csTypeOfStatement	start="typeof(" end=")" contains=csType, csTypeOf
+syn keyword	csTypeOf	typeof nextgroup=csTypeOfOperand,csTypeOfError skipwhite skipempty
+syn region	csTypeOfOperand	matchgroup=csParens start="(" end=")" contained contains=csType
+syn match       csTypeOfError               "[^([:space:]]" contained
+syn match	csKeywordOperator	"\<\%(checked\|unchecked\)\ze\_s*("
 
 " Punctuation
-syn match	csBraces	"[{}\[\]]" display
+syn match	csBraces	"[{}[\]]" display
 syn match	csParens	"[()]" display
 syn match	csOpSymbols	"+\{1,2}" display
 syn match	csOpSymbols	"-\{1,2}" display
@@ -64,128 +102,173 @@
 syn match	csLogicSymbols	"||" display
 syn match	csLogicSymbols	"?" display
 syn match	csLogicSymbols	":" display
+syn match	csNamespaceAliasQualifier	"::" display
 
 " Generics
-syn region	csGeneric	matchgroup=csGenericBraces start="<" end=">" oneline contains=csType,csGeneric,csUserType,csUserIdentifier,csUserInterface,csUserMethod
+syn region	csGeneric	matchgroup=csGenericBraces start="<" end=">" oneline contains=csType,csGeneric,@csNamespaceAlias,csUserType,csUserIdentifier,csUserInterface,csUserMethod
 
 " Comments
 "
 " PROVIDES: @csCommentHook
 syn keyword	csTodo	contained TODO FIXME XXX NOTE HACK TBD
-syn region	csComment	start="/\*"  end="\*/" contains=@csCommentHook,csTodo,@Spell
-syn match	csComment	"//.*$" contains=@csCommentHook,csTodo,@Spell
+syn region	csBlockComment	start="/\*"  end="\*/" contains=@csCommentHook,csTodo,@Spell
+syn match	csLineComment	"//.*$" contains=@csCommentHook,csTodo,@Spell
+syn cluster	csComment	contains=csLineComment,csBlockComment
 
-" xml markup inside '///' comments
-syn cluster	xmlRegionHook	add=csXmlCommentLeader
-syn cluster	xmlCdataHook	add=csXmlCommentLeader
-syn cluster	xmlStartTagHook	add=csXmlCommentLeader
-syn keyword	csXmlTag	contained Libraries Packages Types Excluded ExcludedTypeName ExcludedLibraryName
-syn keyword	csXmlTag	contained ExcludedBucketName TypeExcluded Type TypeKind TypeSignature AssemblyInfo
-syn keyword	csXmlTag	contained AssemblyName AssemblyPublicKey AssemblyVersion AssemblyCulture Base
-syn keyword	csXmlTag	contained BaseTypeName Interfaces Interface InterfaceName Attributes Attribute
-syn keyword	csXmlTag	contained AttributeName Members Member MemberSignature MemberType MemberValue
-syn keyword	csXmlTag	contained ReturnValue ReturnType Parameters Parameter MemberOfPackage
-syn keyword	csXmlTag	contained ThreadingSafetyStatement Docs devdoc example overload remarks returns summary
-syn keyword	csXmlTag	contained threadsafe value internalonly nodoc exception param permission platnote
-syn keyword	csXmlTag	contained seealso b c i pre sub sup block code note paramref see subscript superscript
-syn keyword	csXmlTag	contained list listheader item term description altcompliant altmember
+syn region	csSummary	start="^\s*/// <summary" end="^\%\(\s*///\)\@!" transparent fold keepend
 
-syn cluster xmlTagHook add=csXmlTag
+" xml markup inside '///' and /**...*/ comments
+syn cluster	xmlRegionHook	add=csXmlLineCommentLeader,csXmlBlockCommentMiddle
+syn cluster	xmlCdataHook	add=csXmlLineCommentLeader,csXmlBlockCommentMiddle
+syn cluster	xmlStartTagHook	add=csXmlLineCommentLeader,csXmlBlockCommentMiddle
+syn cluster	xmlTagHook	add=csXmlTag
+syn cluster	xmlAttribHook	add=csXmlAttrib
 
-syn match	csXmlCommentLeader	"///" contained
-syn match	csXmlComment	"///.*$" contains=csXmlCommentLeader,@csXml,@Spell keepend
+" https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/xmldoc/recommended-tags
+syn keyword	csXmlTag	contained summary remarks
+syn keyword	csXmlTag	contained returns param paramref exception value
+syn keyword	csXmlTag	contained para list c code example
+syn keyword	csXmlTag	contained inheritdoc include
+syn keyword	csXmlTag	contained see seealso
+syn keyword	csXmlTag	contained typeparam typeparamref
+syn keyword	csXmlTag	contained b i u br a
+syn keyword	csXmlAttrib	contained cref href
+
+syn match	csXmlLineCommentLeader	"///" contained
+syn match	csXmlLineComment	"///.*$" contains=csXmlLineCommentLeader,@csXml,@Spell keepend
+syn match	csXmlBlockCommentMiddle	"^\s*\zs\*" contained
+syn region	csXmlBlockComment	start="/\*\*" end="\*/" contains=@csXml,@Spell,csXmlBlockCommentMiddle keepend
 syn include	@csXml syntax/xml.vim
 hi def link	xmlRegion Comment
 
 " Since syntax/xml.vim contains `syn spell toplevel`, we need to set it back to `default` here.
 syn spell default
 
-" [1] 9.5 Pre-processing directives
-syn region	csPreCondit	start="^\s*#\s*\%(define\|undef\|if\|elif\|else\|endif\|line\|error\|warning\|pragma\)\>" skip="\\$" end="$" contains=csComment keepend
-syn region	csRegion	matchgroup=csPreCondit start="^\s*#\s*region.*$" end="^\s*#\s*endregion" transparent fold contains=TOP
-syn region	csSummary	start="^\s*/// <summary" end="^\%\(\s*///\)\@!" transparent fold keepend
+" Pre-processing directives
+syn region	csPreProcDeclaration	start="^\s*\zs#\s*\%(define\|undef\)\>" end="$" contains=csLineComment keepend
+syn region	csPreProcConditional	start="^\s*\zs#\s*\%(if\|elif\)\>" end="$" contains=csLineComment keepend
+syn region	csPreProcConditional	start="^\s*\zs#\s*\%(else\|endif\)\>" end="$" contains=csLineComment keepend
+syn region	csPreProcLine	start="^\s*\zs#\s*line\>" end="$" contains=csLineComment keepend
+syn region	csPreProcDiagnostic	start="^\s*\zs#\s*\%(error\|warning\)\>" end="$"
+syn region	csPreProcConditionalSection	matchgroup=csPreProcRegion start="^\s*#\s*region\>.*" end="^\s*#\s*endregion\>.*" transparent fold contains=TOP
+syn region	csPreProcPragma	start="^\s*\zs#\s*pragma\>" end="$" contains=csLineComment keepend
+syn region	csPreProcNullable	start="^\s*\zs#\s*nullable\>" end="$" contains=csLineComment keepend
 
+if expand('%:e') == 'csx' || getline('1') =~ '^#!.*\<dotnet-script\>'
+  syn region	csPreProcInclude	start="^\s*\zs#\s*\%(load\|r\)\>" end="$" contains=csLineComment keepend
+  syn match	csShebang	"\%^#!.*" display
+endif
 
-syn region	csClassType	start="@\@1<!\<class\>"hs=s+6 end="[:\n{]"me=e-1 contains=csClass
+syn cluster	csPreProcessor	contains=csPreProc.*
+
+syn region	csClassType	start="\<class\>"hs=s+6 end=">" end="[:{]"me=e-1 contains=csClass
 " csUserType may be defined by user scripts/plugins - it should be contained in csNewType
-syn region	csNewType	start="@\@1<!\<new\>"hs=s+4 end="[;\n{(<\[]"me=e-1 contains=csNew,csUserType
+syn region	csNewType	start="\<new\>"hs=s+4 end="[;\n{(<\[]"me=e-1 contains=csNew,@csNamespaceAlias,csUserType
 syn region	csIsType	start=" is "hs=s+4 end="[A-Za-z0-9]\+" oneline contains=csIsAs
 syn region	csIsType	start=" as "hs=s+4 end="[A-Za-z0-9]\+" oneline contains=csIsAs
 syn keyword	csNew	new contained
 syn keyword	csClass	class contained
 syn keyword	csIsAs	is as
 
+syn keyword	csBoolean	false true
+syn keyword	csNull	null
+
 " Strings and constants
 syn match	csSpecialError	"\\." contained
 syn match	csSpecialCharError	"[^']" contained
-" [1] 9.4.4.4 Character literals
-syn match	csSpecialChar	+\\["\\'0abfnrtvx]+ contained display
-syn match	csUnicodeNumber	+\\x\x\{2,4}+ contained contains=csUnicodeSpecifier display
+" Character literals
+syn match	csSpecialChar	+\\["\\'0abfnrtv]+ contained display
+syn match	csUnicodeNumber	+\\x\x\{1,4}+ contained contains=csUnicodeSpecifier display
 syn match	csUnicodeNumber	+\\u\x\{4}+ contained contains=csUnicodeSpecifier display
-syn match	csUnicodeNumber	+\\U\x\{8}+ contained contains=csUnicodeSpecifier display
-syn match	csUnicodeSpecifier	+\\[uU]+ contained display
+syn match	csUnicodeNumber	+\\U00\x\{6}+ contained contains=csUnicodeSpecifier display
+syn match	csUnicodeSpecifier	+\\[uUx]+ contained display
 
 syn region	csString	matchgroup=csQuote start=+"+  end=+"+ end=+$+ extend contains=csSpecialChar,csSpecialError,csUnicodeNumber,@Spell
 syn match	csCharacter	"'[^']*'" contains=csSpecialChar,csSpecialCharError,csUnicodeNumber display
 syn match	csCharacter	"'\\''" contains=csSpecialChar display
 syn match	csCharacter	"'[^\\]'" display
-syn match	csNumber	"\<0[0-7]*[lL]\=\>" display
-syn match	csNumber	"\<0[xX][[:xdigit:]_]\+[lL]\=\>" display
-syn match	csNumber	"\<0[bB][01_]\+[lL]\=\>" display
-syn match	csNumber	"\<[[:digit:]_]\+[lL]\=\>" display
-syn match	csNumber	"\<[[:digit:]_]\+\.[[:digit:]_]*\%\([eE][-+]\=[[:digit:]_]\+\)\=[fFdDmM]\=" display
-syn match	csNumber	"\.[[:digit:]_]\+\%\([eE][-+]\=[[:digit:]_]\+\)\=[fFdDmM]\=" display
-syn match	csNumber	"\<[[:digit:]_]\+[eE][-+]\=[[:digit:]_]\+[fFdDmM]\=\>" display
-syn match	csNumber	"\<[[:digit:]_]\+\%\([eE][-+]\=[[:digit:]_]\+\)\=[fFdDmM]\>" display
+
+" Numbers
+syn case	ignore
+syn match	csInteger	"\<0b[01_]*[01]\%([lu]\|lu\|ul\)\=\>" display
+syn match	csInteger	"\<\d\+\%(_\+\d\+\)*\%([lu]\|lu\|ul\)\=\>" display
+syn match	csInteger	"\<0x[[:xdigit:]_]*\x\%([lu]\|lu\|ul\)\=\>" display
+syn match	csReal	"\<\d\+\%(_\+\d\+\)*\.\d\+\%(_\+\d\+\)*\%\(e[-+]\=\d\+\%(_\+\d\+\)*\)\=[fdm]\=" display
+syn match	csReal	"\.\d\+\%(_\+\d\+\)*\%(e[-+]\=\d\+\%(_\+\d\+\)*\)\=[fdm]\=\>" display
+syn match	csReal	"\<\d\+\%(_\+\d\+\)*e[-+]\=\d\+\%(_\+\d\+\)*[fdm]\=\>" display
+syn match	csReal	"\<\d\+\%(_\+\d\+\)*[fdm]\>" display
+syn case	match
+syn cluster     csNumber	contains=csInteger,csReal
 
 syn region	csInterpolatedString	matchgroup=csQuote start=+\$"+ end=+"+ extend contains=csInterpolation,csEscapedInterpolation,csSpecialChar,csSpecialError,csUnicodeNumber,@Spell
 
 syn region	csInterpolation	matchgroup=csInterpolationDelimiter start=+{+ end=+}+ keepend contained contains=@csAll,csBraced,csBracketed,csInterpolationAlign,csInterpolationFormat
 syn match	csEscapedInterpolation	"{{" transparent contains=NONE display
 syn match	csEscapedInterpolation	"}}" transparent contains=NONE display
-syn region	csInterpolationAlign	matchgroup=csInterpolationAlignDel start=+,+ end=+}+ end=+:+me=e-1 contained contains=csNumber,csConstant,csCharacter,csParens,csOpSymbols,csString,csBracketed display
+syn region	csInterpolationAlign	matchgroup=csInterpolationAlignDel start=+,+ end=+}+ end=+:+me=e-1 contained contains=@csNumber,csBoolean,csConstant,csCharacter,csParens,csOpSymbols,csString,csBracketed display
 syn match	csInterpolationFormat	+:[^}]\+}+ contained contains=csInterpolationFormatDel display
 syn match	csInterpolationAlignDel	+,+ contained display
 syn match	csInterpolationFormatDel	+:+ contained display
 
 syn region	csVerbatimString	matchgroup=csQuote start=+@"+ end=+"+ skip=+""+ extend contains=csVerbatimQuote,@Spell
 syn match	csVerbatimQuote	+""+ contained
-syn match	csQuoteError	+@$"+he=s+2,me=s+2
 
-syn region	csInterVerbString	matchgroup=csQuote start=+\$@"+ end=+"+ skip=+""+ extend contains=csInterpolation,csEscapedInterpolation,csSpecialChar,csSpecialError,csUnicodeNumber,csVerbatimQuote,@Spell
+syn region	csInterVerbString	matchgroup=csQuote start=+$@"+ start=+@$"+ end=+"+ skip=+""+ extend contains=csInterpolation,csEscapedInterpolation,csSpecialChar,csSpecialError,csUnicodeNumber,csVerbatimQuote,@Spell
+
+syn cluster	csString	contains=csString,csInterpolatedString,csVerbatimString,csInterVerbString
+
+syn cluster	csLiteral	contains=csBoolean,@csNumber,csCharacter,@csString,csNull
 
 syn region	csBracketed	matchgroup=csParens start=+(+ end=+)+ extend contained transparent contains=@csAll,csBraced,csBracketed
 syn region	csBraced	matchgroup=csParens start=+{+ end=+}+ extend contained transparent contains=@csAll,csBraced,csBracketed
 
-syn cluster	csAll	contains=csCharacter,csClassType,csComment,csContextualStatement,csEndColon,csIsType,csLabel,csLogicSymbols,csNewType,csConstant,csNumber,csOpSymbols,csOperatorError,csParens,csPreCondit,csRegion,csString,csSummary,csType,csUnicodeNumber,csUnicodeSpecifier,csInterpolatedString,csVerbatimString,csInterVerbString,csUserType,csUserIdentifier,csUserInterface,csUserMethod
+syn cluster	csAll	contains=@csLiteral,csClassType,@csComment,csEndColon,csIsType,csLabel,csLogicSymbols,csNewType,csOpSymbols,csParens,@csPreProcessor,csSummary,@csNamespaceAlias,csType,csUnicodeNumber,csUserType,csUserIdentifier,csUserInterface,csUserMethod
+
+" Keyword identifiers
+syn match csIdentifier "@\h\w*"
 
 " The default highlighting.
-hi def link	csType	Type
-hi def link	csClassType	Type
-hi def link	csIsType	Type
-hi def link	csStorage	Structure
-hi def link	csClass	Structure
-hi def link	csRepeat	Repeat
-hi def link	csConditional	Conditional
-hi def link	csLabel	Label
-hi def link	csModifier	StorageClass
-hi def link	csConstant	Constant
-hi def link	csException	Exception
-hi def link	csTypeOf	Keyword
-hi def link	csTypeOfStatement	Typedef
 hi def link	csUnspecifiedStatement	Statement
 hi def link	csUnsupportedStatement	Statement
 hi def link	csUnspecifiedKeyword	Keyword
+
+hi def link	csGlobalNamespaceAlias	Include
+
+hi def link	csType	Type
+hi def link	csClassType	Type
+hi def link	csIsType	Type
+
+hi def link	csStorage	Structure
+hi def link	csClass	Structure
 hi def link	csNew	Statement
-hi def link	csLinq	Statement
 hi def link	csIsAs 	Keyword
-hi def link	csAsync	Keyword
-hi def link	csContextualStatement	Statement
-hi def link	csOperatorError	Error
+hi def link	csAccessor	Keyword
+hi def link	csAccess	Keyword
+
+hi def link	csLinq	Statement
+
+hi def link	csStatement	Statement
+hi def link	csRepeat	Repeat
+hi def link	csConditional	Conditional
+hi def link	csLabel	Label
+hi def link	csException	Exception
+
+hi def link	csModifier	StorageClass
+hi def link	csAccessModifier	csModifier
+hi def link	csAsyncModifier	csModifier
+hi def link	csManagedModifier	csModifier
+hi def link	csUsingModifier	csModifier
 
 hi def link	csTodo	Todo
 hi def link	csComment	Comment
+hi def link	csLineComment	csComment
+hi def link	csBlockComment	csComment
 
+hi def link	csKeywordOperator	Keyword
+hi def link	csAsyncOperator	csKeywordOperator
+hi def link	csTypeOf	csKeywordOperator
+hi def link	csTypeOfOperand	Typedef
+hi def link	csTypeOfError	Error
 hi def link	csOpSymbols	Operator
 hi def link	csLogicSymbols	Operator
 
@@ -193,15 +276,29 @@
 hi def link	csSpecialCharError	Error
 hi def link	csString	String
 hi def link	csQuote	String
-hi def link	csQuoteError	Error
 hi def link	csInterpolatedString	String
 hi def link	csVerbatimString	String
 hi def link	csInterVerbString	String
 hi def link	csVerbatimQuote	SpecialChar
-hi def link	csPreCondit	PreCondit
+
+hi def link     csPreProc	PreProc
+hi def link	csPreProcDeclaration	Define
+hi def link	csPreProcConditional	PreCondit
+hi def link	csPreProcLine	csPreProc
+hi def link	csPreProcDiagnostic	csPreProc
+hi def link	csPreProcRegion	csPreProc
+hi def link	csPreProcPragma	csPreProc
+hi def link	csPreProcNullable	csPreProc
+hi def link	csPreProcInclude	csPreProc
+hi def link	csShebang	csPreProc
+
+hi def link	csConstant	Constant
+hi def link	csNull	Constant
+hi def link	csBoolean	Boolean
 hi def link	csCharacter	Character
 hi def link	csSpecialChar	SpecialChar
-hi def link	csNumber	Number
+hi def link	csInteger	Number
+hi def link	csReal	Float
 hi def link	csUnicodeNumber	SpecialChar
 hi def link	csUnicodeSpecifier	SpecialChar
 hi def link	csInterpolationDelimiter	Delimiter
@@ -212,9 +309,12 @@
 hi def link	csGenericBraces	csBraces
 
 " xml markup
-hi def link	csXmlCommentLeader	Comment
-hi def link	csXmlComment	Comment
+hi def link	csXmlLineCommentLeader	Comment
+hi def link	csXmlLineComment	Comment
+hi def link	csXmlBlockComment	Comment
+hi def link	csXmlBlockCommentMiddle	csXmlBlockComment
 hi def link	csXmlTag	Statement
+hi def link	csXmlAttrib	Statement
 
 let b:current_syntax = 'cs'
 
diff --git a/runtime/syntax/java.vim b/runtime/syntax/java.vim
index c9bb5dc..00d6071 100644
--- a/runtime/syntax/java.vim
+++ b/runtime/syntax/java.vim
@@ -2,7 +2,7 @@
 " Language:	Java
 " Maintainer:	Claudio Fleiner <claudio@fleiner.com>
 " URL:          https://github.com/fleiner/vim/blob/master/runtime/syntax/java.vim
-" Last Change:	2018 July 26
+" Last Change:	2022 Jun 08
 
 " Please check :help java.vim for comments on some of the options available.
 
@@ -23,8 +23,6 @@
 syn match javaError "[\\@`]"
 syn match javaError "<<<\|\.\.\|=>\|||=\|&&=\|\*\/"
 
-syn match javaOK "\.\.\."
-
 " use separate name so that it can be deleted in javacc.vim
 syn match   javaError2 "#\|=<"
 hi def link javaError2 javaError
@@ -59,8 +57,12 @@
 syn match   javaVarArg		"\.\.\."
 syn keyword javaScopeDecl	public protected private abstract
 
+function s:isModuleInfoDeclarationCurrentBuffer() abort
+    return fnamemodify(bufname("%"), ":t") =~ '^module-info\%(\.class\>\)\@!'
+endfunction
+
 " Java Modules(Since Java 9, for "module-info.java" file)
-if fnamemodify(bufname("%"), ":t") == "module-info.java"
+if s:isModuleInfoDeclarationCurrentBuffer()
     syn keyword javaModuleStorageClass	module transitive
     syn keyword javaModuleStmt		open requires exports opens uses provides
     syn keyword javaModuleExternal	to with
@@ -72,20 +74,42 @@
 endif
 if exists("java_highlight_all")  || exists("java_highlight_java")  || exists("java_highlight_java_lang")
   " java.lang.*
-  syn match javaLangClass "\<System\>"
-  syn keyword javaR_JavaLang NegativeArraySizeException ArrayStoreException IllegalStateException RuntimeException IndexOutOfBoundsException UnsupportedOperationException ArrayIndexOutOfBoundsException ArithmeticException ClassCastException EnumConstantNotPresentException StringIndexOutOfBoundsException IllegalArgumentException IllegalMonitorStateException IllegalThreadStateException NumberFormatException NullPointerException TypeNotPresentException SecurityException
+  "
+  " The keywords of javaR_JavaLang, javaC_JavaLang, javaE_JavaLang,
+  " and javaX_JavaLang are sub-grouped according to the Java version
+  " of their introduction, and sub-group keywords (that is, class
+  " names) are arranged in alphabetical order, so that future newer
+  " keywords can be pre-sorted and appended without disturbing
+  " the current keyword placement. The below _match_es follow suit.
+
+  syn keyword javaR_JavaLang ArithmeticException ArrayIndexOutOfBoundsException ArrayStoreException ClassCastException IllegalArgumentException IllegalMonitorStateException IllegalThreadStateException IndexOutOfBoundsException NegativeArraySizeException NullPointerException NumberFormatException RuntimeException SecurityException StringIndexOutOfBoundsException IllegalStateException UnsupportedOperationException EnumConstantNotPresentException TypeNotPresentException IllegalCallerException LayerInstantiationException
   syn cluster javaTop add=javaR_JavaLang
   syn cluster javaClasses add=javaR_JavaLang
   hi def link javaR_JavaLang javaR_Java
-  syn keyword javaC_JavaLang Process RuntimePermission StringKeySet CharacterData01 Class ThreadLocal ThreadLocalMap CharacterData0E Package Character StringCoding Long ProcessImpl ProcessEnvironment Short AssertionStatusDirectives 1PackageInfoProxy UnicodeBlock InheritableThreadLocal AbstractStringBuilder StringEnvironment ClassLoader ConditionalSpecialCasing CharacterDataPrivateUse StringBuffer StringDecoder Entry StringEntry WrappedHook StringBuilder StrictMath State ThreadGroup Runtime CharacterData02 MethodArray Object CharacterDataUndefined Integer Gate Boolean Enum Variable Subset StringEncoder Void Terminator CharsetSD IntegerCache CharacterCache Byte CharsetSE Thread SystemClassLoaderAction CharacterDataLatin1 StringValues StackTraceElement Shutdown ShortCache String ConverterSD ByteCache Lock EnclosingMethodInfo Math Float Value Double SecurityManager LongCache ProcessBuilder StringEntrySet Compiler Number UNIXProcess ConverterSE ExternalData CaseInsensitiveComparator CharacterData00 NativeLibrary
+  " Member enumerations:
+  syn match   javaC_JavaLang "\%(\<Thread\.\)\@<=\<State\>"
+  syn match   javaC_JavaLang "\%(\<Character\.\)\@<=\<UnicodeScript\>"
+  syn match   javaC_JavaLang "\%(\<ProcessBuilder\.Redirect\.\)\@<=\<Type\>"
+  syn match   javaC_JavaLang "\%(\<StackWalker\.\)\@<=\<Option\>"
+  syn match   javaC_JavaLang "\%(\<System\.Logger\.\)\@<=\<Level\>"
+  " Member classes:
+  syn match   javaC_JavaLang "\%(\<Character\.\)\@<=\<Subset\>"
+  syn match   javaC_JavaLang "\%(\<Character\.\)\@<=\<UnicodeBlock\>"
+  syn match   javaC_JavaLang "\%(\<ProcessBuilder\.\)\@<=\<Redirect\>"
+  syn match   javaC_JavaLang "\%(\<ModuleLayer\.\)\@<=\<Controller\>"
+  syn match   javaC_JavaLang "\%(\<Runtime\.\)\@<=\<Version\>"
+  syn match   javaC_JavaLang "\%(\<System\.\)\@<=\<LoggerFinder\>"
+  syn match   javaC_JavaLang "\%(\<Enum\.\)\@<=\<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 match   javaC_JavaLang "\<System\>"	" See javaDebug.
   syn cluster javaTop add=javaC_JavaLang
   syn cluster javaClasses add=javaC_JavaLang
   hi def link javaC_JavaLang javaC_Java
-  syn keyword javaE_JavaLang IncompatibleClassChangeError InternalError UnknownError ClassCircularityError AssertionError ThreadDeath IllegalAccessError NoClassDefFoundError ClassFormatError UnsupportedClassVersionError NoSuchFieldError VerifyError ExceptionInInitializerError InstantiationError LinkageError NoSuchMethodError Error UnsatisfiedLinkError StackOverflowError AbstractMethodError VirtualMachineError OutOfMemoryError
+  syn keyword javaE_JavaLang AbstractMethodError ClassCircularityError ClassFormatError Error IllegalAccessError IncompatibleClassChangeError InstantiationError InternalError LinkageError NoClassDefFoundError NoSuchFieldError NoSuchMethodError OutOfMemoryError StackOverflowError ThreadDeath UnknownError UnsatisfiedLinkError VerifyError VirtualMachineError ExceptionInInitializerError UnsupportedClassVersionError AssertionError BootstrapMethodError
   syn cluster javaTop add=javaE_JavaLang
   syn cluster javaClasses add=javaE_JavaLang
   hi def link javaE_JavaLang javaE_Java
-  syn keyword javaX_JavaLang CloneNotSupportedException Exception NoSuchMethodException IllegalAccessException NoSuchFieldException Throwable InterruptedException ClassNotFoundException InstantiationException
+  syn keyword javaX_JavaLang ClassNotFoundException CloneNotSupportedException Exception IllegalAccessException InstantiationException InterruptedException NoSuchMethodException Throwable NoSuchFieldException ReflectiveOperationException
   syn cluster javaTop add=javaX_JavaLang
   syn cluster javaClasses add=javaX_JavaLang
   hi def link javaX_JavaLang javaX_Java
@@ -118,7 +142,7 @@
   endif
 endif
 
-syn region  javaLabelRegion	transparent matchgroup=javaLabel start="\<case\>" matchgroup=NONE end=":" contains=javaNumber,javaCharacter,javaString
+syn region  javaLabelRegion	transparent matchgroup=javaLabel start="\<case\>" end="->" matchgroup=NONE end=":" contains=javaNumber,javaCharacter,javaString
 syn match   javaUserLabel	"^\s*[_$a-zA-Z][_$a-zA-Z0-9_]*\s*:"he=e-1 contains=javaLabel
 syn keyword javaLabel		default
 
@@ -126,7 +150,7 @@
 " annoying.  Was: if !exists("java_allow_cpp_keywords")
 
 " The following cluster contains all java groups except the contained ones
-syn cluster javaTop add=javaExternal,javaError,javaError,javaBranch,javaLabelRegion,javaLabel,javaConditional,javaRepeat,javaBoolean,javaConstant,javaTypedef,javaOperator,javaType,javaType,javaStatement,javaStorageClass,javaAssert,javaExceptions,javaMethodDecl,javaClassDecl,javaClassDecl,javaClassDecl,javaScopeDecl,javaError,javaError2,javaUserLabel,javaLangObject,javaAnnotation,javaVarArg
+syn cluster javaTop add=javaExternal,javaError,javaBranch,javaLabelRegion,javaLabel,javaConditional,javaRepeat,javaBoolean,javaConstant,javaTypedef,javaOperator,javaType,javaStatement,javaStorageClass,javaAssert,javaExceptions,javaMethodDecl,javaClassDecl,javaScopeDecl,javaError2,javaUserLabel,javaLangObject,javaAnnotation,javaVarArg
 
 
 " Comments
@@ -153,7 +177,7 @@
 if !exists("java_ignore_javadoc") && main_syntax != 'jsp'
   syntax case ignore
   " syntax coloring for javadoc comments (HTML)
-  syntax include @javaHtml <sfile>:p:h/html.vim
+  syntax include @javaHtml syntax/html.vim
   unlet b:current_syntax
   " HTML enables spell checking for all text that is not in a syntax item. This
   " is wrong for Java (all identifiers would be spell-checked), so it's undone
@@ -336,7 +360,7 @@
 hi def link htmlCommentPart		Special
 hi def link javaSpaceError		Error
 
-if fnamemodify(bufname("%"), ":t") == "module-info.java"
+if s:isModuleInfoDeclarationCurrentBuffer()
     hi def link javaModuleStorageClass	StorageClass
     hi def link javaModuleStmt		Statement
     hi def link javaModuleExternal	Include
@@ -348,6 +372,7 @@
   unlet main_syntax
 endif
 
+delfunction! s:isModuleInfoDeclarationCurrentBuffer
 let b:spell_options="contained"
 let &cpo = s:cpo_save
 unlet s:cpo_save
diff --git a/runtime/syntax/javascript.vim b/runtime/syntax/javascript.vim
index 1ab1c2d..e513137 100644
--- a/runtime/syntax/javascript.vim
+++ b/runtime/syntax/javascript.vim
@@ -7,7 +7,7 @@
 "		(ss) repaired several quoting and grouping glitches
 "		(ss) fixed regex parsing issue with multiple qualifiers [gi]
 "		(ss) additional factoring of keywords, globals, and members
-" Last Change:	2021 Mar 30
+" Last Change:	2022 Jun 09
 " 		2013 Jun 12: adjusted javaScriptRegexpString (Kevin Locke)
 " 		2018 Apr 14: adjusted javaScriptRegexpString (LongJohnCoder)
 
@@ -39,9 +39,16 @@
 
 syn region  javaScriptEmbed	       start=+${+  end=+}+	contains=@javaScriptEmbededExpr
 
+" number handling by Christopher Leonard chris.j.leonard@gmx.com
 syn match   javaScriptSpecialCharacter "'\\.'"
-syn match   javaScriptNumber	       "-\=\<\d\+L\=\>\|0[xX][0-9a-fA-F]\+\>"
-syn match   javaScriptNumber	       "-\=\<\d\+\%(_\d\+\)*\>"
+syn match   javaScriptNumber           "\<0[bB][0-1]\+\(_[0-1]\+\)*\>"
+syn match   javaScriptNumber           "\<0[oO][0-7]\+\(_[0-7]\+\)*\>"
+syn match   javaScriptNumber           "\<0\([0-7]\+\(_[0-7]\+\)*\)\?\>"
+syn match   javaScriptNumber           "\<0[xX][0-9a-fA-F]\+\(_[0-9a-fA-F]\+\)*\>"
+syn match   javaScriptNumber           "\<\d\+\(_\d\+\)*[eE][+-]\?\d\+\>"
+syn match   javaScriptNumber           "\<[1-9]\d*\(_\d\+\)*\(\.\(\d\+\(_\d\+\)*\([eE][+-]\?\d\+\)\?\)\?\)\?\>"
+syn match   javaScriptNumber           "\<\(\d\+\(_\d\+\)*\)\?\.\d\+\(_\d\+\)*\([eE][+-]\?\d\+\)\?\>"
+syn match   javaScriptNumber           "\<\d\+\(_\d\+\)*\.\(\d\+\(_\d\+\)*\([eE][+-]\?\d\+\)\?\)\?\>"
 syn region  javaScriptRegexpString     start=+[,(=+]\s*/[^/*]+ms=e-1,me=e-1 skip=+\\\\\|\\/+ end=+/[gimuys]\{0,2\}\s*$+ end=+/[gimuys]\{0,2\}\s*[+;.,)\]}]+me=e-1 end=+/[gimuys]\{0,2\}\s\+\/+me=e-1 contains=@htmlPreproc,javaScriptComment oneline
 
 syn keyword javaScriptConditional	if else switch
diff --git a/runtime/syntax/m4.vim b/runtime/syntax/m4.vim
index 6f229ea..366f658 100644
--- a/runtime/syntax/m4.vim
+++ b/runtime/syntax/m4.vim
@@ -21,6 +21,7 @@
 syn match  m4Variable contained "\$\d\+"
 syn match  m4Special  contained "$[@*#]"
 syn match  m4Comment  "\<\(m4_\)\=dnl\>.*" contains=SpellErrors
+syn match  m4Comment  "#.*" contains=SpellErrors
 syn match  m4Constants "\<\(m4_\)\=__file__"
 syn match  m4Constants "\<\(m4_\)\=__line__"
 syn keyword m4Constants divnum sysval m4_divnum m4_sysval
@@ -32,7 +33,7 @@
 syn keyword m4Statement divert undivert
 syn region m4Command  matchgroup=m4Type      start="\<\(m4_\)\=\(undefine\|popdef\)("he=e-1 end=")" contains=@m4Top
 syn region m4Function matchgroup=m4Type      start="\<[_A-Z][_A-Z0-9]*("he=e-1 end=")" contains=@m4Top
-syn region m4String   start="`" end="'" contained contains=@m4Top,@m4StringContents,SpellErrors
+syn region m4String   start="`" end="'" contains=SpellErrors
 syn cluster m4Top     contains=m4Comment,m4Constants,m4Special,m4Variable,m4String,m4Paren,m4Command,m4Statement,m4Function
 
 " Define the default highlighting.
diff --git a/runtime/syntax/webmacro.vim b/runtime/syntax/webmacro.vim
index fb1fff6..9597525 100644
--- a/runtime/syntax/webmacro.vim
+++ b/runtime/syntax/webmacro.vim
@@ -34,9 +34,9 @@
 
 syn region webmacroIf start="#if" start="#else" end="{"me=e-1 contains=webmacroVariable,webmacroNumber,webmacroString,webmacroBoolean,webmacroList nextgroup=webmacroBraces
 syn region webmacroForeach start="#foreach" end="{"me=e-1 contains=webmacroVariable,webmacroNumber,webmacroString,webmacroBoolean,webmacroList nextgroup=webmacroBraces
-syn match webmacroSet "#set .*$" contains=webmacroVariable,webmacroNumber,webmacroNumber,webmacroBoolean,webmacroString,webmacroList
-syn match webmacroInclude "#include .*$" contains=webmacroVariable,webmacroNumber,webmacroNumber,webmacroBoolean,webmacroString,webmacroList
-syn match webmacroParse "#parse .*$" contains=webmacroVariable,webmacroNumber,webmacroNumber,webmacroBoolean,webmacroString,webmacroList
+syn match webmacroSet "#set .*$" contains=webmacroVariable,webmacroNumber,webmacroBoolean,webmacroString,webmacroList
+syn match webmacroInclude "#include .*$" contains=webmacroVariable,webmacroNumber,webmacroBoolean,webmacroString,webmacroList
+syn match webmacroParse "#parse .*$" contains=webmacroVariable,webmacroNumber,webmacroBoolean,webmacroString,webmacroList
 syn region webmacroUse matchgroup=PreProc start="#use .*" matchgroup=PreProc end="^-.*" contains=webmacroHash,@HtmlTop
 syn region webmacroBraces matchgroup=Structure start="{" matchgroup=Structure end="}" contained transparent
 syn match webmacroBracesError "[{}]"