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