summaryrefslogtreecommitdiffstats
path: root/indent/stylus.vim
diff options
context:
space:
mode:
authorAdam Stankiewicz <sheerun@sher.pl>2021-01-03 14:09:55 +0100
committerAdam Stankiewicz <sheerun@sher.pl>2021-01-03 14:09:55 +0100
commit09f31c433a136450b9faa33b08fc3281bdea5acc (patch)
tree73a1db640af5c34c55bed51916ea8cf821e7dad2 /indent/stylus.vim
parent05b8bbc938bdeac4a5ee2d3ae5cf7a7f05e822d3 (diff)
downloadvim-polyglot-09f31c433a136450b9faa33b08fc3281bdea5acc.tar.gz
vim-polyglot-09f31c433a136450b9faa33b08fc3281bdea5acc.zip
Revert stylus provider
Diffstat (limited to 'indent/stylus.vim')
-rw-r--r--indent/stylus.vim95
1 files changed, 67 insertions, 28 deletions
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;