blob: 247e1a6e4c67d56eb9c08bc752f082fe8709eea3 [file] [log] [blame]
Bram Moolenaar00a927d2010-05-14 23:24:24 +02001" Vim indent file
2" Language: ChaiScript
3" Maintainer: Jason Turner <lefticus 'at' gmail com>
4
5" Only load this indent file when no other was loaded.
6if exists("b:did_indent")
7 finish
8endif
9let b:did_indent = 1
10
11setlocal indentexpr=GetChaiScriptIndent()
12setlocal autoindent
13
14" Only define the function once.
15if exists("*GetChaiScriptIndent")
16 finish
17endif
18
19function! GetChaiScriptIndent()
20 " Find a non-blank line above the current line.
21 let lnum = prevnonblank(v:lnum - 1)
22
23 " Hit the start of the file, use zero indent.
24 if lnum == 0
25 return 0
26 endif
27
28 " Add a 'shiftwidth' after lines that start a block:
29 " lines containing a {
30 let ind = indent(lnum)
31 let flag = 0
32 let prevline = getline(lnum)
33 if prevline =~ '^.*{.*'
34 let ind = ind + &shiftwidth
35 let flag = 1
36 endif
37
38 " Subtract a 'shiftwidth' after lines containing a { followed by a }
39 " to keep it balanced
40 if flag == 1 && prevline =~ '.*{.*}.*'
41 let ind = ind - &shiftwidth
42 endif
43
44 " Subtract a 'shiftwidth' on lines ending with }
45 if getline(v:lnum) =~ '^\s*\%(}\)'
46 let ind = ind - &shiftwidth
47 endif
48
49 return ind
50endfunction