" Maintainer: Hynek Schlawack <hs@ox.cx>
" Prev Maintainer: Eric Mc Sween <em@tomcom.de> (address invalid)
" Original Author: David Bustos <bustos@caltech.edu> (address invalid)
-" Last Change: 2012-06-21
" License: Public Domain
" Only load this indent file when no other was loaded.
endfunction
function! GetPythonPEPIndent(lnum)
-
" First line has indent 0
if a:lnum == 1
return 0
let thisline = getline(a:lnum)
let thisindent = indent(a:lnum)
- " If the line starts with 'elif' or 'else', line up with 'if' or 'elif'
- if thisline =~ '^\s*\(elif\|else\)\>'
+ " If the line starts with 'elif', line up with 'if' or 'elif'
+ if thisline =~ '^\s*elif\>'
let bslnum = s:BlockStarter(a:lnum, '^\s*\(if\|elif\)\>')
if bslnum > 0
return indent(bslnum)
endif
endif
- " If the line starts with 'except' or 'finally', line up with 'try'
- " or 'except'
+ " If the line starts with 'except', or 'finally', line up with 'try'
+ " or 'except'.
if thisline =~ '^\s*\(except\|finally\)\>'
let bslnum = s:BlockStarter(a:lnum, '^\s*\(try\|except\)\>')
if bslnum > 0
endif
endif
+ " If the line starts with 'else', line it up with 'try', 'except', 'for',
+ " 'if', or 'elif'.
+ if thisline =~ '^\s*else\>'
+ :echom thisline
+ let bslnum = s:BlockStarter(a:lnum, '^\s*\(try\|except\|if\|elif\|for\)\>')
+ if bslnum > 0
+ return indent(bslnum)
+ else
+ return -1
+ endif
+ endif
+
" Examine previous line
let plnum = a:lnum - 1
let pline = getline(plnum)
" If the previous line ended with a colon and is not a comment, indent
" relative to statement start.
+ let pline = substitute(pline, '\\\\', '', 'g')
+ if v:version > 703 || (v:version == 703 && has('patch1037'))
+ let pline = substitute(pline, '".\{-}\\\@1<!"\|''.\{-}\\\@1<!''', '', 'g')
+ else
+ let pline = substitute(pline, '".\{-}\\\@<!"\|''.\{-}\\\@<!''', '', 'g')
+ endif
if pline =~ '^[^#]*:\s*\(#.*\)\?$'
return indent(sslnum) + &sw
endif