3 " Inspired by Google's C++ Style guide:
4 " http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml
7 if exists("b:did_indent")
13 function! GoogleCppIndent()
14 let l:cline_num = line('.')
16 let l:orig_indent = cindent(l:cline_num)
18 if l:orig_indent == 0 | return 0 | endif
20 let l:pline_num = prevnonblank(l:cline_num - 1)
21 let l:pline = getline(l:pline_num)
22 if l:pline =~# '^\s*template' | return l:pline_indent | endif
24 if l:orig_indent != &shiftwidth | return l:orig_indent | endif
27 let l:pline_num = prevnonblank(l:cline_num - 1)
28 while l:pline_num > -1
29 let l:pline = getline(l:pline_num)
30 let l:pline_indent = indent(l:pline_num)
32 if l:in_comment == 0 && l:pline =~ '^.\{-}\(/\*.\{-}\)\@<!\*/'
34 elseif l:in_comment == 1
35 if l:pline =~ '/\*\(.\{-}\*/\)\@!'
38 elseif l:pline_indent == 0
39 if l:pline !~# '\(#define\)\|\(^\s*//\)\|\(^\s*{\)'
40 if l:pline =~# '^\s*namespace.*'
45 elseif l:pline =~# '\\$'
52 let l:pline_num = prevnonblank(l:pline_num - 1)
58 setlocal indentexpr=GoogleCppIndent()
60 let b:undo_indent = "setl sw< ts< sts< et< tw< wrap< cin< cino< inde<"