Skip to content

Commit d7fb4cd

Browse files
marshallwardchrisbra
authored andcommitted
runtime(rst): Inline literal escape support
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>
1 parent 5485827 commit d7fb4cd

1 file changed

Lines changed: 18 additions & 8 deletions

File tree

runtime/syntax/rst.vim

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -105,32 +105,42 @@ function! s:DefineOneInlineMarkup(name, start, middle, end, char_left, char_righ
105105
let first = a:start[0]
106106
endif
107107

108-
execute 'syn match rstEscape'.a:name.' +\\\\\|\\'.first.'+'.' contained'
108+
if a:start != '``'
109+
let rst_contains=' contains=rstEscape' . a:name
110+
execute 'syn match rstEscape'.a:name.' +\\\\\|\\'.first.'+'.' contained'
111+
else
112+
let rst_contains=''
113+
endif
109114

110115
execute 'syn region rst' . a:name .
111116
\ ' start=+' . a:char_left . '\zs' . a:start .
112117
\ '\ze[^[:space:]' . a:char_right . a:start[strlen(a:start) - 1] . ']+' .
113118
\ a:middle .
114119
\ ' end=+' . a:end . '\ze\%($\|\s\|[''"’)\]}>/:.,;!?\\-]\)+' .
115-
\ ' contains=rstEscape' . a:name
120+
\ rst_contains
116121

117-
execute 'hi def link rstEscape'.a:name.' Special'
122+
if a:start != '``'
123+
execute 'hi def link rstEscape'.a:name.' Special'
124+
endif
118125
endfunction
119126

120127
function! s:DefineInlineMarkup(name, start, middle, end)
121-
let middle = a:middle != "" ?
122-
\ (' skip=+\\\\\|\\' . a:middle . '\|\s' . a:middle . '+') :
123-
\ ""
128+
if a:middle == '`'
129+
let middle = ' skip=+\s'.a:middle.'+'
130+
else
131+
let middle = ' skip=+\\\\\|\\' . a:middle . '\|\s' . a:middle . '+'
132+
endif
124133

134+
" Some characters may precede or follow an inline token
125135
call s:DefineOneInlineMarkup(a:name, a:start, middle, a:end, "'", "'")
126136
call s:DefineOneInlineMarkup(a:name, a:start, middle, a:end, '"', '"')
127137
call s:DefineOneInlineMarkup(a:name, a:start, middle, a:end, '(', ')')
128138
call s:DefineOneInlineMarkup(a:name, a:start, middle, a:end, '\[', '\]')
129139
call s:DefineOneInlineMarkup(a:name, a:start, middle, a:end, '{', '}')
130140
call s:DefineOneInlineMarkup(a:name, a:start, middle, a:end, '<', '>')
131141
call s:DefineOneInlineMarkup(a:name, a:start, middle, a:end, '', '')
132-
" TODO: Additional Unicode Pd, Po, Pi, Pf, Ps characters
133142

143+
" TODO: Additional whitespace Unicode characters: Pd, Po, Pi, Pf, Ps
134144
call s:DefineOneInlineMarkup(a:name, a:start, middle, a:end, '\%(^\|\s\|\%ua0\|[/:]\)', '')
135145

136146
execute 'syn match rst' . a:name .
@@ -144,7 +154,7 @@ endfunction
144154
call s:DefineInlineMarkup('Emphasis', '\*', '\*', '\*')
145155
call s:DefineInlineMarkup('StrongEmphasis', '\*\*', '\*', '\*\*')
146156
call s:DefineInlineMarkup('InterpretedTextOrHyperlinkReference', '`', '`', '`_\{0,2}')
147-
call s:DefineInlineMarkup('InlineLiteral', '``', "", '``')
157+
call s:DefineInlineMarkup('InlineLiteral', '``', '`', '``')
148158
call s:DefineInlineMarkup('SubstitutionReference', '|', '|', '|_\{0,2}')
149159
call s:DefineInlineMarkup('InlineInternalTargets', '_`', '`', '`')
150160

0 commit comments

Comments
 (0)