100a927d6SBram Moolenaar" Vim indent file
200a927d6SBram Moolenaar" Language:     ChaiScript
300a927d6SBram Moolenaar" Maintainer:	Jason Turner <lefticus 'at' gmail com>
400a927d6SBram Moolenaar
500a927d6SBram Moolenaar" Only load this indent file when no other was loaded.
600a927d6SBram Moolenaarif exists("b:did_indent")
700a927d6SBram Moolenaar  finish
800a927d6SBram Moolenaarendif
900a927d6SBram Moolenaarlet b:did_indent = 1
1000a927d6SBram Moolenaar
1100a927d6SBram Moolenaarsetlocal indentexpr=GetChaiScriptIndent()
1200a927d6SBram Moolenaarsetlocal autoindent
1300a927d6SBram Moolenaar
1400a927d6SBram Moolenaar" Only define the function once.
1500a927d6SBram Moolenaarif exists("*GetChaiScriptIndent")
1600a927d6SBram Moolenaar  finish
1700a927d6SBram Moolenaarendif
1800a927d6SBram Moolenaar
1900a927d6SBram Moolenaarfunction! GetChaiScriptIndent()
2000a927d6SBram Moolenaar  " Find a non-blank line above the current line.
2100a927d6SBram Moolenaar  let lnum = prevnonblank(v:lnum - 1)
2200a927d6SBram Moolenaar
2300a927d6SBram Moolenaar  " Hit the start of the file, use zero indent.
2400a927d6SBram Moolenaar  if lnum == 0
2500a927d6SBram Moolenaar    return 0
2600a927d6SBram Moolenaar  endif
2700a927d6SBram Moolenaar
2800a927d6SBram Moolenaar  " Add a 'shiftwidth' after lines that start a block:
2900a927d6SBram Moolenaar  " lines containing a {
3000a927d6SBram Moolenaar  let ind = indent(lnum)
3100a927d6SBram Moolenaar  let flag = 0
3200a927d6SBram Moolenaar  let prevline = getline(lnum)
3300a927d6SBram Moolenaar  if prevline =~ '^.*{.*'
34*3ec574f2SBram Moolenaar    let ind = ind + shiftwidth()
3500a927d6SBram Moolenaar    let flag = 1
3600a927d6SBram Moolenaar  endif
3700a927d6SBram Moolenaar
3800a927d6SBram Moolenaar  " Subtract a 'shiftwidth' after lines containing a { followed by a }
3900a927d6SBram Moolenaar  " to keep it balanced
4000a927d6SBram Moolenaar  if flag == 1 && prevline =~ '.*{.*}.*'
41*3ec574f2SBram Moolenaar    let ind = ind - shiftwidth()
4200a927d6SBram Moolenaar  endif
4300a927d6SBram Moolenaar
4400a927d6SBram Moolenaar  " Subtract a 'shiftwidth' on lines ending with }
4500a927d6SBram Moolenaar  if getline(v:lnum) =~ '^\s*\%(}\)'
46*3ec574f2SBram Moolenaar    let ind = ind - shiftwidth()
4700a927d6SBram Moolenaar  endif
4800a927d6SBram Moolenaar
4900a927d6SBram Moolenaar  return ind
5000a927d6SBram Moolenaarendfunction
51