forked from VimPlug/emmet-vim
Refactoring
This commit is contained in:
+240
-240
@@ -1,6 +1,6 @@
|
||||
function! emmet#lang#css#findTokens(str) abort
|
||||
let tmp = substitute(substitute(a:str, '^.*[;{]\s*', '', ''), '}\s*$', '', '')
|
||||
if tmp =~ '/' && tmp =~ '^[a-zA-Z0-9/_.]\+$'
|
||||
let l:tmp = substitute(substitute(a:str, '^.*[;{]\s*', '', ''), '}\s*$', '', '')
|
||||
if l:tmp =~ '/' && l:tmp =~ '^[a-zA-Z0-9/_.]\+$'
|
||||
" maybe path or something
|
||||
return ''
|
||||
endif
|
||||
@@ -8,281 +8,281 @@ function! emmet#lang#css#findTokens(str) abort
|
||||
endfunction
|
||||
|
||||
function! emmet#lang#css#parseIntoTree(abbr, type) abort
|
||||
let abbr = a:abbr
|
||||
let type = a:type
|
||||
let prefix = 0
|
||||
let value = ''
|
||||
let l:abbr = a:abbr
|
||||
let l:type = a:type
|
||||
let l:prefix = 0
|
||||
let l:value = ''
|
||||
|
||||
let indent = emmet#getIndentation(type)
|
||||
let aliases = emmet#getResource(type, 'aliases', {})
|
||||
let snippets = emmet#getResource(type, 'snippets', {})
|
||||
let use_pipe_for_cursor = emmet#getResource(type, 'use_pipe_for_cursor', 1)
|
||||
let l:indent = emmet#getIndentation(l:type)
|
||||
let l:aliases = emmet#getResource(l:type, 'aliases', {})
|
||||
let l:snippets = emmet#getResource(l:type, 'snippets', {})
|
||||
let l:use_pipe_for_cursor = emmet#getResource(l:type, 'use_pipe_for_cursor', 1)
|
||||
|
||||
let root = emmet#newNode()
|
||||
let l:root = emmet#newNode()
|
||||
|
||||
" emmet
|
||||
let tokens = split(abbr, '+\ze[^+)!]')
|
||||
let block = emmet#util#searchRegion('{', '}')
|
||||
if abbr !~# '^@' && emmet#getBaseType(type) ==# 'css' && type !=# 'sass' && type !=# 'styled' && block[0] ==# [0,0] && block[1] ==# [0,0]
|
||||
let current = emmet#newNode()
|
||||
let current.snippet = substitute(abbr, '\s\+$', '', '') . " {\n" . indent . "${cursor}\n}"
|
||||
let current.name = ''
|
||||
call add(root.child, deepcopy(current))
|
||||
let l:tokens = split(l:abbr, '+\ze[^+)!]')
|
||||
let l:block = emmet#util#searchRegion('{', '}')
|
||||
if l:abbr !~# '^@' && emmet#getBaseType(l:type) ==# 'css' && l:type !=# 'sass' && l:type !=# 'styled' && l:block[0] ==# [0,0] && l:block[1] ==# [0,0]
|
||||
let l:current = emmet#newNode()
|
||||
let l:current.snippet = substitute(l:abbr, '\s\+$', '', '') . " {\n" . l:indent . "${cursor}\n}"
|
||||
let l:current.name = ''
|
||||
call add(l:root.child, deepcopy(l:current))
|
||||
else
|
||||
for n in range(len(tokens))
|
||||
let token = tokens[n]
|
||||
let prop = matchlist(token, '^\(-\{0,1}[a-zA-Z]\+\|[a-zA-Z0-9]\++\{0,1}\|([a-zA-Z0-9]\++\{0,1})\)\(\%([0-9.-]\+\%(p\|e\|em\|x\|vh\|vw\|re\|rem\|%\)\{0,}-\{0,1}\|-auto\)*\)$')
|
||||
if len(prop)
|
||||
let token = substitute(prop[1], '^(\(.*\))', '\1', '')
|
||||
if token =~# '^-'
|
||||
let prefix = 1
|
||||
let token = token[1:]
|
||||
for l:n in range(len(l:tokens))
|
||||
let l:token = l:tokens[l:n]
|
||||
let l:prop = matchlist(l:token, '^\(-\{0,1}[a-zA-Z]\+\|[a-zA-Z0-9]\++\{0,1}\|([a-zA-Z0-9]\++\{0,1})\)\(\%([0-9.-]\+\%(p\|e\|em\|x\|vh\|vw\|re\|rem\|%\)\{0,}-\{0,1}\|-auto\)*\)$')
|
||||
if len(l:prop)
|
||||
let l:token = substitute(l:prop[1], '^(\(.*\))', '\1', '')
|
||||
if l:token =~# '^-'
|
||||
let l:prefix = 1
|
||||
let l:token = l:token[1:]
|
||||
endif
|
||||
let value = ''
|
||||
for vt in split(prop[2], '\a\+\zs')
|
||||
let ut = matchstr(vt, '[a-z]\+$')
|
||||
if ut == 'auto'
|
||||
let ut = ''
|
||||
let l:value = ''
|
||||
for l:vt in split(l:prop[2], '\a\+\zs')
|
||||
let l:ut = matchstr(l:vt, '[a-z]\+$')
|
||||
if l:ut == 'auto'
|
||||
let l:ut = ''
|
||||
endif
|
||||
for v in split(vt, '\d\zs-')
|
||||
if len(value) > 0
|
||||
let value .= ' '
|
||||
for l:v in split(l:vt, '\d\zs-')
|
||||
if len(l:value) > 0
|
||||
let l:value .= ' '
|
||||
endif
|
||||
if v !~ '[a-z]\+$'
|
||||
let v .= ut
|
||||
if l:v !~ '[a-z]\+$'
|
||||
let l:v .= l:ut
|
||||
endif
|
||||
if token =~# '^[z]'
|
||||
if l:token =~# '^[z]'
|
||||
" TODO
|
||||
let value .= substitute(v, '[^0-9.]*$', '', '')
|
||||
elseif v =~# 'em$'
|
||||
let value .= v
|
||||
elseif v =~# 'ex$'
|
||||
let value .= v
|
||||
elseif v =~# 'vh$'
|
||||
let value .= v
|
||||
elseif v =~# 'vw$'
|
||||
let value .= v
|
||||
elseif v =~# 'rem$'
|
||||
let value .= v
|
||||
elseif v ==# 'auto'
|
||||
let value .= v
|
||||
elseif v =~# 'p$'
|
||||
let value .= substitute(v, 'p$', '%', '')
|
||||
elseif v =~# '%$'
|
||||
let value .= v
|
||||
elseif v =~# 'e$'
|
||||
let value .= substitute(v, 'e$', 'em', '')
|
||||
elseif v =~# 'x$'
|
||||
let value .= substitute(v, 'x$', 'ex', '')
|
||||
elseif v =~# 're$'
|
||||
let value .= substitute(v, 're$', 'rem', '')
|
||||
elseif v =~# '\.'
|
||||
let value .= v . 'em'
|
||||
elseif v ==# '0'
|
||||
let value .= '0'
|
||||
let l:value .= substitute(l:v, '[^0-9.]*$', '', '')
|
||||
elseif l:v =~# 'em$'
|
||||
let l:value .= l:v
|
||||
elseif l:v =~# 'ex$'
|
||||
let l:value .= l:v
|
||||
elseif l:v =~# 'vh$'
|
||||
let l:value .= l:v
|
||||
elseif l:v =~# 'vw$'
|
||||
let l:value .= l:v
|
||||
elseif l:v =~# 'rem$'
|
||||
let l:value .= l:v
|
||||
elseif l:v ==# 'auto'
|
||||
let l:value .= l:v
|
||||
elseif l:v =~# 'p$'
|
||||
let l:value .= substitute(l:v, 'p$', '%', '')
|
||||
elseif l:v =~# '%$'
|
||||
let l:value .= l:v
|
||||
elseif l:v =~# 'e$'
|
||||
let l:value .= substitute(l:v, 'e$', 'em', '')
|
||||
elseif l:v =~# 'x$'
|
||||
let l:value .= substitute(l:v, 'x$', 'ex', '')
|
||||
elseif l:v =~# 're$'
|
||||
let l:value .= substitute(l:v, 're$', 'rem', '')
|
||||
elseif l:v =~# '\.'
|
||||
let l:value .= l:v . 'em'
|
||||
elseif l:v ==# '0'
|
||||
let l:value .= '0'
|
||||
else
|
||||
let value .= v . 'px'
|
||||
let l:value .= l:v . 'px'
|
||||
endif
|
||||
endfor
|
||||
endfor
|
||||
endif
|
||||
|
||||
let tag_name = token
|
||||
if tag_name =~# '.!$'
|
||||
let tag_name = tag_name[:-2]
|
||||
let important = 1
|
||||
let l:tag_name = l:token
|
||||
if l:tag_name =~# '.!$'
|
||||
let l:tag_name = l:tag_name[:-2]
|
||||
let l:important = 1
|
||||
else
|
||||
let important = 0
|
||||
let l:important = 0
|
||||
endif
|
||||
" make default node
|
||||
let current = emmet#newNode()
|
||||
let current.important = important
|
||||
let current.name = tag_name
|
||||
let l:current = emmet#newNode()
|
||||
let l:current.important = l:important
|
||||
let l:current.name = l:tag_name
|
||||
|
||||
" aliases
|
||||
if has_key(aliases, tag_name)
|
||||
let current.name = aliases[tag_name]
|
||||
if has_key(l:aliases, l:tag_name)
|
||||
let l:current.name = l:aliases[l:tag_name]
|
||||
endif
|
||||
|
||||
" snippets
|
||||
if !empty(snippets)
|
||||
let snippet_name = tag_name
|
||||
if !has_key(snippets, snippet_name)
|
||||
let pat = '^' . join(split(tag_name, '\zs'), '\%(\|[^:-]\+-\)')
|
||||
let vv = filter(sort(keys(snippets)), 'snippets[v:val] =~ pat')
|
||||
if len(vv) == 0
|
||||
let vv = filter(sort(keys(snippets)), 'substitute(v:val, ":", "", "g") == snippet_name')
|
||||
if !empty(l:snippets)
|
||||
let l:snippet_name = l:tag_name
|
||||
if !has_key(l:snippets, l:snippet_name)
|
||||
let l:pat = '^' . join(split(l:tag_name, '\zs'), '\%(\|[^:-]\+-\)')
|
||||
let l:vv = filter(sort(keys(l:snippets)), 'l:snippets[v:val] =~ l:pat')
|
||||
if len(l:vv) == 0
|
||||
let l:vv = filter(sort(keys(l:snippets)), 'substitute(v:val, ":", "", "g") == l:snippet_name')
|
||||
endif
|
||||
if len(vv) > 0
|
||||
let snippet_name = vv[0]
|
||||
if len(l:vv) > 0
|
||||
let l:snippet_name = l:vv[0]
|
||||
else
|
||||
let pat = '^' . join(split(tag_name, '\zs'), '\%(\|[^:-]\+-*\)')
|
||||
let vv = filter(sort(keys(snippets)), 'snippets[v:val] =~ pat')
|
||||
if len(vv) == 0
|
||||
let pat = '^' . join(split(tag_name, '\zs'), '[^:]\{-}')
|
||||
let vv = filter(sort(keys(snippets)), 'snippets[v:val] =~ pat')
|
||||
if len(vv) == 0
|
||||
let pat = '^' . join(split(tag_name, '\zs'), '.\{-}')
|
||||
let vv = filter(sort(keys(snippets)), 'snippets[v:val] =~ pat')
|
||||
let l:pat = '^' . join(split(l:tag_name, '\zs'), '\%(\|[^:-]\+-*\)')
|
||||
let l:vv = filter(sort(keys(l:snippets)), 'l:snippets[v:val] =~ l:pat')
|
||||
if len(l:vv) == 0
|
||||
let l:pat = '^' . join(split(l:tag_name, '\zs'), '[^:]\{-}')
|
||||
let l:vv = filter(sort(keys(l:snippets)), 'l:snippets[v:val] =~ l:pat')
|
||||
if len(l:vv) == 0
|
||||
let l:pat = '^' . join(split(l:tag_name, '\zs'), '.\{-}')
|
||||
let l:vv = filter(sort(keys(l:snippets)), 'l:snippets[v:val] =~ l:pat')
|
||||
endif
|
||||
endif
|
||||
let minl = -1
|
||||
for vk in vv
|
||||
let vvs = snippets[vk]
|
||||
if minl == -1 || len(vvs) < minl
|
||||
let snippet_name = vk
|
||||
let minl = len(vvs)
|
||||
let l:minl = -1
|
||||
for l:vk in l:vv
|
||||
let l:vvs = l:snippets[l:vk]
|
||||
if l:minl == -1 || len(l:vvs) < l:minl
|
||||
let l:snippet_name = l:vk
|
||||
let l:minl = len(l:vvs)
|
||||
endif
|
||||
endfor
|
||||
endif
|
||||
endif
|
||||
if has_key(snippets, snippet_name)
|
||||
let snippet = snippets[snippet_name]
|
||||
if use_pipe_for_cursor
|
||||
let snippet = substitute(snippet, '|', '${cursor}', 'g')
|
||||
if has_key(l:snippets, l:snippet_name)
|
||||
let l:snippet = l:snippets[l:snippet_name]
|
||||
if l:use_pipe_for_cursor
|
||||
let l:snippet = substitute(l:snippet, '|', '${cursor}', 'g')
|
||||
endif
|
||||
let lines = split(snippet, "\n")
|
||||
call map(lines, 'substitute(v:val, "\\( \\|\\t\\)", escape(indent, "\\\\"), "g")')
|
||||
let current.snippet = join(lines, "\n")
|
||||
let current.name = ''
|
||||
let current.snippet = substitute(current.snippet, ';', value . ';', '')
|
||||
if use_pipe_for_cursor && len(value) > 0
|
||||
let current.snippet = substitute(current.snippet, '\${cursor}', '', 'g')
|
||||
let l:lines = split(l:snippet, "\n")
|
||||
call map(l:lines, 'substitute(v:val, "\\( \\|\\t\\)", escape(l:indent, "\\\\"), "g")')
|
||||
let l:current.snippet = join(l:lines, "\n")
|
||||
let l:current.name = ''
|
||||
let l:current.snippet = substitute(l:current.snippet, ';', l:value . ';', '')
|
||||
if l:use_pipe_for_cursor && len(l:value) > 0
|
||||
let l:current.snippet = substitute(l:current.snippet, '\${cursor}', '', 'g')
|
||||
endif
|
||||
if n < len(tokens) - 1
|
||||
let current.snippet .= "\n"
|
||||
if l:n < len(l:tokens) - 1
|
||||
let l:current.snippet .= "\n"
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
let current.pos = 0
|
||||
let lg = matchlist(token, '^\%(linear-gradient\|lg\)(\s*\(\S\+\)\s*,\s*\([^,]\+\)\s*,\s*\([^)]\+\)\s*)$')
|
||||
if len(lg) == 0
|
||||
let lg = matchlist(token, '^\%(linear-gradient\|lg\)(\s*\(\S\+\)\s*,\s*\([^,]\+\)\s*)$')
|
||||
if len(lg)
|
||||
let [lg[1], lg[2], lg[3]] = ['linear', lg[1], lg[2]]
|
||||
let l:current.pos = 0
|
||||
let l:lg = matchlist(l:token, '^\%(linear-gradient\|lg\)(\s*\(\S\+\)\s*,\s*\([^,]\+\)\s*,\s*\([^)]\+\)\s*)$')
|
||||
if len(l:lg) == 0
|
||||
let l:lg = matchlist(l:token, '^\%(linear-gradient\|lg\)(\s*\(\S\+\)\s*,\s*\([^,]\+\)\s*)$')
|
||||
if len(l:lg)
|
||||
let [l:lg[1], l:lg[2], l:lg[3]] = ['linear', l:lg[1], l:lg[2]]
|
||||
endif
|
||||
endif
|
||||
if len(lg)
|
||||
let current.name = ''
|
||||
let current.snippet = printf("background-image:-webkit-gradient(%s, 0 0, 0 100%, from(%s), to(%s));\n", lg[1], lg[2], lg[3])
|
||||
call add(root.child, deepcopy(current))
|
||||
let current.snippet = printf("background-image:-webkit-linear-gradient(%s, %s);\n", lg[2], lg[3])
|
||||
call add(root.child, deepcopy(current))
|
||||
let current.snippet = printf("background-image:-moz-linear-gradient(%s, %s);\n", lg[2], lg[3])
|
||||
call add(root.child, deepcopy(current))
|
||||
let current.snippet = printf("background-image:-o-linear-gradient(%s, %s);\n", lg[2], lg[3])
|
||||
call add(root.child, deepcopy(current))
|
||||
let current.snippet = printf("background-image:linear-gradient(%s, %s);\n", lg[2], lg[3])
|
||||
call add(root.child, deepcopy(current))
|
||||
elseif prefix
|
||||
let snippet = current.snippet
|
||||
let current.snippet = '-webkit-' . snippet . "\n"
|
||||
call add(root.child, deepcopy(current))
|
||||
let current.snippet = '-moz-' . snippet . "\n"
|
||||
call add(root.child, deepcopy(current))
|
||||
let current.snippet = '-o-' . snippet . "\n"
|
||||
call add(root.child, deepcopy(current))
|
||||
let current.snippet = '-ms-' . snippet . "\n"
|
||||
call add(root.child, deepcopy(current))
|
||||
let current.snippet = snippet
|
||||
call add(root.child, current)
|
||||
elseif token =~# '^c#\([0-9a-fA-F]\{3}\|[0-9a-fA-F]\{6}\)\(\.[0-9]\+\)\?'
|
||||
let cs = split(token, '\.')
|
||||
let current.name = ''
|
||||
let [r,g,b] = [0,0,0]
|
||||
if len(cs[0]) == 5
|
||||
let rgb = matchlist(cs[0], 'c#\(.\)\(.\)\(.\)')
|
||||
let r = eval('0x'.rgb[1].rgb[1])
|
||||
let g = eval('0x'.rgb[2].rgb[2])
|
||||
let b = eval('0x'.rgb[3].rgb[3])
|
||||
elseif len(cs[0]) == 8
|
||||
let rgb = matchlist(cs[0], 'c#\(..\)\(..\)\(..\)')
|
||||
let r = eval('0x'.rgb[1])
|
||||
let g = eval('0x'.rgb[2])
|
||||
let b = eval('0x'.rgb[3])
|
||||
if len(l:lg)
|
||||
let l:current.name = ''
|
||||
let l:current.snippet = printf("background-image:-webkit-gradient(%s, 0 0, 0 100%%, from(%s), to(%s));\n", l:lg[1], l:lg[2], l:lg[3])
|
||||
call add(l:root.child, deepcopy(l:current))
|
||||
let l:current.snippet = printf("background-image:-webkit-linear-gradient(%s, %s);\n", l:lg[2], l:lg[3])
|
||||
call add(l:root.child, deepcopy(l:current))
|
||||
let l:current.snippet = printf("background-image:-moz-linear-gradient(%s, %s);\n", l:lg[2], l:lg[3])
|
||||
call add(l:root.child, deepcopy(l:current))
|
||||
let l:current.snippet = printf("background-image:-o-linear-gradient(%s, %s);\n", l:lg[2], l:lg[3])
|
||||
call add(l:root.child, deepcopy(l:current))
|
||||
let l:current.snippet = printf("background-image:linear-gradient(%s, %s);\n", l:lg[2], l:lg[3])
|
||||
call add(l:root.child, deepcopy(l:current))
|
||||
elseif l:prefix
|
||||
let l:snippet = l:current.snippet
|
||||
let l:current.snippet = '-webkit-' . l:snippet . "\n"
|
||||
call add(l:root.child, deepcopy(l:current))
|
||||
let l:current.snippet = '-moz-' . l:snippet . "\n"
|
||||
call add(l:root.child, deepcopy(l:current))
|
||||
let l:current.snippet = '-o-' . l:snippet . "\n"
|
||||
call add(l:root.child, deepcopy(l:current))
|
||||
let l:current.snippet = '-ms-' . l:snippet . "\n"
|
||||
call add(l:root.child, deepcopy(l:current))
|
||||
let l:current.snippet = l:snippet
|
||||
call add(l:root.child, l:current)
|
||||
elseif l:token =~# '^c#\([0-9a-fA-F]\{3}\|[0-9a-fA-F]\{6}\)\(\.[0-9]\+\)\?'
|
||||
let l:cs = split(l:token, '\.')
|
||||
let l:current.name = ''
|
||||
let [l:r,l:g,l:b] = [0,0,0]
|
||||
if len(l:cs[0]) == 5
|
||||
let l:rgb = matchlist(l:cs[0], 'c#\(.\)\(.\)\(.\)')
|
||||
let l:r = eval('0x'.l:rgb[1].l:rgb[1])
|
||||
let l:g = eval('0x'.l:rgb[2].l:rgb[2])
|
||||
let l:b = eval('0x'.l:rgb[3].l:rgb[3])
|
||||
elseif len(l:cs[0]) == 8
|
||||
let l:rgb = matchlist(l:cs[0], 'c#\(..\)\(..\)\(..\)')
|
||||
let l:r = eval('0x'.l:rgb[1])
|
||||
let l:g = eval('0x'.l:rgb[2])
|
||||
let l:b = eval('0x'.l:rgb[3])
|
||||
endif
|
||||
if len(cs) == 1
|
||||
let current.snippet = printf('color:rgb(%d, %d, %d);', r, g, b)
|
||||
if len(l:cs) == 1
|
||||
let l:current.snippet = printf('color:rgb(%d, %d, %d);', l:r, l:g, l:b)
|
||||
else
|
||||
let current.snippet = printf('color:rgb(%d, %d, %d, %s);', r, g, b, string(str2float('0.'.cs[1])))
|
||||
let l:current.snippet = printf('color:rgb(%d, %d, %d, %s);', l:r, l:g, l:b, string(str2float('0.'.l:cs[1])))
|
||||
endif
|
||||
call add(root.child, current)
|
||||
elseif token =~# '^c#'
|
||||
let current.name = ''
|
||||
let current.snippet = 'color:\${cursor};'
|
||||
call add(root.child, current)
|
||||
call add(l:root.child, l:current)
|
||||
elseif l:token =~# '^c#'
|
||||
let l:current.name = ''
|
||||
let l:current.snippet = 'color:\${cursor};'
|
||||
call add(l:root.child, l:current)
|
||||
else
|
||||
call add(root.child, current)
|
||||
call add(l:root.child, l:current)
|
||||
endif
|
||||
endfor
|
||||
endif
|
||||
return root
|
||||
return l:root
|
||||
endfunction
|
||||
|
||||
function! emmet#lang#css#toString(settings, current, type, inline, filters, itemno, indent) abort
|
||||
let current = a:current
|
||||
let value = current.value[1:-2]
|
||||
let tmp = substitute(value, '\${cursor}', '', 'g')
|
||||
if tmp !~ '.*{[ \t\r\n]*}$'
|
||||
let l:current = a:current
|
||||
let l:value = l:current.value[1:-2]
|
||||
let l:tmp = substitute(l:value, '\${cursor}', '', 'g')
|
||||
if l:tmp !~ '.*{[ \t\r\n]*}$'
|
||||
if emmet#useFilter(a:filters, 'fc')
|
||||
let value = substitute(value, '\([^:]\+\):\([^;]*\)', '\1: \2', 'g')
|
||||
let l:value = substitute(l:value, '\([^:]\+\):\([^;]*\)', '\1: \2', 'g')
|
||||
else
|
||||
let value = substitute(value, '\([^:]\+\):\([^;]*\)', '\1:\2', 'g')
|
||||
let l:value = substitute(l:value, '\([^:]\+\):\([^;]*\)', '\1:\2', 'g')
|
||||
endif
|
||||
if current.important
|
||||
let value = substitute(value, ';', ' !important;', '')
|
||||
if l:current.important
|
||||
let l:value = substitute(l:value, ';', ' !important;', '')
|
||||
endif
|
||||
endif
|
||||
return value
|
||||
return l:value
|
||||
endfunction
|
||||
|
||||
function! emmet#lang#css#imageSize() abort
|
||||
let img_region = emmet#util#searchRegion('{', '}')
|
||||
if !emmet#util#regionIsValid(img_region) || !emmet#util#cursorInRegion(img_region)
|
||||
let l:img_region = emmet#util#searchRegion('{', '}')
|
||||
if !emmet#util#regionIsValid(l:img_region) || !emmet#util#cursorInRegion(l:img_region)
|
||||
return
|
||||
endif
|
||||
let content = emmet#util#getContent(img_region)
|
||||
let fn = matchstr(content, '\<url(\zs[^)]\+\ze)')
|
||||
let fn = substitute(fn, '[''" \t]', '', 'g')
|
||||
if fn =~# '^\s*$'
|
||||
let l:content = emmet#util#getContent(l:img_region)
|
||||
let l:fn = matchstr(l:content, '\<url(\zs[^)]\+\ze)')
|
||||
let l:fn = substitute(l:fn, '[''" \t]', '', 'g')
|
||||
if l:fn =~# '^\s*$'
|
||||
return
|
||||
elseif fn !~# '^\(/\|http\)'
|
||||
let fn = simplify(expand('%:h') . '/' . fn)
|
||||
elseif l:fn !~# '^\(/\|http\)'
|
||||
let l:fn = simplify(expand('%:h') . '/' . l:fn)
|
||||
endif
|
||||
let [width, height] = emmet#util#getImageSize(fn)
|
||||
if width == -1 && height == -1
|
||||
let [l:width, l:height] = emmet#util#getImageSize(l:fn)
|
||||
if l:width == -1 && l:height == -1
|
||||
return
|
||||
endif
|
||||
let indent = emmet#getIndentation('css')
|
||||
if content =~# '.*\<width\s*:[^;]*;.*'
|
||||
let content = substitute(content, '\<width\s*:[^;]*;', 'width: ' . width . 'px;', '')
|
||||
let l:indent = emmet#getIndentation('css')
|
||||
if l:content =~# '.*\<width\s*:[^;]*;.*'
|
||||
let l:content = substitute(l:content, '\<width\s*:[^;]*;', 'width: ' . l:width . 'px;', '')
|
||||
else
|
||||
let content = substitute(content, '}', indent . 'width: ' . width . "px;\n}", '')
|
||||
let l:content = substitute(l:content, '}', l:indent . 'width: ' . l:width . "px;\n}", '')
|
||||
endif
|
||||
if content =~# '.*\<height\s*:[^;]*;.*'
|
||||
let content = substitute(content, '\<height\s*:[^;]*;', 'height: ' . height . 'px;', '')
|
||||
if l:content =~# '.*\<height\s*:[^;]*;.*'
|
||||
let l:content = substitute(l:content, '\<height\s*:[^;]*;', 'height: ' . l:height . 'px;', '')
|
||||
else
|
||||
let content = substitute(content, '}', indent . 'height: ' . height . "px;\n}", '')
|
||||
let l:content = substitute(l:content, '}', l:indent . 'height: ' . l:height . "px;\n}", '')
|
||||
endif
|
||||
call emmet#util#setContent(img_region, content)
|
||||
call emmet#util#setContent(l:img_region, l:content)
|
||||
endfunction
|
||||
|
||||
function! emmet#lang#css#imageEncode() abort
|
||||
let img_region = emmet#util#searchRegion('url(', ')')
|
||||
if !emmet#util#regionIsValid(img_region) || !emmet#util#cursorInRegion(img_region)
|
||||
let l:img_region = emmet#util#searchRegion('url(', ')')
|
||||
if !emmet#util#regionIsValid(l:img_region) || !emmet#util#cursorInRegion(l:img_region)
|
||||
return
|
||||
endif
|
||||
let content = emmet#util#getContent(img_region)
|
||||
let fn = matchstr(content, '\<url(\zs[^)]\+\ze)')
|
||||
let fn = substitute(fn, '[''" \t]', '', 'g')
|
||||
if fn =~# '^\s*$'
|
||||
let l:content = emmet#util#getContent(l:img_region)
|
||||
let l:fn = matchstr(l:content, '\<url(\zs[^)]\+\ze)')
|
||||
let l:fn = substitute(l:fn, '[''" \t]', '', 'g')
|
||||
if l:fn =~# '^\s*$'
|
||||
return
|
||||
elseif fn !~# '^\(/\|http\)'
|
||||
let fn = simplify(expand('%:h') . '/' . fn)
|
||||
elseif l:fn !~# '^\(/\|http\)'
|
||||
let l:fn = simplify(expand('%:h') . '/' . l:fn)
|
||||
endif
|
||||
let encoded = emmet#util#imageEncodeDecode(fn, 0)
|
||||
call emmet#util#setContent(img_region, 'url(' . encoded . ')')
|
||||
let l:encoded = emmet#util#imageEncodeDecode(l:fn, 0)
|
||||
call emmet#util#setContent(l:img_region, 'url(' . l:encoded . ')')
|
||||
endfunction
|
||||
|
||||
function! emmet#lang#css#parseTag(tag) abort
|
||||
@@ -290,67 +290,67 @@ function! emmet#lang#css#parseTag(tag) abort
|
||||
endfunction
|
||||
|
||||
function! emmet#lang#css#toggleComment() abort
|
||||
let line = getline('.')
|
||||
let mx = '^\(\s*\)/\*\s*\(.*\)\s*\*/\s*$'
|
||||
if line =~# '{\s*$'
|
||||
let block = emmet#util#searchRegion('/\*', '\*/\zs')
|
||||
if emmet#util#regionIsValid(block)
|
||||
let content = emmet#util#getContent(block)
|
||||
let content = substitute(content, '/\*\s\(.*\)\s\*/', '\1', '')
|
||||
call emmet#util#setContent(block, content)
|
||||
let l:line = getline('.')
|
||||
let l:mx = '^\(\s*\)/\*\s*\(.*\)\s*\*/\s*$'
|
||||
if l:line =~# '{\s*$'
|
||||
let l:block = emmet#util#searchRegion('/\*', '\*/\zs')
|
||||
if emmet#util#regionIsValid(l:block)
|
||||
let l:content = emmet#util#getContent(l:block)
|
||||
let l:content = substitute(l:content, '/\*\s\(.*\)\s\*/', '\1', '')
|
||||
call emmet#util#setContent(l:block, l:content)
|
||||
else
|
||||
let node = expand('<cword>')
|
||||
if len(node)
|
||||
exe "normal ciw\<c-r>='/* '.node.' */'\<cr>"
|
||||
let l:node = expand('<cword>')
|
||||
if len(l:node)
|
||||
exe "normal ciw\<c-r>='/* '.l:node.' */'\<cr>"
|
||||
endif
|
||||
endif
|
||||
else
|
||||
if line =~# mx
|
||||
let space = substitute(matchstr(line, mx), mx, '\1', '')
|
||||
let line = substitute(matchstr(line, mx), mx, '\2', '')
|
||||
let line = space . substitute(line, '^\s*\|\s*$', '\1', 'g')
|
||||
if l:line =~# l:mx
|
||||
let l:space = substitute(matchstr(l:line, l:mx), l:mx, '\1', '')
|
||||
let l:line = substitute(matchstr(l:line, l:mx), l:mx, '\2', '')
|
||||
let l:line = l:space . substitute(l:line, '^\s*\|\s*$', '\1', 'g')
|
||||
else
|
||||
let mx = '^\(\s*\)\(''[^'']*''\|[^'']*\|;\)\s*$'
|
||||
let l:mx = '^\(\s*\)\(''[^'']*''\|[^'']*\|;\)\s*$'
|
||||
" TODO multi-property
|
||||
"let mx = '^\(\s*\)\(\%(''[^'']*''\|[^'';]\+\)*;\{0,1}\)'
|
||||
let line = substitute(line, mx, '\1/* \2 */', '')
|
||||
"let l:mx = '^\(\s*\)\(\%(''[^'']*''\|[^'';]\+\)*;\{0,1}\)'
|
||||
let l:line = substitute(l:line, l:mx, '\1/* \2 */', '')
|
||||
endif
|
||||
call setline('.', line)
|
||||
call setline('.', l:line)
|
||||
endif
|
||||
endfunction
|
||||
|
||||
function! emmet#lang#css#balanceTag(flag) range abort
|
||||
if a:flag == -2 || a:flag == 2
|
||||
let curpos = [0, line("'<"), col("'<"), 0]
|
||||
let l:curpos = [0, line("'<"), col("'<"), 0]
|
||||
else
|
||||
let curpos = emmet#util#getcurpos()
|
||||
let l:curpos = emmet#util#getcurpos()
|
||||
endif
|
||||
let block = emmet#util#getVisualBlock()
|
||||
if !emmet#util#regionIsValid(block)
|
||||
let l:block = emmet#util#getVisualBlock()
|
||||
if !emmet#util#regionIsValid(l:block)
|
||||
if a:flag > 0
|
||||
let block = emmet#util#searchRegion('^', ';')
|
||||
if emmet#util#regionIsValid(block)
|
||||
call emmet#util#selectRegion(block)
|
||||
let l:block = emmet#util#searchRegion('^', ';')
|
||||
if emmet#util#regionIsValid(l:block)
|
||||
call emmet#util#selectRegion(l:block)
|
||||
return
|
||||
endif
|
||||
endif
|
||||
else
|
||||
if a:flag > 0
|
||||
let content = emmet#util#getContent(block)
|
||||
if content !~# '^{.*}$'
|
||||
let block = emmet#util#searchRegion('{', '}')
|
||||
if emmet#util#regionIsValid(block)
|
||||
call emmet#util#selectRegion(block)
|
||||
let l:content = emmet#util#getContent(l:block)
|
||||
if l:content !~# '^{.*}$'
|
||||
let l:block = emmet#util#searchRegion('{', '}')
|
||||
if emmet#util#regionIsValid(l:block)
|
||||
call emmet#util#selectRegion(l:block)
|
||||
return
|
||||
endif
|
||||
endif
|
||||
else
|
||||
let pos = searchpos('.*;', 'nW')
|
||||
if pos[0] != 0
|
||||
call setpos('.', [0, pos[0], pos[1], 0])
|
||||
let block = emmet#util#searchRegion('^', ';')
|
||||
if emmet#util#regionIsValid(block)
|
||||
call emmet#util#selectRegion(block)
|
||||
let l:pos = searchpos('.*;', 'nW')
|
||||
if l:pos[0] != 0
|
||||
call setpos('.', [0, l:pos[0], l:pos[1], 0])
|
||||
let l:block = emmet#util#searchRegion('^', ';')
|
||||
if emmet#util#regionIsValid(l:block)
|
||||
call emmet#util#selectRegion(l:block)
|
||||
return
|
||||
endif
|
||||
endif
|
||||
@@ -359,7 +359,7 @@ function! emmet#lang#css#balanceTag(flag) range abort
|
||||
if a:flag == -2 || a:flag == 2
|
||||
silent! exe 'normal! gv'
|
||||
else
|
||||
call setpos('.', curpos)
|
||||
call setpos('.', l:curpos)
|
||||
endif
|
||||
endfunction
|
||||
|
||||
|
||||
Reference in New Issue
Block a user