summaryrefslogtreecommitdiffstats
path: root/syntax/rst.vim
diff options
context:
space:
mode:
Diffstat (limited to 'syntax/rst.vim')
-rw-r--r--syntax/rst.vim36
1 files changed, 22 insertions, 14 deletions
diff --git a/syntax/rst.vim b/syntax/rst.vim
index f20eafeb..81035220 100644
--- a/syntax/rst.vim
+++ b/syntax/rst.vim
@@ -33,8 +33,11 @@ syn region rstQuotedLiteralBlock matchgroup=rstDelimiter
\ start="::\_s*\n\ze\z([!\"#$%&'()*+,-./:;<=>?@[\]^_`{|}~]\)"
\ end='^\z1\@!' contains=@NoSpell
-syn region rstDoctestBlock oneline display matchgroup=rstDelimiter
+syn region rstDoctestBlock matchgroup=rstDoctestBlockPrompt
\ start='^>>>\s' end='^$'
+ \ contains=rstDoctestBlockPrompt
+
+syn match rstDoctestBlockPrompt contained '^>>>\s'
syn region rstTable transparent start='^\n\s*+[-=+]\+' end='^$'
\ contains=rstTableLines,@rstCruft
@@ -53,7 +56,8 @@ syn cluster rstDirectives contains=rstFootnote,rstCitation,
\ rstHyperlinkTarget,rstExDirective
syn match rstExplicitMarkup '^\s*\.\.\_s'
- \ nextgroup=@rstDirectives,rstComment,rstSubstitutionDefinition
+ \ nextgroup=@rstDirectives,rstSubstitutionDefinition
+ \ contains=rstComment
" "Simple reference names are single words consisting of alphanumerics plus
" isolated (no two adjacent) internal hyphens, underscores, periods, colons
@@ -62,20 +66,23 @@ let s:ReferenceName = '[[:alnum:]]\%([-_.:+]\?[[:alnum:]]\+\)*'
syn keyword rstTodo contained FIXME TODO XXX NOTE
-execute 'syn region rstComment contained' .
- \ ' start=/.*/'
+syn region rstComment
+ \ start='\v^\z(\s*)\.\.(\_s+[\[|_]|\_s+.*::)@!' skip=+^$+ end=/^\(\z1 \)\@!/
+ \ contains=@Spell,rstTodo
+
+" Note: Order matters for rstCitation and rstFootnote as the regex for
+" citations also matches numeric only patterns, e.g. [1], which are footnotes.
+" Since we define rstFootnote after rstCitation, it takes precedence, see
+" |:syn-define|.
+execute 'syn region rstCitation contained matchgroup=rstDirective' .
+ \ ' start=+\[' . s:ReferenceName . '\]\_s+' .
\ ' skip=+^$+' .
- \ ' end=/^\s\@!/ contains=rstTodo'
+ \ ' end=+^\s\@!+ contains=@Spell,@rstCruft'
execute 'syn region rstFootnote contained matchgroup=rstDirective' .
\ ' start=+\[\%(\d\+\|#\%(' . s:ReferenceName . '\)\=\|\*\)\]\_s+' .
\ ' skip=+^$+' .
- \ ' end=+^\s\@!+ contains=@rstCruft,@NoSpell'
-
-execute 'syn region rstCitation contained matchgroup=rstDirective' .
- \ ' start=+\[' . s:ReferenceName . '\]\_s+' .
- \ ' skip=+^$+' .
- \ ' end=+^\s\@!+ contains=@rstCruft,@NoSpell'
+ \ ' end=+^\s\@!+ contains=@Spell,@rstCruft'
syn region rstHyperlinkTarget contained matchgroup=rstDirective
\ start='_\%(_\|[^:\\]*\%(\\.[^:\\]*\)*\):\_s' skip=+^$+ end=+^\s\@!+
@@ -89,7 +96,7 @@ syn region rstHyperlinkTarget matchgroup=rstDirective
execute 'syn region rstExDirective contained matchgroup=rstDirective' .
\ ' start=+' . s:ReferenceName . '::\_s+' .
\ ' skip=+^$+' .
- \ ' end=+^\s\@!+ contains=@rstCruft,rstLiteralBlock,rstExplicitMarkup'
+ \ ' end=+^\s\@!+ contains=@Spell,@rstCruft,rstLiteralBlock,rstExplicitMarkup'
execute 'syn match rstSubstitutionDefinition contained' .
\ ' /|.*|\_s\+/ nextgroup=@rstDirectives'
@@ -103,10 +110,10 @@ function! s:DefineOneInlineMarkup(name, start, middle, end, char_left, char_righ
endif
if a:start != '``'
- let rst_contains=' contains=rstEscape' . a:name
+ let rst_contains=' contains=@Spell,rstEscape' . a:name
execute 'syn match rstEscape'.a:name.' +\\\\\|\\'.first.'+'.' contained'
else
- let rst_contains=''
+ let rst_contains=' contains=@Spell'
endif
execute 'syn region rst' . a:name .
@@ -271,6 +278,7 @@ hi def link rstTransition rstSections
hi def link rstLiteralBlock String
hi def link rstQuotedLiteralBlock String
hi def link rstDoctestBlock PreProc
+hi def link rstDoctestBlockPrompt rstDelimiter
hi def link rstTableLines rstDelimiter
hi def link rstSimpleTableLines rstTableLines
hi def link rstExplicitMarkup rstDirective