11" Language: Markdown with chunks of R, Python and other languages
22" Maintainer: Jakson Aquino <jalvesaq@gmail.com>
33" Homepage: https://github.com/jalvesaq/R-Vim-runtime
4- " Last Change: Wed May 17 , 2023 06:34AM
4+ " Last Change: Sun Dec 24 , 2023 07:21AM
55"
66" For highlighting pandoc extensions to markdown like citations and TeX and
77" many other advanced features like folding of markdown sections, it is
1616let s: cpo_save = &cpo
1717set cpo &vim
1818
19+ let g: rmd_include_latex = get (g: , ' rmd_include_latex' , 1 )
20+ if g: rmd_include_latex == 0 || g: rmd_include_latex == 1
21+ let b: rmd_has_LaTeX = v: false
22+ elseif g: rmd_include_latex == 2
23+ let b: rmd_has_LaTeX = v: true
24+ endif
25+
1926" Highlight the header of the chunks as R code
2027let g: rmd_syn_hl_chunk = get (g: , ' rmd_syn_hl_chunk' , 0 )
2128
@@ -136,7 +143,7 @@ syn match knitrBodyVar '| \zs\S\{-}\ze:' contained containedin=knitrBodyOptions
136143let g: rmd_fenced_languages = get (g: , ' rmd_fenced_languages' , [' r' ])
137144
138145let s: no_syntax_vim = []
139- function IncludeLanguage (lng)
146+ function s: IncludeLanguage (lng)
140147 if a: lng = ~ ' ='
141148 let ftpy = substitute (a: lng , ' .*=' , ' ' , ' ' )
142149 let lnm = substitute (a: lng , ' =.*' , ' ' , ' ' )
@@ -171,11 +178,23 @@ function IncludeLanguage(lng)
171178endfunction
172179
173180for s: type in g: rmd_fenced_languages
174- call IncludeLanguage (s: type )
181+ call s: IncludeLanguage (s: type )
175182endfor
176183unlet ! s: type
177184
178- function CheckRmdFencedLanguages ()
185+ let s: LaTeX_included = v: false
186+ function s: IncludeLaTeX ()
187+ let s: LaTeX_included = v: true
188+ unlet ! b: current_syntax
189+ syn include @RmdLaTeX syntax/tex.vim
190+ " From vim-pandoc-syntax
191+ syn region rmdLaTeXInlineMath start =/ \v\\ @<!\$\S @=/ end =/ \v\\ @<!\$\d @!/ keepend contains =@RmdLaTeX
192+ syn match rmdLaTeXCmd / \\ [[:alpha:]]\+\(\( {.\{ -}}\)\=\(\[ .\{ -}\]\)\=\) */ contains =@RmdLaTeX
193+ syn region rmdLaTeX start =' \$\$ ' end =' \$\$ ' keepend contains =@RmdLaTeX
194+ syn region rmdLaTeX start =/ \\ begin{\z (.\{ -}\) }/ end =/ \\ end{\z 1}/ keepend contains =@RmdLaTeX
195+ endfunction
196+
197+ function s: CheckRmdFencedLanguages ()
179198 let alines = getline (1 , ' $' )
180199 call filter (alines, " v:val =~ '^```{'" )
181200 call map (alines, " substitute(v:val, '^```{', '', '')" )
@@ -193,16 +212,31 @@ function CheckRmdFencedLanguages()
193212 endfor
194213 if has_lng == 0
195214 let g: rmd_fenced_languages += [tpy]
196- call IncludeLanguage (tpy)
215+ call s: IncludeLanguage (tpy)
197216 endif
198217 endfor
218+
219+ if hlexists (' pandocLaTeXCommand' )
220+ return
221+ endif
222+ if g: rmd_include_latex
223+ if ! b: rmd_has_LaTeX && (search (' \$\$' , ' wn' ) > 0 ||
224+ \ search (' \\begin{' , ' wn' ) > 0 ) ||
225+ \ search (' \\[[:alpha:]]\+' , ' wn' ) ||
226+ \ search (' \$[^\$]\+\$' , ' wn' )
227+ let b: rmd_has_LaTeX = v: true
228+ endif
229+ if b: rmd_has_LaTeX && ! s: LaTeX_included
230+ call s: IncludeLaTeX ()
231+ endif
232+ endif
199233endfunction
200234
201235if g: rmd_dynamic_fenced_languages
202- call CheckRmdFencedLanguages ()
236+ call s: CheckRmdFencedLanguages ()
203237 augroup RmdSyntax
204238 autocmd !
205- autocmd BufWritePost <buffer> call CheckRmdFencedLanguages ()
239+ autocmd BufWritePost <buffer> call s: CheckRmdFencedLanguages ()
206240 augroup END
207241endif
208242
@@ -225,6 +259,8 @@ unlet s:save_pandoc_lngs
225259let &cpo = s: cpo_save
226260unlet s: cpo_save
227261
262+ syntax iskeyword clear
263+
228264let b: current_syntax = " rmd"
229265
230266" vim: ts = 8 sw = 2
0 commit comments