diff options
| author | Adam Stankiewicz <sheerun@sher.pl> | 2017-09-27 20:43:42 +0200 | 
|---|---|---|
| committer | Adam Stankiewicz <sheerun@sher.pl> | 2017-09-27 20:43:42 +0200 | 
| commit | 5b77877888162f4e415fe9a7b8c5e9fb5dfb6ee1 (patch) | |
| tree | 965ae5128797f3d42d78d02692e62d24a4596e19 /indent/rhelp.vim | |
| parent | 8148255ef1c416f414c3a78405eff08fe149d16e (diff) | |
| download | vim-polyglot-5b77877888162f4e415fe9a7b8c5e9fb5dfb6ee1.tar.gz vim-polyglot-5b77877888162f4e415fe9a7b8c5e9fb5dfb6ee1.zip | |
Add syntax files from upstream vim repository
Diffstat (limited to 'indent/rhelp.vim')
| -rw-r--r-- | indent/rhelp.vim | 112 | 
1 files changed, 112 insertions, 0 deletions
| diff --git a/indent/rhelp.vim b/indent/rhelp.vim new file mode 100644 index 00000000..a676a3a0 --- /dev/null +++ b/indent/rhelp.vim @@ -0,0 +1,112 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'vim') == -1 +   +" Vim indent file +" Language:	R Documentation (Help), *.Rd +" Author:	Jakson Alves de Aquino <jalvesaq@gmail.com> +" Homepage:     https://github.com/jalvesaq/R-Vim-runtime +" Last Change:	Tue Apr 07, 2015  04:38PM + + +" Only load this indent file when no other was loaded. +if exists("b:did_indent") +  finish +endif +runtime indent/r.vim +let s:RIndent = function(substitute(&indentexpr, "()", "", "")) +let b:did_indent = 1 + +setlocal noautoindent +setlocal nocindent +setlocal nosmartindent +setlocal nolisp +setlocal indentkeys=0{,0},:,!^F,o,O,e +setlocal indentexpr=GetCorrectRHelpIndent() + +" Only define the functions once. +if exists("*GetRHelpIndent") +  finish +endif + +function s:SanitizeRHelpLine(line) +  let newline = substitute(a:line, '\\\\', "x", "g") +  let newline = substitute(newline, '\\{', "x", "g") +  let newline = substitute(newline, '\\}', "x", "g") +  let newline = substitute(newline, '\\%', "x", "g") +  let newline = substitute(newline, '%.*', "", "") +  let newline = substitute(newline, '\s*$', "", "") +  return newline +endfunction + +function GetRHelpIndent() + +  let clnum = line(".")    " current line +  if clnum == 1 +    return 0 +  endif +  let cline = getline(clnum) + +  if cline =~ '^\s*}\s*$' +    let i = clnum +    let bb = -1 +    while bb != 0 && i > 1 +      let i -= 1 +      let line = s:SanitizeRHelpLine(getline(i)) +      let line2 = substitute(line, "{", "", "g") +      let openb = strlen(line) - strlen(line2) +      let line3 = substitute(line2, "}", "", "g") +      let closeb = strlen(line2) - strlen(line3) +      let bb += openb - closeb +    endwhile +    return indent(i) +  endif + +  if cline =~ '^\s*#ifdef\>' || cline =~ '^\s*#endif\>' +    return 0 +  endif + +  let lnum = clnum - 1 +  let line = getline(lnum) +  if line =~ '^\s*#ifdef\>' || line =~ '^\s*#endif\>' +    let lnum -= 1 +    let line = getline(lnum) +  endif +  while lnum > 1 && (line =~ '^\s*$' || line =~ '^#ifdef' || line =~ '^#endif') +    let lnum -= 1 +    let line = getline(lnum) +  endwhile +  if lnum == 1 +    return 0 +  endif +  let line = s:SanitizeRHelpLine(line) +  let line2 = substitute(line, "{", "", "g") +  let openb = strlen(line) - strlen(line2) +  let line3 = substitute(line2, "}", "", "g") +  let closeb = strlen(line2) - strlen(line3) +  let bb = openb - closeb + +  let ind = indent(lnum) + (bb * shiftwidth()) + +  if line =~ '^\s*}\s*$' +    let ind = indent(lnum) +  endif + +  if ind < 0 +    return 0 +  endif + +  return ind +endfunction + +function GetCorrectRHelpIndent() +  let lastsection = search('^\\[a-z]*{', "bncW") +  let secname = getline(lastsection) +  if secname =~ '^\\usage{' || secname =~ '^\\examples{' || secname =~ '^\\dontshow{' || secname =~ '^\\dontrun{' || secname =~ '^\\donttest{' || secname =~ '^\\testonly{' || secname =~ '^\\method{.*}{.*}(' +    return s:RIndent() +  else +    return GetRHelpIndent() +  endif +endfunction + +" vim: sw=2 + +endif | 
