diff options
| author | Adam Stankiewicz <sheerun@sher.pl> | 2017-09-27 20:43:42 +0200 | 
|---|---|---|
| committer | Adam Stankiewicz <sheerun@sher.pl> | 2017-09-27 20:43:42 +0200 | 
| commit | 5b77877888162f4e415fe9a7b8c5e9fb5dfb6ee1 (patch) | |
| tree | 965ae5128797f3d42d78d02692e62d24a4596e19 /indent/bst.vim | |
| parent | 8148255ef1c416f414c3a78405eff08fe149d16e (diff) | |
| download | vim-polyglot-5b77877888162f4e415fe9a7b8c5e9fb5dfb6ee1.tar.gz vim-polyglot-5b77877888162f4e415fe9a7b8c5e9fb5dfb6ee1.zip | |
Add syntax files from upstream vim repository
Diffstat (limited to 'indent/bst.vim')
| -rw-r--r-- | indent/bst.vim | 79 | 
1 files changed, 79 insertions, 0 deletions
| diff --git a/indent/bst.vim b/indent/bst.vim new file mode 100644 index 00000000..b11924b9 --- /dev/null +++ b/indent/bst.vim @@ -0,0 +1,79 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'vim') == -1 +   +" Vim indent file +" Language:	bst +" Author:	Tim Pope <vimNOSPAM@tpope.info> +" $Id: bst.vim,v 1.1 2007/05/05 18:11:12 vimboss Exp $ + +if exists("b:did_indent") +    finish +endif +let b:did_indent = 1 + +setlocal expandtab +setlocal indentexpr=GetBstIndent(v:lnum) +"setlocal smartindent +setlocal cinkeys& +setlocal cinkeys-=0# +setlocal indentkeys& +"setlocal indentkeys+=0% + +" Only define the function once. +if exists("*GetBstIndent") +    finish +endif + +function! s:prevgood(lnum) +    " Find a non-blank line above the current line. +    " Skip over comments. +    let lnum = a:lnum +    while lnum > 0 +        let lnum = prevnonblank(lnum - 1) +        if getline(lnum) !~ '^\s*%.*$' +            break +        endif +    endwhile +    return lnum +endfunction + +function! s:strip(lnum) +    let line = getline(a:lnum) +    let line = substitute(line,'"[^"]*"','""','g') +    let line = substitute(line,'%.*','','') +    let line = substitute(line,'^\s\+','','') +    return line +endfunction + +function! s:count(string,char) +    let str = substitute(a:string,'[^'.a:char.']','','g') +    return strlen(str) +endfunction + +function! GetBstIndent(lnum) abort +    if a:lnum == 1 +        return 0 +    endif +    let lnum = s:prevgood(a:lnum) +    if lnum <= 0 +        return indent(a:lnum - 1) +    endif +    let line = s:strip(lnum) +    let cline = s:strip(a:lnum) +    if cline =~ '^}' && exists("b:current_syntax") +        call cursor(a:lnum,indent(a:lnum)) +        if searchpair('{','','}','bW',"synIDattr(synID(line('.'),col('.'),1),'name') =~? 'comment\\|string'") +            if col('.')+1 == col('$') +                return indent('.') +            else +                return virtcol('.')-1 +            endif +        endif +    endif +    let fakeline = substitute(line,'^}','','').matchstr(cline,'^}') +    let ind = indent(lnum) +    let ind = ind + shiftwidth() * s:count(line,'{') +    let ind = ind - shiftwidth() * s:count(fakeline,'}') +    return ind +endfunction + +endif | 
