blob: 056c20a4e43c22caea21ca00c4ebcc00a81574d6 [file] [log] [blame]
Bram Moolenaarbaca7f72013-09-22 14:42:24 +02001" Vim indent file
2" Language: J
3" Maintainer: David Bürgin <676c7473@gmail.com>
4" Last Change: 2013-09-21
5
6if exists("b:did_indent")
7 finish
8endif
9let b:did_indent = 1
10
11setlocal indentexpr=GetJIndent()
12setlocal indentkeys-=0{,0},\:,0#
13setlocal indentkeys+=0),=case.,=catch.,=catchd.,=catcht.,=do.,=else.,=elseif.,=end.,=fcase.
14
15let b:undo_indent = "setl indk< inde<"
16
17if exists("*GetJIndent")
18 finish
19endif
20
21function GetJIndent()
22 let prevlnum = prevnonblank(v:lnum-1)
23 if prevlnum == 0
24 return 0
25 endif
26
27 let indent = indent(prevlnum)
28 if getline(prevlnum) =~# '^\s*\%(case\|catch[dt]\=\|do\|else\%(if\)\=\|fcase\|for\%(_\a\k*\)\=\|if\|select\|try\|whil\%(e\|st\)\)\.'
29 if getline(prevlnum) !~# '\<end\.'
30 let indent += &shiftwidth
31 endif
32 endif
33 if getline(v:lnum) =~# '^\s*\%(case\|catch[dt]\=\|do\|else\%(if\)\=\|end\|fcase\)\.'
34 let indent -= &shiftwidth
35 endif
36 return indent
37endfunction