Mercurial > vim
annotate runtime/indent/haml.vim @ 2888:2763fe7844f6
Added tag v7-3-217 for changeset 15705b520c29
author | Bram Moolenaar <bram@vim.org> |
---|---|
date | Mon, 13 Jun 2011 01:19:56 +0200 |
parents | 6de9efd58dc0 |
children | 2eb30f341e8d |
rev | line source |
---|---|
1668 | 1 " Vim indent file |
2202 | 2 " Language: Haml |
3 " Maintainer: Tim Pope <vimNOSPAM@tpope.org> | |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2202
diff
changeset
|
4 " Last Change: 2010 May 21 |
1668 | 5 |
6 if exists("b:did_indent") | |
7 finish | |
8 endif | |
9 runtime! indent/ruby.vim | |
10 unlet! b:did_indent | |
11 let b:did_indent = 1 | |
12 | |
13 setlocal autoindent sw=2 et | |
14 setlocal indentexpr=GetHamlIndent() | |
15 setlocal indentkeys=o,O,*<Return>,},],0),!^F,=end,=else,=elsif,=rescue,=ensure,=when | |
16 | |
17 " Only define the function once. | |
18 if exists("*GetHamlIndent") | |
19 finish | |
20 endif | |
21 | |
22 let s:attributes = '\%({.\{-\}}\|\[.\{-\}\]\)' | |
23 let s:tag = '\%([%.#][[:alnum:]_-]\+\|'.s:attributes.'\)*[<>]*' | |
24 | |
25 if !exists('g:haml_self_closing_tags') | |
26 let g:haml_self_closing_tags = 'meta|link|img|hr|br' | |
27 endif | |
28 | |
29 function! GetHamlIndent() | |
30 let lnum = prevnonblank(v:lnum-1) | |
31 if lnum == 0 | |
32 return 0 | |
33 endif | |
34 let line = substitute(getline(lnum),'\s\+$','','') | |
35 let cline = substitute(substitute(getline(v:lnum),'\s\+$','',''),'^\s\+','','') | |
36 let lastcol = strlen(line) | |
37 let line = substitute(line,'^\s\+','','') | |
38 let indent = indent(lnum) | |
39 let cindent = indent(v:lnum) | |
40 if cline =~# '\v^-\s*%(elsif|else|when)>' | |
41 let indent = cindent < indent ? cindent : indent - &sw | |
42 endif | |
43 let increase = indent + &sw | |
44 if indent == indent(lnum) | |
45 let indent = cindent <= indent ? -1 : increase | |
46 endif | |
47 | |
48 let group = synIDattr(synID(lnum,lastcol,1),'name') | |
49 | |
50 if line =~ '^!!!' | |
51 return indent | |
52 elseif line =~ '^/\%(\[[^]]*\]\)\=$' | |
53 return increase | |
2202 | 54 elseif group == 'hamlFilter' |
1668 | 55 return increase |
2202 | 56 elseif line =~ '^'.s:tag.'[&!]\=[=~-]\s*\%(\%(if\|else\|elsif\|unless\|case\|when\|while\|until\|for\|begin\|module\|class\|def\)\>\%(.*\<end\>\)\@!\|.*do\%(\s*|[^|]*|\)\=\s*$\)' |
57 return increase | |
58 elseif line =~ '^'.s:tag.'[&!]\=[=~-].*,\s*$' | |
1668 | 59 return increase |
60 elseif line == '-#' | |
61 return increase | |
62 elseif group =~? '\v^(hamlSelfCloser)$' || line =~? '^%\v%('.g:haml_self_closing_tags.')>' | |
63 return indent | |
64 elseif group =~? '\v^%(hamlTag|hamlAttributesDelimiter|hamlObjectDelimiter|hamlClass|hamlId|htmlTagName|htmlSpecialTagName)$' | |
65 return increase | |
66 elseif synIDattr(synID(v:lnum,1,1),'name') ==? 'hamlRubyFilter' | |
67 return GetRubyIndent() | |
68 else | |
69 return indent | |
70 endif | |
71 endfunction | |
72 | |
73 " vim:set sw=2: |