| 
									
										
										
										
											2023-02-27 15:49:53 +00:00
										 |  |  | " Language: Markdown with chunks of R, Python and other languages | 
					
						
							|  |  |  | " Maintainer: Jakson Aquino <jalvesaq@gmail.com> | 
					
						
							| 
									
										
										
										
											2016-03-12 12:57:59 +01:00
										 |  |  | " Homepage: https://github.com/jalvesaq/R-Vim-runtime | 
					
						
							| 
									
										
										
										
											2023-02-27 15:49:53 +00:00
										 |  |  | " Last Change: Fri Feb 24, 2023  08:28AM | 
					
						
							| 
									
										
										
										
											2017-04-09 20:11:58 +02:00
										 |  |  | " | 
					
						
							|  |  |  | "   For highlighting pandoc extensions to markdown like citations and TeX and | 
					
						
							|  |  |  | "   many other advanced features like folding of markdown sections, it is | 
					
						
							|  |  |  | "   recommended to install the vim-pandoc filetype plugin as well as the | 
					
						
							|  |  |  | "   vim-pandoc-syntax filetype plugin from https://github.com/vim-pandoc. | 
					
						
							| 
									
										
										
										
											2018-08-28 22:58:02 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-10 22:01:47 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-12 12:57:59 +01:00
										 |  |  | if exists("b:current_syntax") | 
					
						
							| 
									
										
										
										
											2014-07-10 22:01:47 +02:00
										 |  |  |   finish | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-27 15:49:53 +00:00
										 |  |  | let s:cpo_save = &cpo | 
					
						
							|  |  |  | set cpo&vim | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-04-21 18:09:37 +02:00
										 |  |  | " Highlight the header of the chunks as R code | 
					
						
							|  |  |  | let g:rmd_syn_hl_chunk = get(g:, 'rmd_syn_hl_chunk', 0) | 
					
						
							| 
									
										
										
										
											2018-08-28 22:58:02 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | " Pandoc-syntax has more features, but it is slower. | 
					
						
							| 
									
										
										
										
											2017-04-09 20:11:58 +02:00
										 |  |  | " https://github.com/vim-pandoc/vim-pandoc-syntax | 
					
						
							| 
									
										
										
										
											2023-02-27 15:49:53 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | " Don't waste time loading syntax that will be discarded: | 
					
						
							|  |  |  | let s:save_pandoc_lngs = get(g:, 'pandoc#syntax#codeblocks#embeds#langs', []) | 
					
						
							|  |  |  | let g:pandoc#syntax#codeblocks#embeds#langs = [] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " Step_1: Source pandoc.vim if it is installed: | 
					
						
							| 
									
										
										
										
											2014-07-10 22:01:47 +02:00
										 |  |  | runtime syntax/pandoc.vim | 
					
						
							|  |  |  | if exists("b:current_syntax") | 
					
						
							| 
									
										
										
										
											2023-02-27 15:49:53 +00:00
										 |  |  |   if hlexists('pandocDelimitedCodeBlock') | 
					
						
							|  |  |  |     syn clear pandocDelimitedCodeBlock | 
					
						
							|  |  |  |   endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if len(s:save_pandoc_lngs) > 0 && !exists('g:rmd_fenced_languages') | 
					
						
							|  |  |  |     let g:rmd_fenced_languages = deepcopy(s:save_pandoc_lngs) | 
					
						
							|  |  |  |   endif | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-04-21 18:09:37 +02:00
										 |  |  |   " Recognize inline R code | 
					
						
							| 
									
										
										
										
											2023-02-27 15:49:53 +00:00
										 |  |  |   syn region rmdrInline matchgroup=rmdInlineDelim start="`r "  end="`" contains=@Rmdr containedin=pandocLaTeXRegion,yamlFlowString keepend | 
					
						
							|  |  |  | else | 
					
						
							|  |  |  |   " Step_2: Source markdown.vim if pandoc.vim is not installed | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   " Configuration if not using pandoc syntax: | 
					
						
							|  |  |  |   " Add syntax highlighting of YAML header | 
					
						
							|  |  |  |   let g:rmd_syn_hl_yaml = get(g:, 'rmd_syn_hl_yaml', 1) | 
					
						
							|  |  |  |   " Add syntax highlighting of citation keys | 
					
						
							|  |  |  |   let g:rmd_syn_hl_citations = get(g:, 'rmd_syn_hl_citations', 1) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   " R chunks will not be highlighted by syntax/markdown because their headers | 
					
						
							|  |  |  |   " follow a non standard pattern: "```{lang" instead of "^```lang". | 
					
						
							|  |  |  |   " Make a copy of g:markdown_fenced_languages to highlight the chunks later: | 
					
						
							|  |  |  |   if exists('g:markdown_fenced_languages') && !exists('g:rmd_fenced_languages') | 
					
						
							|  |  |  |     let g:rmd_fenced_languages = deepcopy(g:markdown_fenced_languages) | 
					
						
							|  |  |  |   endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if exists('g:markdown_fenced_languages') && len(g:markdown_fenced_languages) > 0 | 
					
						
							|  |  |  |     let s:save_mfl = deepcopy(g:markdown_fenced_languages) | 
					
						
							|  |  |  |   endif | 
					
						
							|  |  |  |   " Don't waste time loading syntax that will be discarded: | 
					
						
							|  |  |  |   let g:markdown_fenced_languages = [] | 
					
						
							|  |  |  |   runtime syntax/markdown.vim | 
					
						
							|  |  |  |   if exists('s:save_mfl') > 0 | 
					
						
							|  |  |  |     let g:markdown_fenced_languages = deepcopy(s:save_mfl) | 
					
						
							|  |  |  |     unlet s:save_mfl | 
					
						
							|  |  |  |   endif | 
					
						
							|  |  |  |   syn region rmdrInline matchgroup=rmdInlineDelim start="`r "  end="`" contains=@Rmdr keepend | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   " Step_2a: Add highlighting for both YAML and citations which are pandoc | 
					
						
							|  |  |  |   " specific, but also used in Rmd files | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   " You don't need this if either your markdown/syntax.vim already highlights | 
					
						
							|  |  |  |   " the YAML header or you are writing standard markdown | 
					
						
							|  |  |  |   if g:rmd_syn_hl_yaml | 
					
						
							|  |  |  |     " Basic highlighting of YAML header | 
					
						
							|  |  |  |     syn match rmdYamlFieldTtl /^\s*\zs\w\%(-\|\w\)*\ze:/ contained | 
					
						
							|  |  |  |     syn match rmdYamlFieldTtl /^\s*-\s*\zs\w\%(-\|\w\)*\ze:/ contained | 
					
						
							|  |  |  |     syn region yamlFlowString matchgroup=yamlFlowStringDelimiter start='"' skip='\\"' end='"' contains=yamlEscape,rmdrInline contained | 
					
						
							|  |  |  |     syn region yamlFlowString matchgroup=yamlFlowStringDelimiter start="'" skip="''"  end="'" contains=yamlSingleEscape,rmdrInline contained | 
					
						
							|  |  |  |     syn match  yamlEscape contained '\\\%([\\"abefnrtv\^0_ NLP\n]\|x\x\x\|u\x\{4}\|U\x\{8}\)' | 
					
						
							|  |  |  |     syn match  yamlSingleEscape contained "''" | 
					
						
							|  |  |  |     syn match yamlComment /#.*/ contained | 
					
						
							|  |  |  |     " A second colon is a syntax error, unles within a string or following !expr | 
					
						
							|  |  |  |     syn match yamlColonError /:\s*[^'^"^!]*:/ contained | 
					
						
							|  |  |  |     if &filetype == 'quarto' | 
					
						
							|  |  |  |       syn region pandocYAMLHeader matchgroup=rmdYamlBlockDelim start=/\%(\%^\|\_^\s*\n\)\@<=\_^-\{3}\ze\n.\+/ end=/^---$/ keepend contains=rmdYamlFieldTtl,yamlFlowString,yamlComment,yamlColonError | 
					
						
							| 
									
										
										
										
											2021-04-21 18:09:37 +02:00
										 |  |  |     else | 
					
						
							| 
									
										
										
										
											2023-02-27 15:49:53 +00:00
										 |  |  |       syn region pandocYAMLHeader matchgroup=rmdYamlBlockDelim start=/\%(\%^\|\_^\s*\n\)\@<=\_^-\{3}\ze\n.\+/ end=/^\([-.]\)\1\{2}$/ keepend contains=rmdYamlFieldTtl,yamlFlowString,yamlComment,yamlColonError | 
					
						
							| 
									
										
										
										
											2021-04-21 18:09:37 +02:00
										 |  |  |     endif | 
					
						
							| 
									
										
										
										
											2023-02-27 15:49:53 +00:00
										 |  |  |     hi def link rmdYamlBlockDelim Delimiter | 
					
						
							|  |  |  |     hi def link rmdYamlFieldTtl Identifier | 
					
						
							|  |  |  |     hi def link yamlFlowString String | 
					
						
							|  |  |  |     hi def link yamlComment Comment | 
					
						
							|  |  |  |     hi def link yamlColonError Error | 
					
						
							|  |  |  |   endif | 
					
						
							| 
									
										
										
										
											2018-08-28 22:58:02 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-27 15:49:53 +00:00
										 |  |  |   " You don't need this if either your markdown/syntax.vim already highlights | 
					
						
							|  |  |  |   " citations or you are writing standard markdown | 
					
						
							|  |  |  |   if g:rmd_syn_hl_citations | 
					
						
							|  |  |  |     " From vim-pandoc-syntax | 
					
						
							|  |  |  |     " parenthetical citations | 
					
						
							|  |  |  |     syn match pandocPCite /\^\@<!\[[^\[\]]\{-}-\{0,1}@[[:alnum:]_][[:alnum:]à-öø-ÿÀ-ÖØ-ß_:.#$%&\-+?<>~\/]*.\{-}\]/ contains=pandocEmphasis,pandocStrong,pandocLatex,pandocCiteKey,@Spell,pandocAmpersandEscape display | 
					
						
							|  |  |  |     " in-text citations with location | 
					
						
							|  |  |  |     syn match pandocICite /@[[:alnum:]_][[:alnum:]à-öø-ÿÀ-ÖØ-ß_:.#$%&\-+?<>~\/]*\s\[.\{-1,}\]/ contains=pandocCiteKey,@Spell display | 
					
						
							|  |  |  |     " cite keys | 
					
						
							|  |  |  |     syn match pandocCiteKey /\(-\=@[[:alnum:]_][[:alnum:]à-öø-ÿÀ-ÖØ-ß_:.#$%&\-+?<>~\/]*\)/ containedin=pandocPCite,pandocICite contains=@NoSpell display | 
					
						
							|  |  |  |     syn match pandocCiteAnchor /[-@]/ contained containedin=pandocCiteKey display | 
					
						
							|  |  |  |     syn match pandocCiteLocator /[\[\]]/ contained containedin=pandocPCite,pandocICite | 
					
						
							|  |  |  |     hi def link pandocPCite Operator | 
					
						
							|  |  |  |     hi def link pandocICite Operator | 
					
						
							|  |  |  |     hi def link pandocCiteKey Label | 
					
						
							|  |  |  |     hi def link pandocCiteAnchor Operator | 
					
						
							|  |  |  |     hi def link pandocCiteLocator Operator | 
					
						
							| 
									
										
										
										
											2017-04-09 20:11:58 +02:00
										 |  |  |   endif | 
					
						
							| 
									
										
										
										
											2014-07-10 22:01:47 +02:00
										 |  |  | endif | 
					
						
							| 
									
										
										
										
											2017-04-09 20:11:58 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-27 15:49:53 +00:00
										 |  |  | " Step_3: Highlight code blocks. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | syn region rmdCodeBlock matchgroup=rmdCodeDelim start="^\s*```\s*{.*}$" matchgroup=rmdCodeDelim end="^\s*```\ze\s*$" keepend | 
					
						
							|  |  |  | syn region rmdCodeBlock matchgroup=rmdCodeDelim start="^\s*```.+$" matchgroup=rmdCodeDelim end="^```$" keepend | 
					
						
							|  |  |  | hi link rmdCodeBlock Special | 
					
						
							| 
									
										
										
										
											2017-04-09 20:11:58 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-28 22:58:02 +02:00
										 |  |  | " Now highlight chunks: | 
					
						
							| 
									
										
										
										
											2023-02-27 15:49:53 +00:00
										 |  |  | syn region knitrBodyOptions start='^#| ' end='$' contained  containedin=rComment,pythonComment contains=knitrBodyVar,knitrBodyValue transparent | 
					
						
							|  |  |  | syn match knitrBodyValue ': \zs.*\ze$' keepend contained containedin=knitrBodyOptions | 
					
						
							|  |  |  | syn match knitrBodyVar '| \zs\S\{-}\ze:' contained containedin=knitrBodyOptions | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | let g:rmd_fenced_languages = get(g:, 'rmd_fenced_languages', ['r']) | 
					
						
							| 
									
										
										
										
											2018-08-28 22:58:02 +02:00
										 |  |  | for s:type in g:rmd_fenced_languages | 
					
						
							|  |  |  |   if s:type =~ '=' | 
					
						
							| 
									
										
										
										
											2019-05-09 19:16:22 +02:00
										 |  |  |     let s:ft = substitute(s:type, '.*=', '', '') | 
					
						
							|  |  |  |     let s:nm = substitute(s:type, '=.*', '', '') | 
					
						
							| 
									
										
										
										
											2017-04-09 20:11:58 +02:00
										 |  |  |   else | 
					
						
							| 
									
										
										
										
											2019-05-09 19:16:22 +02:00
										 |  |  |     let s:ft = s:type | 
					
						
							| 
									
										
										
										
											2018-08-28 22:58:02 +02:00
										 |  |  |     let s:nm  = s:type | 
					
						
							| 
									
										
										
										
											2017-04-09 20:11:58 +02:00
										 |  |  |   endif | 
					
						
							| 
									
										
										
										
											2018-08-28 22:58:02 +02:00
										 |  |  |   unlet! b:current_syntax | 
					
						
							| 
									
										
										
										
											2019-05-09 19:16:22 +02:00
										 |  |  |   exe 'syn include @Rmd'.s:nm.' syntax/'.s:ft.'.vim' | 
					
						
							| 
									
										
										
										
											2018-08-28 22:58:02 +02:00
										 |  |  |   if g:rmd_syn_hl_chunk | 
					
						
							| 
									
										
										
										
											2023-02-27 15:49:53 +00:00
										 |  |  |     exe 'syn match knitrChunkDelim /```\s*{\s*'.s:nm.'/ contained containedin=knitrChunkBrace contains=knitrChunkLabel' | 
					
						
							|  |  |  |     exe 'syn match knitrChunkLabelDelim /```\s*{\s*'.s:nm.',\=\s*[-[:alnum:]]\{-1,}[,}]/ contained containedin=knitrChunkBrace' | 
					
						
							|  |  |  |     syn match knitrChunkDelim /}\s*$/ contained containedin=knitrChunkBrace | 
					
						
							|  |  |  |     exe 'syn match knitrChunkBrace /```\s*{\s*'.s:nm.'.*$/ contained containedin=rmd'.s:nm.'Chunk contains=knitrChunkDelim,knitrChunkLabelDelim,@Rmd'.s:nm | 
					
						
							|  |  |  |     exe 'syn region rmd'.s:nm.'Chunk start="^\s*```\s*{\s*=\?'.s:nm.'\>.*$" matchgroup=rmdCodeDelim end="^\s*```\ze\s*$" keepend contains=knitrChunkBrace,@Rmd'.s:nm | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     hi link knitrChunkLabel Identifier | 
					
						
							|  |  |  |     hi link knitrChunkDelim rmdCodeDelim | 
					
						
							|  |  |  |     hi link knitrChunkLabelDelim rmdCodeDelim | 
					
						
							| 
									
										
										
										
											2018-08-28 22:58:02 +02:00
										 |  |  |   else | 
					
						
							| 
									
										
										
										
											2023-02-27 15:49:53 +00:00
										 |  |  |     exe 'syn region rmd'.s:nm.'Chunk matchgroup=rmdCodeDelim start="^\s*```\s*{\s*=\?'.s:nm.'\>.*$" matchgroup=rmdCodeDelim end="^\s*```\ze\s*$" keepend contains=@Rmd'.s:nm | 
					
						
							| 
									
										
										
										
											2014-07-10 22:01:47 +02:00
										 |  |  |   endif | 
					
						
							| 
									
										
										
										
											2017-04-09 20:11:58 +02:00
										 |  |  | endfor | 
					
						
							| 
									
										
										
										
											2018-08-28 22:58:02 +02:00
										 |  |  | unlet! s:type | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-27 15:49:53 +00:00
										 |  |  | " Step_4: Highlight code recognized by pandoc but not defined in pandoc.vim yet: | 
					
						
							|  |  |  | syn match pandocDivBegin '^:::\+ {.\{-}}' contains=pandocHeaderAttr | 
					
						
							|  |  |  | syn match pandocDivEnd '^:::\+$' | 
					
						
							| 
									
										
										
										
											2021-04-21 18:09:37 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-27 15:49:53 +00:00
										 |  |  | hi def link knitrBodyVar PreProc | 
					
						
							|  |  |  | hi def link knitrBodyValue Constant | 
					
						
							|  |  |  | hi def link knitrBodyOptions rComment | 
					
						
							|  |  |  | hi def link pandocDivBegin Delimiter | 
					
						
							|  |  |  | hi def link pandocDivEnd Delimiter | 
					
						
							| 
									
										
										
										
											2018-08-28 22:58:02 +02:00
										 |  |  | hi def link rmdInlineDelim Delimiter | 
					
						
							|  |  |  | hi def link rmdCodeDelim Delimiter | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-27 15:49:53 +00:00
										 |  |  | if len(s:save_pandoc_lngs) | 
					
						
							|  |  |  |   let g:pandoc#syntax#codeblocks#embeds#langs = s:save_pandoc_lngs | 
					
						
							| 
									
										
										
										
											2018-08-28 22:58:02 +02:00
										 |  |  | endif | 
					
						
							| 
									
										
										
										
											2023-02-27 15:49:53 +00:00
										 |  |  | unlet s:save_pandoc_lngs | 
					
						
							| 
									
										
										
										
											2018-08-28 22:58:02 +02:00
										 |  |  | let &cpo = s:cpo_save | 
					
						
							|  |  |  | unlet s:cpo_save | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-27 15:49:53 +00:00
										 |  |  | let b:current_syntax = "rmd" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-10 22:01:47 +02:00
										 |  |  | " vim: ts=8 sw=2 |