3 " Maintainer: Tim Pope <vimNOSPAM@tpope.org>
5 if exists("b:did_indent")
11 setlocal indentexpr=GetCucumberIndent()
12 setlocal indentkeys=o,O,*<Return>,<:>,0<Bar>,0#,=,!^F
14 " Only define the function once.
15 if exists("*GetCucumberIndent")
20 return synIDattr(synID(a:lnum,1+indent(a:lnum),1),'name')
23 function! GetCucumberIndent()
24 let line = getline(prevnonblank(v:lnum-1))
25 let cline = getline(v:lnum)
26 let syn = s:syn(prevnonblank(v:lnum-1))
27 let csyn = s:syn(v:lnum)
28 if csyn ==# 'cucumberFeature' || cline =~# '^\s*Feature:'
30 elseif csyn ==# 'cucumberExamples' || cline =~# '^\s*\%(Examples\|Scenarios\):'
32 elseif csyn =~# '^cucumber\%(Background\|Scenario\|ScenarioOutline\)$' || cline =~# '^\s*\%(Background\|Scenario\|Scenario Outline\):'
34 elseif syn ==# 'cucumberFeature' || line =~# '^\s*Feature:'
36 elseif syn ==# 'cucumberExamples' || line =~# '^\s*\%(Examples\|Scenarios\):'
38 elseif syn =~# '^cucumber\%(Background\|Scenario\|ScenarioOutline\)$' || line =~# '^\s*\%(Background\|Scenario\|Scenario Outline\):'
40 elseif cline =~# '^\s*@' && (s:syn(nextnonblank(v:lnum+1)) == 'cucumberFeature' || getline(nextnonblank(v:lnum+1)) =~# '^\s*Feature:' || indent(prevnonblank(v:lnum-1)) <= 0)
42 elseif line =~# '^\s*@'
44 elseif cline =~# '^\s*|' && line =~# '^\s*|'
45 return indent(prevnonblank(v:lnum-1))
46 elseif cline =~# '^\s*|' && line =~# '^\s*[^|#]'
47 return indent(prevnonblank(v:lnum-1)) + &sw
48 elseif cline =~# '^\s*[^|# \t]' && line =~# '^\s*|'
49 return indent(prevnonblank(v:lnum-1)) - &sw
50 elseif cline =~# '^\s*$' && line =~# '^\s*|'
51 let in = indent(prevnonblank(v:lnum-1))
52 return in == indent(v:lnum) ? in : in - &sw
53 elseif cline =~# '^\s*#' && getline(v:lnum-1) =~ '^\s*$' && getline(v:lnum+1) =~# '\S'
54 return indent(getline(v:lnum+1))
56 return indent(prevnonblank(v:lnum-1))