home *** CD-ROM | disk | FTP | other *** search
- " Matlab indent file
- " Language: Matlab
- " Maintainer: Christophe Poucet <christophe.poucet@pandora.be>
- " Last Change: 6 January, 2001
-
- " Only load this indent file when no other was loaded.
- if exists("b:did_indent")
- finish
- endif
- let b:did_indent = 1
-
- " Some preliminary setting
- setlocal indentkeys=!,o,O=end,=case,=else,=elseif,=otherwise,=catch
-
-
- setlocal indentexpr=GetMatlabIndent(v:lnum)
-
- " Only define the function once.
- if exists("*GetMatlabIndent")
- finish
- endif
-
- function GetMatlabIndent(lnum)
- " Give up if this line is explicitly joined.
- if getline(a:lnum - 1) =~ '\\$'
- return -1
- endif
-
- " Search backwards for the first non-empty line.
- let plnum = a:lnum - 1
- while plnum > 0 && getline(plnum) =~ '^\s*$'
- let plnum = plnum - 1
- endwhile
-
- if plnum == 0
- " This is the first non-empty line, use zero indent.
- return 0
- endif
-
- let curind = indent(plnum)
-
- " If the current line is a stop-block statement...
- if getline(v:lnum) =~ '^\s*\(end\|else\|elseif\|case\|otherwise\|catch\)\>'
- " See if this line does not follow the line right after an openblock
- if getline(plnum) =~ '^\s*\(for\|if\|else\|elseif\|case\|while\|switch\|try\|otherwise\|catch\)\>'
- " See if the user has already dedented
- elseif indent(v:lnum) > curind - &sw
- " If not, recommend one dedent
- let curind = curind - &sw
- else
- " Otherwise, trust the user
- return -1
- endif
- " endif
-
- " If the previous line opened a block
- elseif getline(plnum) =~ '^\s*\(for\|if\|else\|elseif\|case\|while\|switch\|try\|otherwise\|catch\)\>'
- " See if the user has already indented
- if indent(v:lnum) < curind + &sw
- "If not, recommend indent
- let curind = curind + &sw
- else
- " Otherwise, trust the user
- return -1
- endif
- endif
-
-
-
- " If we got to here, it means that the user takes the standardversion, so we return it
- return curind
- endfunction
-
- " vim:sw=2
-