blob: 80cab7000e4cde9b670611a21a6a4fd855c59a42 [file] [log] [blame]
Bram Moolenaar1e015462005-09-25 22:16:38 +00001" Vim indent file
Bram Moolenaar9964e462007-05-05 17:54:07 +00002" Language: eRuby
Bram Moolenaar1d689522010-05-28 20:54:39 +02003" Maintainer: Tim Pope <vimNOSPAM@tpope.org>
Bram Moolenaarec7944a2013-06-12 21:29:15 +02004" URL: https://github.com/vim-ruby/vim-ruby
Bram Moolenaarc6249bb2006-04-15 20:25:09 +00005" Release Coordinator: Doug Kearns <dougkearns@gmail.com>
Bram Moolenaar1e015462005-09-25 22:16:38 +00006
Bram Moolenaar1e015462005-09-25 22:16:38 +00007if exists("b:did_indent")
8 finish
9endif
10
Bram Moolenaar9964e462007-05-05 17:54:07 +000011runtime! indent/ruby.vim
12unlet! b:did_indent
Bram Moolenaarc236c162008-07-13 17:41:49 +000013setlocal indentexpr=
Bram Moolenaarc6249bb2006-04-15 20:25:09 +000014
Bram Moolenaar2bb8df22007-05-10 17:26:28 +000015if exists("b:eruby_subtype")
16 exe "runtime! indent/".b:eruby_subtype.".vim"
17else
18 runtime! indent/html.vim
19endif
Bram Moolenaar9964e462007-05-05 17:54:07 +000020unlet! b:did_indent
21
Bram Moolenaar2bb8df22007-05-10 17:26:28 +000022if &l:indentexpr == ''
23 if &l:cindent
24 let &l:indentexpr = 'cindent(v:lnum)'
25 else
26 let &l:indentexpr = 'indent(prevnonblank(v:lnum-1))'
27 endif
28endif
29let b:eruby_subtype_indentexpr = &l:indentexpr
30
Bram Moolenaar9964e462007-05-05 17:54:07 +000031let b:did_indent = 1
32
Bram Moolenaar2bb8df22007-05-10 17:26:28 +000033setlocal indentexpr=GetErubyIndent()
Bram Moolenaar9964e462007-05-05 17:54:07 +000034setlocal indentkeys=o,O,*<Return>,<>>,{,},0),0],o,O,!^F,=end,=else,=elsif,=rescue,=ensure,=when
35
36" Only define the function once.
37if exists("*GetErubyIndent")
38 finish
39endif
40
Bram Moolenaarc236c162008-07-13 17:41:49 +000041function! GetErubyIndent(...)
42 if a:0 && a:1 == '.'
43 let v:lnum = line('.')
44 elseif a:0 && a:1 =~ '^\d'
45 let v:lnum = a:1
46 endif
Bram Moolenaar9964e462007-05-05 17:54:07 +000047 let vcol = col('.')
Bram Moolenaar2bb8df22007-05-10 17:26:28 +000048 call cursor(v:lnum,1)
Bram Moolenaar3577c6f2008-06-24 21:16:56 +000049 let inruby = searchpair('<%','','%>','W')
Bram Moolenaar2bb8df22007-05-10 17:26:28 +000050 call cursor(v:lnum,vcol)
Bram Moolenaarec7944a2013-06-12 21:29:15 +020051 if inruby && getline(v:lnum) !~ '^<%\|^\s*[-=]\=%>'
52 let ind = GetRubyIndent(v:lnum)
Bram Moolenaar9964e462007-05-05 17:54:07 +000053 else
Bram Moolenaar2bb8df22007-05-10 17:26:28 +000054 exe "let ind = ".b:eruby_subtype_indentexpr
Bram Moolenaar9964e462007-05-05 17:54:07 +000055 endif
Bram Moolenaar2bb8df22007-05-10 17:26:28 +000056 let lnum = prevnonblank(v:lnum-1)
Bram Moolenaar9964e462007-05-05 17:54:07 +000057 let line = getline(lnum)
Bram Moolenaar2bb8df22007-05-10 17:26:28 +000058 let cline = getline(v:lnum)
Bram Moolenaarec7944a2013-06-12 21:29:15 +020059 if cline =~# '^\s*<%[-=]\=\s*\%(}\|end\|else\|\%(ensure\|rescue\|elsif\|when\).\{-\}\)\s*\%([-=]\=%>\|$\)'
Bram Moolenaar1d689522010-05-28 20:54:39 +020060 let ind = ind - &sw
61 endif
Bram Moolenaarec7944a2013-06-12 21:29:15 +020062 if line =~# '\S\s*<%[-=]\=\s*\%(}\|end\).\{-\}\s*\%([-=]\=%>\|$\)'
Bram Moolenaar9964e462007-05-05 17:54:07 +000063 let ind = ind - &sw
64 endif
Bram Moolenaarec7944a2013-06-12 21:29:15 +020065 if line =~# '\%({\|\<do\)\%(\s*|[^|]*|\)\=\s*[-=]\=%>'
Bram Moolenaar9964e462007-05-05 17:54:07 +000066 let ind = ind + &sw
Bram Moolenaarec7944a2013-06-12 21:29:15 +020067 elseif line =~# '<%[-=]\=\s*\%(module\|class\|def\|if\|for\|while\|until\|else\|elsif\|case\|when\|unless\|begin\|ensure\|rescue\)\>.*%>'
Bram Moolenaar9964e462007-05-05 17:54:07 +000068 let ind = ind + &sw
69 endif
Bram Moolenaarc236c162008-07-13 17:41:49 +000070 if line =~# '^\s*<%[=#-]\=\s*$' && cline !~# '^\s*end\>'
Bram Moolenaar9964e462007-05-05 17:54:07 +000071 let ind = ind + &sw
72 endif
Bram Moolenaarec7944a2013-06-12 21:29:15 +020073 if line !~# '^\s*<%' && line =~# '%>\s*$'
74 let ind = ind - &sw
75 endif
76 if cline =~# '^\s*[-=]\=%>\s*$'
Bram Moolenaar9964e462007-05-05 17:54:07 +000077 let ind = ind - &sw
78 endif
79 return ind
80endfunction
81
Bram Moolenaar3577c6f2008-06-24 21:16:56 +000082" vim:set sw=2 sts=2 ts=8 noet: