home *** CD-ROM | disk | FTP | other *** search
- " vim: set sw=4 sts=4:
- " Maintainer : Nikolai 'pcp' Weibull <da.box@home.se>
- " Revised on : Wed, 25 Jul 2001 21:19:41 CEST
- " Language : Cascading Style Sheets (CSS)
-
- " Only load this indent file when no other was loaded.
- if exists("b:did_indent")
- finish
- endif
-
- let b:did_indent = 1
-
- setlocal indentexpr=GetCSSIndent()
- setlocal indentkeys-=:,0# indentkeys-=e
-
- " Only define the function once.
- if exists("*GetCSSIndent")
- finish
- endif
-
- function! s:LookupLine(lnum)
- " find a non-blank line above the current line
- let lnum = prevnonblank(a:lnum - 1)
-
- if lnum == 0
- return 0
- endif
-
- let line = getline(lnum)
-
- " if the line has an end comment sequence we need to find a line
- " that isn't affected by the comment.
- if line =~ '\*/'
- while line !~ '/\*'
- let lnum = lnum - 1
- let line = getline(lnum)
- endwhile
- endif
-
- " if the line we found only contained the comment and whitespace
- " we need to find another line to use...
- if line =~ '^\s*/\*'
- return s:LookupLine(lnum)
- else
- return lnum
- endif
- endfunction
-
- function GetCSSIndent()
- let lnum = s:LookupLine(v:lnum)
-
- if lnum == 0
- return 0
- endif
-
- " remove commented stuff from line
- let line = substitute(getline(lnum), '/\*.\*/', '', 'eg')
-
- let ind = indent(lnum)
-
- " check for opening brace on the previous line
- " skip if it also contains a closing brace...
- if line =~ '{\(.*}\)\@!'
- let ind = ind + &sw
- endif
-
- let line = getline(v:lnum)
-
- " check for closing brace first on current line
- if line =~ '^\s*}'
- let ind = ind - &sw
- endif
-
- return ind
- endfunction
-