mirror of
https://github.com/SpaceVim/SpaceVim.git
synced 2025-02-03 01:50:05 +08:00
123 lines
2.6 KiB
VimL
123 lines
2.6 KiB
VimL
function! sj#css#SplitDefinition()
|
|
if !s:LocateDefinition()
|
|
return 0
|
|
endif
|
|
|
|
if getline('.') !~ '{.*}' " then there's nothing to split
|
|
return 0
|
|
endif
|
|
|
|
if getline('.')[col('.') - 1 : col('.')] == '{}'
|
|
" nothing in the body
|
|
let body = ''
|
|
else
|
|
let body = sj#GetMotion('vi{')
|
|
endif
|
|
|
|
let lines = split(body, ";\s*")
|
|
let lines = sj#TrimList(lines)
|
|
let lines = filter(lines, '!sj#BlankString(v:val)')
|
|
|
|
let body = join(lines, ";\n")
|
|
if !sj#BlankString(body)
|
|
let body .= ";"
|
|
endif
|
|
|
|
call sj#ReplaceMotion('va{', "{\n".body."\n}")
|
|
|
|
if sj#settings#Read('align')
|
|
let alignment_start = line('.') + 1
|
|
let alignment_end = alignment_start + len(lines) - 1
|
|
call sj#Align(alignment_start, alignment_end, 'css_declaration')
|
|
endif
|
|
|
|
return 1
|
|
endfunction
|
|
|
|
function! sj#css#JoinDefinition()
|
|
if !s:LocateDefinition()
|
|
return 0
|
|
endif
|
|
|
|
if getline('.') =~ '{.*}' " then there's nothing to join
|
|
return 0
|
|
endif
|
|
|
|
normal! 0
|
|
call search('{', 'Wc', line('.'))
|
|
|
|
if getline(line('.') + 1) =~ '^}'
|
|
" nothing in the body
|
|
let body = ''
|
|
else
|
|
let body = sj#GetMotion('Vi{')
|
|
endif
|
|
|
|
let lines = split(body, ";\\?\s*\n")
|
|
let lines = sj#TrimList(lines)
|
|
let lines = filter(lines, 'v:val !~ "^\s*$"')
|
|
if sj#settings#Read('normalize_whitespace')
|
|
let lines = map(lines, "substitute(v:val, '\\s*:\\s\\+', ': ', '')")
|
|
endif
|
|
|
|
let body = join(lines, "; ")
|
|
let body = substitute(body, '\S.*\zs;\?$', ';', '')
|
|
let body = substitute(body, '{;', '{', '') " for SCSS
|
|
|
|
if body == ''
|
|
call sj#ReplaceMotion('va{', '{}')
|
|
else
|
|
call sj#ReplaceMotion('va{', '{ '.body.' }')
|
|
endif
|
|
|
|
return 1
|
|
endfunction
|
|
|
|
function! sj#css#JoinMultilineSelector()
|
|
let line = getline('.')
|
|
|
|
let start_line = line('.')
|
|
let end_line = start_line
|
|
let col = col('.')
|
|
let limit_line = line('$')
|
|
|
|
while !sj#BlankString(line) && line !~ '{\s*$' && end_line < limit_line
|
|
call cursor(end_line + 1, col)
|
|
let end_line = line('.')
|
|
let line = getline('.')
|
|
endwhile
|
|
|
|
if start_line == end_line
|
|
return 0
|
|
else
|
|
if line =~ '^\s*{\s*$'
|
|
let end_line = end_line - 1
|
|
endif
|
|
|
|
exe start_line.','.end_line.'join'
|
|
return 1
|
|
endif
|
|
endfunction
|
|
|
|
function! sj#css#SplitMultilineSelector()
|
|
if getline('.') !~ '.*,.*{\s*$'
|
|
" then there is nothing to split
|
|
return 0
|
|
endif
|
|
|
|
let definition = getline('.')
|
|
let replacement = substitute(definition, ',\s*', ",\n", 'g')
|
|
|
|
call sj#ReplaceMotion('V', replacement)
|
|
|
|
return 1
|
|
endfunction
|
|
|
|
function! s:LocateDefinition()
|
|
if search('{', 'bcW', line('.')) <= 0 && search('{', 'cW', line('.')) <= 0
|
|
return 0
|
|
else
|
|
return 1
|
|
endif
|
|
endfunction
|