Bram Moolenaar | db6ea06 | 2014-07-10 22:01:47 +0200 | [diff] [blame] | 1 | " markdown Text with R statements |
| 2 | " Language: markdown with R code chunks |
| 3 | " Last Change: Wed Jul 09, 2014 10:29PM |
| 4 | " |
| 5 | " CONFIGURATION: |
| 6 | " To highlight chunk headers as R code, put in your vimrc: |
| 7 | " let rmd_syn_hl_chunk = 1 |
| 8 | |
| 9 | " for portability |
| 10 | if version < 600 |
| 11 | syntax clear |
| 12 | elseif exists("b:current_syntax") |
| 13 | finish |
| 14 | endif |
| 15 | |
| 16 | " load all of pandoc info |
| 17 | runtime syntax/pandoc.vim |
| 18 | if exists("b:current_syntax") |
| 19 | let rmdIsPandoc = 1 |
| 20 | unlet b:current_syntax |
| 21 | else |
| 22 | let rmdIsPandoc = 0 |
| 23 | runtime syntax/markdown.vim |
| 24 | if exists("b:current_syntax") |
| 25 | unlet b:current_syntax |
| 26 | endif |
| 27 | endif |
| 28 | |
| 29 | " load all of the r syntax highlighting rules into @R |
| 30 | syntax include @R syntax/r.vim |
| 31 | if exists("b:current_syntax") |
| 32 | unlet b:current_syntax |
| 33 | endif |
| 34 | |
| 35 | if exists("g:rmd_syn_hl_chunk") |
| 36 | " highlight R code inside chunk header |
| 37 | syntax match rmdChunkDelim "^[ \t]*```{r" contained |
| 38 | syntax match rmdChunkDelim "}$" contained |
| 39 | else |
| 40 | syntax match rmdChunkDelim "^[ \t]*```{r.*}$" contained |
| 41 | endif |
| 42 | syntax match rmdChunkDelim "^[ \t]*```$" contained |
| 43 | syntax region rmdChunk start="^[ \t]*``` *{r.*}$" end="^[ \t]*```$" contains=@R,rmdChunkDelim keepend fold |
| 44 | |
| 45 | " also match and syntax highlight in-line R code |
| 46 | syntax match rmdEndInline "`" contained |
| 47 | syntax match rmdBeginInline "`r " contained |
| 48 | syntax region rmdrInline start="`r " end="`" contains=@R,rmdBeginInline,rmdEndInline keepend |
| 49 | |
| 50 | " match slidify special marker |
| 51 | syntax match rmdSlidifySpecial "\*\*\*" |
| 52 | |
| 53 | |
| 54 | if rmdIsPandoc == 0 |
| 55 | syn match rmdBlockQuote /^\s*>.*\n\(.*\n\@<!\n\)*/ skipnl |
| 56 | " LaTeX |
| 57 | syntax include @LaTeX syntax/tex.vim |
| 58 | if exists("b:current_syntax") |
| 59 | unlet b:current_syntax |
| 60 | endif |
| 61 | " Inline |
| 62 | syntax match rmdLaTeXInlDelim "\$" |
| 63 | syntax match rmdLaTeXInlDelim "\\\$" |
| 64 | syn region texMathZoneX matchgroup=Delimiter start="\$" skip="\\\\\|\\\$" matchgroup=Delimiter end="\$" end="%stopzone\>" contains=@texMathZoneGroup |
| 65 | " Region |
| 66 | syntax match rmdLaTeXRegDelim "\$\$" contained |
| 67 | syntax match rmdLaTeXRegDelim "\$\$latex$" contained |
| 68 | syntax region rmdLaTeXRegion start="^\$\$" skip="\\\$" end="\$\$$" contains=@LaTeX,rmdLaTeXSt,rmdLaTeXRegDelim keepend |
| 69 | syntax region rmdLaTeXRegion2 start="^\\\[" end="\\\]" contains=@LaTeX,rmdLaTeXSt,rmdLaTeXRegDelim keepend |
| 70 | hi def link rmdLaTeXSt Statement |
| 71 | hi def link rmdLaTeXInlDelim Special |
| 72 | hi def link rmdLaTeXRegDelim Special |
| 73 | endif |
| 74 | |
| 75 | setlocal iskeyword=@,48-57,_,. |
| 76 | |
| 77 | syn sync match rmdSyncChunk grouphere rmdChunk "^[ \t]*``` *{r" |
| 78 | |
| 79 | hi def link rmdChunkDelim Special |
| 80 | hi def link rmdBeginInline Special |
| 81 | hi def link rmdEndInline Special |
| 82 | hi def link rmdBlockQuote Comment |
| 83 | hi def link rmdSlidifySpecial Special |
| 84 | |
| 85 | let b:current_syntax = "rmd" |
| 86 | |
| 87 | " vim: ts=8 sw=2 |