| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  |  | " Vim syntax file | 
					
						
							| 
									
										
										
										
											2014-10-15 22:51:52 +02:00
										 |  |  |  | " Language: reStructuredText documentation format | 
					
						
							|  |  |  |  | " Maintainer: Marshall Ward <marshall.ward@gmail.com> | 
					
						
							| 
									
										
										
										
											2014-08-23 15:31:19 +02:00
										 |  |  |  | " Previous Maintainer: Nikolai Weibull <now@bitwi.se> | 
					
						
							| 
									
										
										
										
											2016-08-18 22:54:46 +02:00
										 |  |  |  | " Website: https://github.com/marshallward/vim-restructuredtext | 
					
						
							|  |  |  |  | " Latest Revision: 2016-08-18 | 
					
						
							| 
									
										
										
										
											2005-06-29 22:40:58 +00:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | if exists("b:current_syntax") | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  |  |   finish | 
					
						
							|  |  |  |  | endif | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-06-29 22:40:58 +00:00
										 |  |  |  | let s:cpo_save = &cpo | 
					
						
							|  |  |  |  | set cpo&vim | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  |  | syn case ignore | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-06 20:54:52 +01:00
										 |  |  |  | syn match   rstTransition  /^[=`:.'"~^_*+#-]\{4,}\s*$/ | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-04-10 14:55:34 +00:00
										 |  |  |  | syn cluster rstCruft                contains=rstEmphasis,rstStrongEmphasis, | 
					
						
							|  |  |  |  |       \ rstInterpretedText,rstInlineLiteral,rstSubstitutionReference, | 
					
						
							|  |  |  |  |       \ rstInlineInternalTargets,rstFootnoteReference,rstHyperlinkReference | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-04-10 14:55:34 +00:00
										 |  |  |  | syn region  rstLiteralBlock         matchgroup=rstDelimiter | 
					
						
							|  |  |  |  |       \ start='::\_s*\n\ze\z(\s\+\)' skip='^$' end='^\z1\@!' | 
					
						
							|  |  |  |  |       \ contains=@NoSpell | 
					
						
							| 
									
										
										
										
											2005-06-29 22:40:58 +00:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-04-10 14:55:34 +00:00
										 |  |  |  | syn region  rstQuotedLiteralBlock   matchgroup=rstDelimiter | 
					
						
							|  |  |  |  |       \ start="::\_s*\n\ze\z([!\"#$%&'()*+,-./:;<=>?@[\]^_`{|}~]\)" | 
					
						
							|  |  |  |  |       \ end='^\z1\@!' contains=@NoSpell | 
					
						
							| 
									
										
										
										
											2005-06-29 22:40:58 +00:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-04-10 14:55:34 +00:00
										 |  |  |  | syn region  rstDoctestBlock         oneline display matchgroup=rstDelimiter | 
					
						
							|  |  |  |  |       \ start='^>>>\s' end='^$' | 
					
						
							| 
									
										
										
										
											2005-06-29 22:40:58 +00:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-04-10 14:55:34 +00:00
										 |  |  |  | syn region  rstTable                transparent start='^\n\s*+[-=+]\+' end='^$' | 
					
						
							|  |  |  |  |       \ contains=rstTableLines,@rstCruft | 
					
						
							|  |  |  |  | syn match   rstTableLines           contained display '|\|+\%(=\+\|-\+\)\=' | 
					
						
							| 
									
										
										
										
											2005-06-29 22:40:58 +00:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-04-10 14:55:34 +00:00
										 |  |  |  | syn region  rstSimpleTable          transparent | 
					
						
							|  |  |  |  |       \ start='^\n\%(\s*\)\@>\%(\%(=\+\)\@>\%(\s\+\)\@>\)\%(\%(\%(=\+\)\@>\%(\s*\)\@>\)\+\)\@>$' | 
					
						
							|  |  |  |  |       \ end='^$' | 
					
						
							|  |  |  |  |       \ contains=rstSimpleTableLines,@rstCruft | 
					
						
							|  |  |  |  | syn match   rstSimpleTableLines     contained display | 
					
						
							|  |  |  |  |       \ '^\%(\s*\)\@>\%(\%(=\+\)\@>\%(\s\+\)\@>\)\%(\%(\%(=\+\)\@>\%(\s*\)\@>\)\+\)\@>$' | 
					
						
							|  |  |  |  | syn match   rstSimpleTableLines     contained display | 
					
						
							|  |  |  |  |       \ '^\%(\s*\)\@>\%(\%(-\+\)\@>\%(\s\+\)\@>\)\%(\%(\%(-\+\)\@>\%(\s*\)\@>\)\+\)\@>$' | 
					
						
							| 
									
										
										
										
											2005-06-29 22:40:58 +00:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-04-10 14:55:34 +00:00
										 |  |  |  | syn cluster rstDirectives           contains=rstFootnote,rstCitation, | 
					
						
							|  |  |  |  |       \ rstHyperlinkTarget,rstExDirective | 
					
						
							| 
									
										
										
										
											2005-06-29 22:40:58 +00:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-23 15:31:19 +02:00
										 |  |  |  | syn match   rstExplicitMarkup       '^\s*\.\.\_s' | 
					
						
							| 
									
										
										
										
											2006-04-10 14:55:34 +00:00
										 |  |  |  |       \ nextgroup=@rstDirectives,rstComment,rstSubstitutionDefinition | 
					
						
							| 
									
										
										
										
											2005-06-29 22:40:58 +00:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-04-10 14:55:34 +00:00
										 |  |  |  | let s:ReferenceName = '[[:alnum:]]\+\%([_.-][[:alnum:]]\+\)*' | 
					
						
							| 
									
										
										
										
											2005-06-29 22:40:58 +00:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-04-10 14:55:34 +00:00
										 |  |  |  | syn keyword     rstTodo             contained FIXME TODO XXX NOTE | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-04-10 14:55:34 +00:00
										 |  |  |  | execute 'syn region rstComment contained' . | 
					
						
							|  |  |  |  |       \ ' start=/.*/' | 
					
						
							|  |  |  |  |       \ ' end=/^\s\@!/ contains=rstTodo' | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 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' | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | syn region rstHyperlinkTarget contained matchgroup=rstDirective | 
					
						
							|  |  |  |  |       \ start='_\%(_\|[^:\\]*\%(\\.[^:\\]*\)*\):\_s' skip=+^$+ end=+^\s\@!+ | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | syn region rstHyperlinkTarget contained matchgroup=rstDirective | 
					
						
							|  |  |  |  |       \ start='_`[^`\\]*\%(\\.[^`\\]*\)*`:\_s' skip=+^$+ end=+^\s\@!+ | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | syn region rstHyperlinkTarget matchgroup=rstDirective | 
					
						
							|  |  |  |  |       \ start=+^__\_s+ skip=+^$+ end=+^\s\@!+ | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | execute 'syn region rstExDirective contained matchgroup=rstDirective' . | 
					
						
							|  |  |  |  |       \ ' start=+' . s:ReferenceName . '::\_s+' . | 
					
						
							|  |  |  |  |       \ ' skip=+^$+' . | 
					
						
							| 
									
										
										
										
											2015-09-08 23:36:10 +02:00
										 |  |  |  |       \ ' end=+^\s\@!+ contains=@rstCruft,rstLiteralBlock' | 
					
						
							| 
									
										
										
										
											2006-04-10 14:55:34 +00:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | execute 'syn match rstSubstitutionDefinition contained' . | 
					
						
							|  |  |  |  |       \ ' /|' . s:ReferenceName . '|\_s\+/ nextgroup=@rstDirectives' | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | function! s:DefineOneInlineMarkup(name, start, middle, end, char_left, char_right) | 
					
						
							|  |  |  |  |   execute 'syn region rst' . a:name . | 
					
						
							|  |  |  |  |         \ ' start=+' . a:char_left . '\zs' . a:start . | 
					
						
							| 
									
										
										
										
											2007-05-10 19:06:20 +00:00
										 |  |  |  |         \ '\ze[^[:space:]' . a:char_right . a:start[strlen(a:start) - 1] . ']+' . | 
					
						
							| 
									
										
										
										
											2006-04-10 14:55:34 +00:00
										 |  |  |  |         \ a:middle . | 
					
						
							| 
									
										
										
										
											2016-08-18 22:54:46 +02:00
										 |  |  |  |         \ ' end=+\S' . a:end . '\ze\%($\|\s\|[''"’)\]}>/:.,;!?\\-]\)+' | 
					
						
							| 
									
										
										
										
											2006-04-10 14:55:34 +00:00
										 |  |  |  | endfunction | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | function! s:DefineInlineMarkup(name, start, middle, end) | 
					
						
							|  |  |  |  |   let middle = a:middle != "" ? | 
					
						
							|  |  |  |  |         \ (' skip=+\\\\\|\\' . a:middle . '+') : | 
					
						
							|  |  |  |  |         \ "" | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   call s:DefineOneInlineMarkup(a:name, a:start, middle, a:end, "'", "'") | 
					
						
							| 
									
										
										
										
											2014-08-23 15:31:19 +02:00
										 |  |  |  |   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, '\[', '\]') | 
					
						
							|  |  |  |  |   call s:DefineOneInlineMarkup(a:name, a:start, middle, a:end, '{', '}') | 
					
						
							|  |  |  |  |   call s:DefineOneInlineMarkup(a:name, a:start, middle, a:end, '<', '>') | 
					
						
							| 
									
										
										
										
											2016-08-18 22:54:46 +02:00
										 |  |  |  |   call s:DefineOneInlineMarkup(a:name, a:start, middle, a:end, '’', '’') | 
					
						
							|  |  |  |  |   " TODO: Additional Unicode Pd, Po, Pi, Pf, Ps characters | 
					
						
							| 
									
										
										
										
											2006-04-10 14:55:34 +00:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  |   call s:DefineOneInlineMarkup(a:name, a:start, middle, a:end, '\%(^\|\s\|[/:]\)', '') | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   execute 'syn match rst' . a:name . | 
					
						
							|  |  |  |  |         \ ' +\%(^\|\s\|[''"([{</:]\)\zs' . a:start . | 
					
						
							|  |  |  |  |         \ '[^[:space:]' . a:start[strlen(a:start) - 1] . ']' | 
					
						
							|  |  |  |  |         \ a:end . '\ze\%($\|\s\|[''")\]}>/:.,;!?\\-]\)+' | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   execute 'hi def link rst' . a:name . 'Delimiter' . ' rst' . a:name | 
					
						
							|  |  |  |  | endfunction | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | call s:DefineInlineMarkup('Emphasis', '\*', '\*', '\*') | 
					
						
							|  |  |  |  | call s:DefineInlineMarkup('StrongEmphasis', '\*\*', '\*', '\*\*') | 
					
						
							|  |  |  |  | call s:DefineInlineMarkup('InterpretedTextOrHyperlinkReference', '`', '`', '`_\{0,2}') | 
					
						
							|  |  |  |  | call s:DefineInlineMarkup('InlineLiteral', '``', "", '``') | 
					
						
							|  |  |  |  | call s:DefineInlineMarkup('SubstitutionReference', '|', '|', '|_\{0,2}') | 
					
						
							|  |  |  |  | call s:DefineInlineMarkup('InlineInternalTargets', '_`', '`', '`') | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-15 20:57:49 +01:00
										 |  |  |  | syn match   rstSections "^\%(\([=`:.'"~^_*+#-]\)\1\+\n\)\=.\+\n\([=`:.'"~^_*+#-]\)\2\+$" | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-04-10 14:55:34 +00:00
										 |  |  |  | " TODO: Can’t remember why these two can’t be defined like the ones above. | 
					
						
							|  |  |  |  | execute 'syn match rstFootnoteReference contains=@NoSpell' . | 
					
						
							|  |  |  |  |       \ ' +\[\%(\d\+\|#\%(' . s:ReferenceName . '\)\=\|\*\)\]_+' | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | execute 'syn match rstCitationReference contains=@NoSpell' . | 
					
						
							| 
									
										
										
										
											2007-05-10 19:06:20 +00:00
										 |  |  |  |       \ ' +\[' . s:ReferenceName . '\]_\ze\%($\|\s\|[''")\]}>/:.,;!?\\-]\)+' | 
					
						
							| 
									
										
										
										
											2006-04-10 14:55:34 +00:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | execute 'syn match rstHyperlinkReference' . | 
					
						
							| 
									
										
										
										
											2007-05-10 19:06:20 +00:00
										 |  |  |  |       \ ' /\<' . s:ReferenceName . '__\=\ze\%($\|\s\|[''")\]}>/:.,;!?\\-]\)/' | 
					
						
							| 
									
										
										
										
											2006-04-10 14:55:34 +00:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | syn match   rstStandaloneHyperlink  contains=@NoSpell | 
					
						
							|  |  |  |  |       \ "\<\%(\%(\%(https\=\|file\|ftp\|gopher\)://\|\%(mailto\|news\):\)[^[:space:]'\"<>]\+\|www[[:alnum:]_-]*\.[[:alnum:]_-]\+\.[^[:space:]'\"<>]\+\)[[:alnum:]/]" | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-11-15 21:28:22 +01:00
										 |  |  |  | syn region rstCodeBlock contained matchgroup=rstDirective | 
					
						
							| 
									
										
										
										
											2016-06-17 12:48:11 +02:00
										 |  |  |  |       \ start=+\%(sourcecode\|code\%(-block\)\=\)::\s\+\w*\_s*\n\ze\z(\s\+\)+ | 
					
						
							| 
									
										
										
										
											2012-11-15 21:28:22 +01:00
										 |  |  |  |       \ skip=+^$+ | 
					
						
							| 
									
										
										
										
											2014-08-23 15:31:19 +02:00
										 |  |  |  |       \ end=+^\z1\@!+ | 
					
						
							| 
									
										
										
										
											2012-11-15 21:28:22 +01:00
										 |  |  |  |       \ contains=@NoSpell | 
					
						
							|  |  |  |  | syn cluster rstDirectives add=rstCodeBlock | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | if !exists('g:rst_syntax_code_list') | 
					
						
							| 
									
										
										
										
											2014-08-23 15:31:19 +02:00
										 |  |  |  |     let g:rst_syntax_code_list = ['vim', 'java', 'cpp', 'lisp', 'php', | 
					
						
							|  |  |  |  |                                 \ 'python', 'perl', 'sh'] | 
					
						
							| 
									
										
										
										
											2012-11-15 21:28:22 +01:00
										 |  |  |  | endif | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | for code in g:rst_syntax_code_list | 
					
						
							|  |  |  |  |     unlet! b:current_syntax | 
					
						
							| 
									
										
										
										
											2014-10-15 22:51:52 +02:00
										 |  |  |  |     " guard against setting 'isk' option which might cause problems (issue #108) | 
					
						
							|  |  |  |  |     let prior_isk = &l:iskeyword | 
					
						
							| 
									
										
										
										
											2012-11-15 21:28:22 +01:00
										 |  |  |  |     exe 'syn include @rst'.code.' syntax/'.code.'.vim' | 
					
						
							| 
									
										
										
										
											2016-06-17 12:48:11 +02:00
										 |  |  |  |     exe 'syn region rstDirective'.code.' matchgroup=rstDirective fold' | 
					
						
							|  |  |  |  |                 \.' start=#\%(sourcecode\|code\%(-block\)\=\)::\s\+'.code.'\_s*\n\ze\z(\s\+\)#' | 
					
						
							|  |  |  |  |                 \.' skip=#^$#' | 
					
						
							|  |  |  |  |                 \.' end=#^\z1\@!#' | 
					
						
							|  |  |  |  |                 \.' contains=@NoSpell,@rst'.code | 
					
						
							| 
									
										
										
										
											2012-11-15 21:28:22 +01:00
										 |  |  |  |     exe 'syn cluster rstDirectives add=rstDirective'.code | 
					
						
							| 
									
										
										
										
											2014-10-15 22:51:52 +02:00
										 |  |  |  |     " reset 'isk' setting, if it has been changed | 
					
						
							|  |  |  |  |     if &l:iskeyword !=# prior_isk | 
					
						
							|  |  |  |  |         let &l:iskeyword = prior_isk | 
					
						
							|  |  |  |  |     endif | 
					
						
							|  |  |  |  |     unlet! prior_isk | 
					
						
							| 
									
										
										
										
											2012-11-15 21:28:22 +01:00
										 |  |  |  | endfor | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-06 21:36:40 +02:00
										 |  |  |  | " TODO: Use better syncing. | 
					
						
							|  |  |  |  | syn sync minlines=50 linebreaks=2 | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-04-10 14:55:34 +00:00
										 |  |  |  | hi def link rstTodo                         Todo | 
					
						
							|  |  |  |  | hi def link rstComment                      Comment | 
					
						
							| 
									
										
										
										
											2012-08-15 17:43:31 +02:00
										 |  |  |  | hi def link rstSections                     Title | 
					
						
							|  |  |  |  | hi def link rstTransition                   rstSections | 
					
						
							| 
									
										
										
										
											2006-04-10 14:55:34 +00:00
										 |  |  |  | hi def link rstLiteralBlock                 String | 
					
						
							|  |  |  |  | hi def link rstQuotedLiteralBlock           String | 
					
						
							|  |  |  |  | hi def link rstDoctestBlock                 PreProc | 
					
						
							|  |  |  |  | hi def link rstTableLines                   rstDelimiter | 
					
						
							|  |  |  |  | hi def link rstSimpleTableLines             rstTableLines | 
					
						
							|  |  |  |  | hi def link rstExplicitMarkup               rstDirective | 
					
						
							|  |  |  |  | hi def link rstDirective                    Keyword | 
					
						
							|  |  |  |  | hi def link rstFootnote                     String | 
					
						
							|  |  |  |  | hi def link rstCitation                     String | 
					
						
							|  |  |  |  | hi def link rstHyperlinkTarget              String | 
					
						
							|  |  |  |  | hi def link rstExDirective                  String | 
					
						
							|  |  |  |  | hi def link rstSubstitutionDefinition       rstDirective | 
					
						
							|  |  |  |  | hi def link rstDelimiter                    Delimiter | 
					
						
							| 
									
										
										
										
											2016-08-18 22:54:46 +02:00
										 |  |  |  | hi def rstEmphasis ctermfg=13 term=italic cterm=italic gui=italic | 
					
						
							|  |  |  |  | hi def rstStrongEmphasis ctermfg=1 term=bold cterm=bold gui=bold | 
					
						
							| 
									
										
										
										
											2006-04-10 14:55:34 +00:00
										 |  |  |  | hi def link rstInterpretedTextOrHyperlinkReference  Identifier | 
					
						
							|  |  |  |  | hi def link rstInlineLiteral                String | 
					
						
							|  |  |  |  | hi def link rstSubstitutionReference        PreProc | 
					
						
							|  |  |  |  | hi def link rstInlineInternalTargets        Identifier | 
					
						
							|  |  |  |  | hi def link rstFootnoteReference            Identifier | 
					
						
							|  |  |  |  | hi def link rstCitationReference            Identifier | 
					
						
							|  |  |  |  | hi def link rstHyperLinkReference           Identifier | 
					
						
							|  |  |  |  | hi def link rstStandaloneHyperlink          Identifier | 
					
						
							| 
									
										
										
										
											2012-11-15 21:28:22 +01:00
										 |  |  |  | hi def link rstCodeBlock                    String | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | let b:current_syntax = "rst" | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-06-29 22:40:58 +00:00
										 |  |  |  | let &cpo = s:cpo_save | 
					
						
							|  |  |  |  | unlet s:cpo_save |