blob: b7a3fe5896010f6af0835c6ca91591b128d3f8b2 [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>
Bram Moolenaarcbaff5e2022-04-08 17:45:08 +01004" Last Change: 2022 Apr 06
Bram Moolenaar00a927d2010-05-14 23:24:24 +02005
6" Only load this indent file when no other was loaded.
7if exists("b:did_indent")
8 finish
9endif
10let b:did_indent = 1
11
12setlocal indentexpr=GetChaiScriptIndent()
13setlocal autoindent
14
Bram Moolenaarcbaff5e2022-04-08 17:45:08 +010015let b:undo_indent = "setl ai< inde<"
16
Bram Moolenaar00a927d2010-05-14 23:24:24 +020017" Only define the function once.
18if exists("*GetChaiScriptIndent")
19 finish
20endif
21
22function! GetChaiScriptIndent()
23 " Find a non-blank line above the current line.
24 let lnum = prevnonblank(v:lnum - 1)
25
26 " Hit the start of the file, use zero indent.
27 if lnum == 0
28 return 0
29 endif
30
31 " Add a 'shiftwidth' after lines that start a block:
32 " lines containing a {
33 let ind = indent(lnum)
34 let flag = 0
35 let prevline = getline(lnum)
36 if prevline =~ '^.*{.*'
Bram Moolenaar3ec574f2017-06-13 18:12:01 +020037 let ind = ind + shiftwidth()
Bram Moolenaar00a927d2010-05-14 23:24:24 +020038 let flag = 1
39 endif
40
41 " Subtract a 'shiftwidth' after lines containing a { followed by a }
42 " to keep it balanced
43 if flag == 1 && prevline =~ '.*{.*}.*'
Bram Moolenaar3ec574f2017-06-13 18:12:01 +020044 let ind = ind - shiftwidth()
Bram Moolenaar00a927d2010-05-14 23:24:24 +020045 endif
46
47 " Subtract a 'shiftwidth' on lines ending with }
48 if getline(v:lnum) =~ '^\s*\%(}\)'
Bram Moolenaar3ec574f2017-06-13 18:12:01 +020049 let ind = ind - shiftwidth()
Bram Moolenaar00a927d2010-05-14 23:24:24 +020050 endif
51
52 return ind
53endfunction