From 47949b4b46965fdabbbe84cbe14027890d4ed3b8 Mon Sep 17 00:00:00 2001 From: Minjie Xu Date: Mon, 13 Oct 2025 18:27:49 +0000 Subject: [PATCH] runtime(rst): Fix highlights nested in directive body The leading two dots of a RST directive gets matched by rstExplicitMarkup group first, and then the directive name and directive body will be matched by the groups contained in rstDirectives cluster in order. The rstExDirective group in rstDiretives matches any RST directives other than footnote, citation and hyperlink target, therefore admonition and code block will be matched by rstExDirective. This fix has rstExDirective contain rstExplicitMarkup so as to enable recursive RST directives match. The interpreted texts enclosed in quotes are not highlighted within a RST directive body, because the rstCruft cluster contains a non-existing rstInterpretedText group.It should be renamed to rstInterpretedTextOrHyperlinkReference which is defined in a DefineInlineMarkup function call. related: #18566 Signed-off-by: Minjie Xu Signed-off-by: Marshall Ward Signed-off-by: Christian Brabandt --- runtime/syntax/rst.vim | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/runtime/syntax/rst.vim b/runtime/syntax/rst.vim index 34e43932b6..4b9379f5e6 100644 --- a/runtime/syntax/rst.vim +++ b/runtime/syntax/rst.vim @@ -17,8 +17,9 @@ syn case ignore syn match rstTransition /^[=`:.'"~^_*+#-]\{4,}\s*$/ syn cluster rstCruft contains=rstEmphasis,rstStrongEmphasis, - \ rstInterpretedText,rstInlineLiteral,rstSubstitutionReference, - \ rstInlineInternalTargets,rstFootnoteReference,rstHyperlinkReference + \ rstInterpretedTextOrHyperlinkReference,rstInlineLiteral, + \ rstSubstitutionReference,rstInlineInternalTargets,rstFootnoteReference, + \ rstHyperlinkReference syn region rstLiteralBlock matchgroup=rstDelimiter \ start='\(^\z(\s*\).*\)\@<=::\n\s*\n' skip='^\s*$' end='^\(\z1\s\+\)\@!' @@ -87,7 +88,7 @@ syn region rstHyperlinkTarget matchgroup=rstDirective execute 'syn region rstExDirective contained matchgroup=rstDirective' . \ ' start=+' . s:ReferenceName . '::\_s+' . \ ' skip=+^$+' . - \ ' end=+^\s\@!+ contains=@rstCruft,rstLiteralBlock' + \ ' end=+^\s\@!+ contains=@rstCruft,rstLiteralBlock,rstExplicitMarkup' execute 'syn match rstSubstitutionDefinition contained' . \ ' /|.*|\_s\+/ nextgroup=@rstDirectives'