]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
runtime(rst): Inline literal escape support
authorMarshall Ward <marshall.ward@gmail.com>
Mon, 13 Oct 2025 18:31:49 +0000 (18:31 +0000)
committerChristian Brabandt <cb@256bit.org>
Mon, 13 Oct 2025 18:31:49 +0000 (18:31 +0000)
Escape character support was disabled for inline literals, which are
handled separately from standard inline highlights, in that escape
characters are unsupported.

related: #18566

Signed-off-by: Marshall Ward <marshall.ward@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
runtime/syntax/rst.vim

index 308ae5d68fbf3fe432e3c4ae09e157c19d2c82b3..9fab02839a7a22e8868e8bbe59818a05b1e2759c 100644 (file)
@@ -105,23 +105,33 @@ function! s:DefineOneInlineMarkup(name, start, middle, end, char_left, char_righ
     let first = a:start[0]
   endif
 
-  execute 'syn match rstEscape'.a:name.' +\\\\\|\\'.first.'+'.' contained'
+  if a:start != '``'
+    let rst_contains=' contains=rstEscape' . a:name
+    execute 'syn match rstEscape'.a:name.' +\\\\\|\\'.first.'+'.' contained'
+  else
+    let rst_contains=''
+  endif
 
   execute 'syn region rst' . a:name .
         \ ' start=+' . a:char_left . '\zs' . a:start .
         \ '\ze[^[:space:]' . a:char_right . a:start[strlen(a:start) - 1] . ']+' .
         \ a:middle .
         \ ' end=+' . a:end . '\ze\%($\|\s\|[''"’)\]}>/:.,;!?\\-]\)+' .
-        \ ' contains=rstEscape' . a:name
+        \ rst_contains
 
-  execute 'hi def link rstEscape'.a:name.' Special'
+  if a:start != '``'
+    execute 'hi def link rstEscape'.a:name.' Special'
+  endif
 endfunction
 
 function! s:DefineInlineMarkup(name, start, middle, end)
-  let middle = a:middle != "" ?
-        \ (' skip=+\\\\\|\\' . a:middle . '\|\s' . a:middle . '+') :
-        \ ""
+  if a:middle == '`'
+    let middle = ' skip=+\s'.a:middle.'+'
+  else
+    let middle = ' skip=+\\\\\|\\' . a:middle . '\|\s' . a:middle . '+'
+  endif
 
+  " Some characters may precede or follow an inline token
   call s:DefineOneInlineMarkup(a:name, a:start, middle, a:end, "'", "'")
   call s:DefineOneInlineMarkup(a:name, a:start, middle, a:end, '"', '"')
   call s:DefineOneInlineMarkup(a:name, a:start, middle, a:end, '(', ')')
@@ -129,8 +139,8 @@ function! s:DefineInlineMarkup(name, start, middle, end)
   call s:DefineOneInlineMarkup(a:name, a:start, middle, a:end, '{', '}')
   call s:DefineOneInlineMarkup(a:name, a:start, middle, a:end, '<', '>')
   call s:DefineOneInlineMarkup(a:name, a:start, middle, a:end, '’', '’')
-  " TODO: Additional Unicode Pd, Po, Pi, Pf, Ps characters
 
+  " TODO: Additional whitespace Unicode characters: Pd, Po, Pi, Pf, Ps
   call s:DefineOneInlineMarkup(a:name, a:start, middle, a:end, '\%(^\|\s\|\%ua0\|[/:]\)', '')
 
   execute 'syn match rst' . a:name .
@@ -144,7 +154,7 @@ endfunction
 call s:DefineInlineMarkup('Emphasis', '\*', '\*', '\*')
 call s:DefineInlineMarkup('StrongEmphasis', '\*\*', '\*', '\*\*')
 call s:DefineInlineMarkup('InterpretedTextOrHyperlinkReference', '`', '`', '`_\{0,2}')
-call s:DefineInlineMarkup('InlineLiteral', '``', "", '``')
+call s:DefineInlineMarkup('InlineLiteral', '``', '`', '``')
 call s:DefineInlineMarkup('SubstitutionReference', '|', '|', '|_\{0,2}')
 call s:DefineInlineMarkup('InlineInternalTargets', '_`', '`', '`')