diff options
| author | Adam Stankiewicz <sheerun@sher.pl> | 2013-09-12 17:36:44 +0200 | 
|---|---|---|
| committer | Adam Stankiewicz <sheerun@sher.pl> | 2013-09-12 17:36:44 +0200 | 
| commit | 8e46fc0007c674e4a89c0b7490e0ed80528e4093 (patch) | |
| tree | 975d7360cae10a5fb90532408f569b4c0f72726d /indent | |
| parent | 2ed8751feb4e78fd37a822581a3ec4f7bfd627db (diff) | |
| download | vim-polyglot-8e46fc0007c674e4a89c0b7490e0ed80528e4093.tar.gz vim-polyglot-8e46fc0007c674e4a89c0b7490e0ed80528e4093.zip | |
vim-scripts/Puppet-Syntax-Highlighting -> ajs/puppet-vim
Diffstat (limited to '')
| -rw-r--r-- | indent/puppet.vim | 76 | 
1 files changed, 76 insertions, 0 deletions
| diff --git a/indent/puppet.vim b/indent/puppet.vim new file mode 100644 index 00000000..689e0687 --- /dev/null +++ b/indent/puppet.vim @@ -0,0 +1,76 @@ +" Vim indent file +" Language:	Puppet +" Maintainer:	Todd Zullinger <tmz@pobox.com> +" Last Change:	2009 Aug 19 +" vim: set sw=4 sts=4: + +if exists("b:did_indent") +    finish +endif +let b:did_indent = 1 + +setlocal autoindent smartindent +setlocal indentexpr=GetPuppetIndent() +setlocal indentkeys+=0],0) + +if exists("*GetPuppetIndent") +    finish +endif + +" Check if a line is part of an include 'block', e.g.: +"   include foo, +"       bar, +"       baz +function! s:PartOfInclude(lnum) +    let lnum = a:lnum +    while lnum +        let lnum = lnum - 1 +        let line = getline(lnum) +        if line !~ ',$' +            break +        endif +        if line =~ '^\s*include\s\+[^,]\+,$' +            return 1 +        endif +    endwhile +    return 0 +endfunction + +function! s:OpenBrace(lnum) +    call cursor(a:lnum, 1) +    return searchpair('{\|\[\|(', '', '}\|\]\|)', 'nbW') +endfunction + +function! GetPuppetIndent() +    let pnum = prevnonblank(v:lnum - 1) +    if pnum == 0 +       return 0 +    endif + +    let line = getline(v:lnum) +    let pline = getline(pnum) +    let ind = indent(pnum) + +    if pline =~ '^\s*#' +        return ind +    endif + +    if pline =~ '\({\|\[\|(\|:\)$' +        let ind += &sw +    elseif pline =~ ';$' && pline !~ '[^:]\+:.*[=+]>.*' +        let ind -= &sw +    elseif pline =~ '^\s*include\s\+.*,$' +        let ind += &sw +    endif + +    if pline !~ ',$' && s:PartOfInclude(pnum) +        let ind -= &sw +    endif + +    " Match } }, }; ] ]: ) +    if line =~ '^\s*\(}\(,\|;\)\?$\|]:\?$\|)\)' +        let ind = indent(s:OpenBrace(v:lnum)) +    endif + +    return ind +endfunction | 
