| 
									
										
										
										
											2008-07-13 17:41:49 +00:00
										 |  |  | " Vim indent file | 
					
						
							| 
									
										
										
										
											2010-05-21 12:05:36 +02:00
										 |  |  | " Language:	Haml | 
					
						
							|  |  |  | " Maintainer:	Tim Pope <vimNOSPAM@tpope.org> | 
					
						
							| 
									
										
										
										
											2013-06-01 14:50:56 +02:00
										 |  |  | " Last Change:	2013 May 30 | 
					
						
							| 
									
										
										
										
											2008-07-13 17:41:49 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | if exists("b:did_indent") | 
					
						
							|  |  |  |   finish | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | runtime! indent/ruby.vim | 
					
						
							|  |  |  | unlet! b:did_indent | 
					
						
							|  |  |  | let b:did_indent = 1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | setlocal autoindent sw=2 et | 
					
						
							|  |  |  | setlocal indentexpr=GetHamlIndent() | 
					
						
							|  |  |  | setlocal indentkeys=o,O,*<Return>,},],0),!^F,=end,=else,=elsif,=rescue,=ensure,=when | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " Only define the function once. | 
					
						
							|  |  |  | if exists("*GetHamlIndent") | 
					
						
							|  |  |  |   finish | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | let s:attributes = '\%({.\{-\}}\|\[.\{-\}\]\)' | 
					
						
							|  |  |  | let s:tag = '\%([%.#][[:alnum:]_-]\+\|'.s:attributes.'\)*[<>]*' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if !exists('g:haml_self_closing_tags') | 
					
						
							| 
									
										
										
										
											2013-06-01 14:50:56 +02:00
										 |  |  |   let g:haml_self_closing_tags = 'base|link|meta|br|hr|img|input' | 
					
						
							| 
									
										
										
										
											2008-07-13 17:41:49 +00:00
										 |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function! GetHamlIndent() | 
					
						
							|  |  |  |   let lnum = prevnonblank(v:lnum-1) | 
					
						
							|  |  |  |   if lnum == 0 | 
					
						
							|  |  |  |     return 0 | 
					
						
							|  |  |  |   endif | 
					
						
							|  |  |  |   let line = substitute(getline(lnum),'\s\+$','','') | 
					
						
							|  |  |  |   let cline = substitute(substitute(getline(v:lnum),'\s\+$','',''),'^\s\+','','') | 
					
						
							|  |  |  |   let lastcol = strlen(line) | 
					
						
							|  |  |  |   let line = substitute(line,'^\s\+','','') | 
					
						
							|  |  |  |   let indent = indent(lnum) | 
					
						
							|  |  |  |   let cindent = indent(v:lnum) | 
					
						
							|  |  |  |   if cline =~# '\v^-\s*%(elsif|else|when)>' | 
					
						
							|  |  |  |     let indent = cindent < indent ? cindent : indent - &sw | 
					
						
							|  |  |  |   endif | 
					
						
							|  |  |  |   let increase = indent + &sw | 
					
						
							|  |  |  |   if indent == indent(lnum) | 
					
						
							|  |  |  |     let indent = cindent <= indent ? -1 : increase | 
					
						
							|  |  |  |   endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   let group = synIDattr(synID(lnum,lastcol,1),'name') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if line =~ '^!!!' | 
					
						
							|  |  |  |     return indent | 
					
						
							|  |  |  |   elseif line =~ '^/\%(\[[^]]*\]\)\=$' | 
					
						
							|  |  |  |     return increase | 
					
						
							| 
									
										
										
										
											2010-05-21 12:05:36 +02:00
										 |  |  |   elseif group == 'hamlFilter' | 
					
						
							| 
									
										
										
										
											2008-07-13 17:41:49 +00:00
										 |  |  |     return increase | 
					
						
							| 
									
										
										
										
											2010-05-21 12:05:36 +02:00
										 |  |  |   elseif line =~ '^'.s:tag.'[&!]\=[=~-]\s*\%(\%(if\|else\|elsif\|unless\|case\|when\|while\|until\|for\|begin\|module\|class\|def\)\>\%(.*\<end\>\)\@!\|.*do\%(\s*|[^|]*|\)\=\s*$\)' | 
					
						
							|  |  |  |     return increase | 
					
						
							|  |  |  |   elseif line =~ '^'.s:tag.'[&!]\=[=~-].*,\s*$' | 
					
						
							| 
									
										
										
										
											2008-07-13 17:41:49 +00:00
										 |  |  |     return increase | 
					
						
							|  |  |  |   elseif line == '-#' | 
					
						
							|  |  |  |     return increase | 
					
						
							|  |  |  |   elseif group =~? '\v^(hamlSelfCloser)$' || line =~? '^%\v%('.g:haml_self_closing_tags.')>' | 
					
						
							|  |  |  |     return indent | 
					
						
							|  |  |  |   elseif group =~? '\v^%(hamlTag|hamlAttributesDelimiter|hamlObjectDelimiter|hamlClass|hamlId|htmlTagName|htmlSpecialTagName)$' | 
					
						
							|  |  |  |     return increase | 
					
						
							|  |  |  |   elseif synIDattr(synID(v:lnum,1,1),'name') ==? 'hamlRubyFilter' | 
					
						
							|  |  |  |     return GetRubyIndent() | 
					
						
							|  |  |  |   else | 
					
						
							|  |  |  |     return indent | 
					
						
							|  |  |  |   endif | 
					
						
							|  |  |  | endfunction | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " vim:set sw=2: |