diff options
Diffstat (limited to 'indent')
-rw-r--r-- | indent/dune.vim | 2 | ||||
-rw-r--r-- | indent/stylus.vim | 95 |
2 files changed, 68 insertions, 29 deletions
diff --git a/indent/dune.vim b/indent/dune.vim index 5dbe9d30..009f7eba 100644 --- a/indent/dune.vim +++ b/indent/dune.vim @@ -14,4 +14,4 @@ endif let b:did_indent = 1 " dune format-dune-file uses 1 space to indent -set softtabstop=1 shiftwidth=1 expandtab +setlocal softtabstop=1 shiftwidth=1 expandtab diff --git a/indent/stylus.vim b/indent/stylus.vim index 1254ebc3..88aa4482 100644 --- a/indent/stylus.vim +++ b/indent/stylus.vim @@ -4,21 +4,21 @@ endif " Vim indent file " Language: Stylus -" Maintainer: Ilia Loginov -" Last Change: 2018 Jan 19 +" Maintainer: Marc Harter +" Last Change: 2010 May 21 " Based On: sass.vim from Tim Pope - +" if exists("b:did_indent") finish endif +unlet! b:did_indent let b:did_indent = 1 setlocal indentexpr=GetStylusIndent() -setlocal autoindent nolisp nosmartindent -setlocal indentkeys=o,O,*<Return>,0),!^F +setlocal indentkeys=o,O,*<Return>,},],0),!^F setlocal formatoptions+=r -if exists('*GetStylusIndent') +if exists("*GetStylusIndent") " only define once finish endif @@ -43,7 +43,45 @@ function s:prevnonblanknoncomment(lnum) return lnum endfunction -function GetStylusIndent() +function s:count_braces(lnum, count_open) + let n_open = 0 + let n_close = 0 + let line = getline(a:lnum) + let pattern = '[{}]' + let i = match(line, pattern) + while i != -1 + if synIDattr(synID(a:lnum, i + 1, 0), 'name') !~ 'css\%(Comment\|StringQ\{1,2}\)' + if line[i] == '{' + let n_open += 1 + elseif line[i] == '}' + if n_open > 0 + let n_open -= 1 + else + let n_close += 1 + endif + endif + endif + let i = match(line, pattern, i + 1) + endwhile + return a:count_open ? n_open : n_close +endfunction + +" function CheckCSSIndent() +" let line = getline(v:lnum) +" if line =~ '^\s*\*' +" return cindent(v:lnum) +" endif +" +" let pnum = s:prevnonblanknoncomment(v:lnum - 1) +" if pnum == 0 +" return 0 +" endif +" +" return indent(pnum) + s:count_braces(pnum, 1) * &sw +" \ - s:count_braces(v:lnum, 0) * &sw +" endfunction + +function! GetStylusIndent() let line = getline(v:lnum) if line =~ '^\s*\*' return cindent(v:lnum) @@ -54,41 +92,42 @@ function GetStylusIndent() return 0 endif - let lnum = prevnonblank(v:lnum-1) + let lnum = prevnonblank(v:lnum-1) if lnum == 0 return 0 endif let pline = getline(pnum) - " Get last line strip ending whitespace - let line = substitute(getline(lnum),'[\s()]\+$','','') - " Get current line, trimmed - let cline = substitute(substitute(getline(v:lnum),'\s\+$','',''),'^\s\+','','') - " Get last col in prev line - let lastcol = strlen(line) - " Then remove preceeding whitespace - let line = substitute(line,'^\s\+','','') - " Get indent on prev line - let indent = indent(lnum) - " Get indent on current line - let cindent = indent(v:lnum) - " Increase indent by the shift width - let increase = indent + &sw + if pline =~ '[}{]' + return indent(pnum) + s:count_braces(pnum, 1) * &sw - s:count_braces(v:lnum, 0) * &sw + endif + + let line = substitute(getline(lnum),'[\s()]\+$','','') " get last line strip ending whitespace + let cline = substitute(substitute(getline(v:lnum),'\s\+$','',''),'^\s\+','','') " get current line, trimmed + let lastcol = strlen(line) " get last col in prev line + let line = substitute(line,'^\s\+','','') " then remove preceeding whitespace + let indent = indent(lnum) " get indent on prev line + let cindent = indent(v:lnum) " get indent on current line + let increase = indent + &sw " increase indent by the shift width if indent == indent(lnum) let indent = cindent <= indent ? indent : increase endif - let group = synIDattr(synID(lnum, cindent + 1, 1), 'name') + let group = synIDattr(synID(lnum,lastcol,1),'name') - if group =~ 'stylusSelector\w*' - return increase - elseif group =~ 'stylusAtRule\(Viewport\|Page\|Supports\|Document\|Font\|Keyframes\)\w*' + " for debugging only + echo group + + " if group !~? 'css.*' && line =~? ')\s*$' " match user functions + " return increase + if group =~? '\v^%(cssTagName|cssClassName|cssIdentifier|cssSelectorOp|cssSelectorOp2|cssBraces|cssAttributeSelector|cssPseudo|stylusId|stylusClass)$' return increase - " Mixin or function definition - elseif group =~ 'stylusFunction\w*' && indent(lnum) == 0 + elseif (group == 'stylusUserFunction') && (indent(lnum) == '0') " mixin definition return increase else return indent endif endfunction + +" vim:set sw=2; |