mirror of
https://github.com/mattn/emmet-vim.git
synced 2025-12-07 03:04:27 +08:00
wip
This commit is contained in:
@@ -3,12 +3,12 @@
|
|||||||
" Author: Yasuhiro Matsumoto <mattn.jp@gmail.com>
|
" Author: Yasuhiro Matsumoto <mattn.jp@gmail.com>
|
||||||
" Last Change: 17-Dec-2014.
|
" Last Change: 17-Dec-2014.
|
||||||
|
|
||||||
let s:save_cpo = &cpo
|
let s:save_cpo = &cpoptions
|
||||||
set cpo&vim
|
set cpoptions&vim
|
||||||
|
|
||||||
let s:filtermx = '|\(\%(bem\|html\|haml\|slim\|e\|c\|s\|fc\|xsl\|t\|\/[^ ]\+\)\s*,\{0,1}\s*\)*$'
|
let s:filtermx = '|\(\%(bem\|html\|haml\|slim\|e\|c\|s\|fc\|xsl\|t\|\/[^ ]\+\)\s*,\{0,1}\s*\)*$'
|
||||||
|
|
||||||
function! emmet#getExpandos(type, key)
|
function! emmet#getExpandos(type, key) abort
|
||||||
let expandos = emmet#getResource(a:type, 'expandos', {})
|
let expandos = emmet#getResource(a:type, 'expandos', {})
|
||||||
if has_key(expandos, a:key)
|
if has_key(expandos, a:key)
|
||||||
return expandos[a:key]
|
return expandos[a:key]
|
||||||
@@ -16,27 +16,27 @@ function! emmet#getExpandos(type, key)
|
|||||||
return a:key
|
return a:key
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! emmet#splitFilterArg(filters)
|
function! emmet#splitFilterArg(filters) abort
|
||||||
for f in a:filters
|
for f in a:filters
|
||||||
if f =~ '^/'
|
if f =~# '^/'
|
||||||
return f[1:]
|
return f[1:]
|
||||||
endif
|
endif
|
||||||
endfor
|
endfor
|
||||||
return ''
|
return ''
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! emmet#useFilter(filters, filter)
|
function! emmet#useFilter(filters, filter) abort
|
||||||
for f in a:filters
|
for f in a:filters
|
||||||
if a:filter == '/' && f =~ '^/'
|
if a:filter ==# '/' && f =~# '^/'
|
||||||
return 1
|
return 1
|
||||||
elseif f == a:filter
|
elseif f ==# a:filter
|
||||||
return 1
|
return 1
|
||||||
endif
|
endif
|
||||||
endfor
|
endfor
|
||||||
return 0
|
return 0
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! emmet#getIndentation(...)
|
function! emmet#getIndentation(...) abort
|
||||||
if a:0 > 0
|
if a:0 > 0
|
||||||
let type = a:1
|
let type = a:1
|
||||||
else
|
else
|
||||||
@@ -47,12 +47,12 @@ function! emmet#getIndentation(...)
|
|||||||
elseif has_key(s:emmet_settings, 'indentation')
|
elseif has_key(s:emmet_settings, 'indentation')
|
||||||
let indent = s:emmet_settings.indentation
|
let indent = s:emmet_settings.indentation
|
||||||
else
|
else
|
||||||
let indent = (&l:expandtab || &l:tabstop != &l:shiftwidth) ? repeat(' ', &l:shiftwidth) : "\t"
|
let indent = (&l:expandtab || &l:tabstop !=# &l:shiftwidth) ? repeat(' ', &l:shiftwidth) : "\t"
|
||||||
endif
|
endif
|
||||||
return indent
|
return indent
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! emmet#getBaseType(type)
|
function! emmet#getBaseType(type) abort
|
||||||
if !has_key(s:emmet_settings, a:type)
|
if !has_key(s:emmet_settings, a:type)
|
||||||
return ''
|
return ''
|
||||||
endif
|
endif
|
||||||
@@ -60,20 +60,20 @@ function! emmet#getBaseType(type)
|
|||||||
return a:type
|
return a:type
|
||||||
endif
|
endif
|
||||||
let extends = s:emmet_settings[a:type].extends
|
let extends = s:emmet_settings[a:type].extends
|
||||||
if type(extends) == 1
|
if type(extends) ==# 1
|
||||||
let tmp = split(extends, '\s*,\s*')
|
let tmp = split(extends, '\s*,\s*')
|
||||||
let ext = tmp[0]
|
let ext = tmp[0]
|
||||||
else
|
else
|
||||||
let ext = extends[0]
|
let ext = extends[0]
|
||||||
endif
|
endif
|
||||||
if a:type != ext
|
if a:type !=# ext
|
||||||
return emmet#getBaseType(ext)
|
return emmet#getBaseType(ext)
|
||||||
endif
|
endif
|
||||||
return ''
|
return ''
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! emmet#isExtends(type, extend)
|
function! emmet#isExtends(type, extend) abort
|
||||||
if a:type == a:extend
|
if a:type ==# a:extend
|
||||||
return 1
|
return 1
|
||||||
endif
|
endif
|
||||||
if !has_key(s:emmet_settings, a:type)
|
if !has_key(s:emmet_settings, a:type)
|
||||||
@@ -83,34 +83,34 @@ function! emmet#isExtends(type, extend)
|
|||||||
return 0
|
return 0
|
||||||
endif
|
endif
|
||||||
let extends = s:emmet_settings[a:type].extends
|
let extends = s:emmet_settings[a:type].extends
|
||||||
if type(extends) == 1
|
if type(extends) ==# 1
|
||||||
let tmp = split(extends, '\s*,\s*')
|
let tmp = split(extends, '\s*,\s*')
|
||||||
unlet! extends
|
unlet! extends
|
||||||
let extends = tmp
|
let extends = tmp
|
||||||
endif
|
endif
|
||||||
for ext in extends
|
for ext in extends
|
||||||
if a:extend == ext
|
if a:extend ==# ext
|
||||||
return 1
|
return 1
|
||||||
endif
|
endif
|
||||||
endfor
|
endfor
|
||||||
return 0
|
return 0
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! emmet#parseIntoTree(abbr, type)
|
function! emmet#parseIntoTree(abbr, type) abort
|
||||||
let abbr = a:abbr
|
let abbr = a:abbr
|
||||||
let type = a:type
|
let type = a:type
|
||||||
let rtype = emmet#lang#exists(type) ? type : 'html'
|
let rtype = emmet#lang#exists(type) ? type : 'html'
|
||||||
return emmet#lang#{rtype}#parseIntoTree(abbr, type)
|
return emmet#lang#{rtype}#parseIntoTree(abbr, type)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! emmet#expandAbbrIntelligent(feedkey)
|
function! emmet#expandAbbrIntelligent(feedkey) abort
|
||||||
if !emmet#isExpandable()
|
if !emmet#isExpandable()
|
||||||
return a:feedkey
|
return a:feedkey
|
||||||
endif
|
endif
|
||||||
return "\<plug>(emmet-expand-abbr)"
|
return "\<plug>(emmet-expand-abbr)"
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! emmet#isExpandable()
|
function! emmet#isExpandable() abort
|
||||||
let line = getline('.')
|
let line = getline('.')
|
||||||
if col('.') < len(line)
|
if col('.') < len(line)
|
||||||
let line = matchstr(line, '^\(.*\%'.col('.').'c\)')
|
let line = matchstr(line, '^\(.*\%'.col('.').'c\)')
|
||||||
@@ -122,9 +122,9 @@ function! emmet#isExpandable()
|
|||||||
return len(part) > 0
|
return len(part) > 0
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! emmet#mergeConfig(lhs, rhs)
|
function! emmet#mergeConfig(lhs, rhs) abort
|
||||||
let [lhs, rhs] = [a:lhs, a:rhs]
|
let [lhs, rhs] = [a:lhs, a:rhs]
|
||||||
if type(lhs) == 3 && type(rhs) == 3
|
if type(lhs) ==# 3 && type(rhs) ==# 3
|
||||||
let lhs += rhs
|
let lhs += rhs
|
||||||
if len(lhs)
|
if len(lhs)
|
||||||
call remove(lhs, 0, len(lhs)-1)
|
call remove(lhs, 0, len(lhs)-1)
|
||||||
@@ -132,14 +132,14 @@ function! emmet#mergeConfig(lhs, rhs)
|
|||||||
for rhi in rhs
|
for rhi in rhs
|
||||||
call add(lhs, rhs[rhi])
|
call add(lhs, rhs[rhi])
|
||||||
endfor
|
endfor
|
||||||
elseif type(lhs) == 4 && type(rhs) == 4
|
elseif type(lhs) ==# 4 && type(rhs) ==# 4
|
||||||
for key in keys(rhs)
|
for key in keys(rhs)
|
||||||
if type(rhs[key]) == 3
|
if type(rhs[key]) ==# 3
|
||||||
if !has_key(lhs, key)
|
if !has_key(lhs, key)
|
||||||
let lhs[key] = []
|
let lhs[key] = []
|
||||||
endif
|
endif
|
||||||
let lhs[key] += rhs[key]
|
let lhs[key] += rhs[key]
|
||||||
elseif type(rhs[key]) == 4
|
elseif type(rhs[key]) ==# 4
|
||||||
if has_key(lhs, key)
|
if has_key(lhs, key)
|
||||||
call emmet#mergeConfig(lhs[key], rhs[key])
|
call emmet#mergeConfig(lhs[key], rhs[key])
|
||||||
else
|
else
|
||||||
@@ -152,20 +152,20 @@ function! emmet#mergeConfig(lhs, rhs)
|
|||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! emmet#newNode()
|
function! emmet#newNode() abort
|
||||||
return { 'name': '', 'attr': {}, 'child': [], 'snippet': '', 'basevalue': 0, 'basedirect': 1, 'multiplier': 1, 'parent': {}, 'value': '', 'pos': 0, 'important': 0, 'attrs_order': ['id', 'class'] }
|
return { 'name': '', 'attr': {}, 'child': [], 'snippet': '', 'basevalue': 0, 'basedirect': 1, 'multiplier': 1, 'parent': {}, 'value': '', 'pos': 0, 'important': 0, 'attrs_order': ['id', 'class'] }
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:itemno(itemno, current)
|
function! s:itemno(itemno, current) abort
|
||||||
let current = a:current
|
let current = a:current
|
||||||
if current.basedirect > 0
|
if current.basedirect > 0
|
||||||
if current.basevalue == 0
|
if current.basevalue ==# 0
|
||||||
return a:itemno
|
return a:itemno
|
||||||
else
|
else
|
||||||
return current.basevalue - 1 + a:itemno
|
return current.basevalue - 1 + a:itemno
|
||||||
endif
|
endif
|
||||||
else
|
else
|
||||||
if current.basevalue == 0
|
if current.basevalue ==# 0
|
||||||
return current.multiplier - 1 - a:itemno
|
return current.multiplier - 1 - a:itemno
|
||||||
else
|
else
|
||||||
return current.multiplier + current.basevalue - 2 - a:itemno
|
return current.multiplier + current.basevalue - 2 - a:itemno
|
||||||
@@ -173,21 +173,21 @@ function! s:itemno(itemno, current)
|
|||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! emmet#toString(...)
|
function! emmet#toString(...) abort
|
||||||
let current = a:1
|
let current = a:1
|
||||||
if a:0 > 1
|
if a:0 > 1
|
||||||
let type = a:2
|
let type = a:2
|
||||||
else
|
else
|
||||||
let type = &ft
|
let type = &filetype
|
||||||
endif
|
endif
|
||||||
if len(type) == 0 | let type = 'html' | endif
|
if len(type) ==# 0 | let type = 'html' | endif
|
||||||
if a:0 > 2
|
if a:0 > 2
|
||||||
let inline = a:3
|
let inline = a:3
|
||||||
else
|
else
|
||||||
let inline = 0
|
let inline = 0
|
||||||
endif
|
endif
|
||||||
if a:0 > 3
|
if a:0 > 3
|
||||||
if type(a:4) == 1
|
if type(a:4) ==# 1
|
||||||
let filters = split(a:4, '\s*,\s*')
|
let filters = split(a:4, '\s*,\s*')
|
||||||
else
|
else
|
||||||
let filters = a:4
|
let filters = a:4
|
||||||
@@ -212,7 +212,7 @@ function! emmet#toString(...)
|
|||||||
let rtype = emmet#lang#exists(type) ? type : 'html'
|
let rtype = emmet#lang#exists(type) ? type : 'html'
|
||||||
while itemno < current.multiplier
|
while itemno < current.multiplier
|
||||||
if len(current.name)
|
if len(current.name)
|
||||||
if current.multiplier == 1
|
if current.multiplier ==# 1
|
||||||
let inner = emmet#lang#{rtype}#toString(s:emmet_settings, current, type, inline, filters, s:itemno(group_itemno, current), indent)
|
let inner = emmet#lang#{rtype}#toString(s:emmet_settings, current, type, inline, filters, s:itemno(group_itemno, current), indent)
|
||||||
else
|
else
|
||||||
let inner = emmet#lang#{rtype}#toString(s:emmet_settings, current, type, inline, filters, s:itemno(itemno, current), indent)
|
let inner = emmet#lang#{rtype}#toString(s:emmet_settings, current, type, inline, filters, s:itemno(itemno, current), indent)
|
||||||
@@ -223,7 +223,7 @@ function! emmet#toString(...)
|
|||||||
let str .= inner
|
let str .= inner
|
||||||
else
|
else
|
||||||
let snippet = current.snippet
|
let snippet = current.snippet
|
||||||
if len(snippet) == 0
|
if len(snippet) ==# 0
|
||||||
let snippets = emmet#getResource(type, 'snippets', {})
|
let snippets = emmet#getResource(type, 'snippets', {})
|
||||||
if !empty(snippets) && has_key(snippets, 'emmet_snippet')
|
if !empty(snippets) && has_key(snippets, 'emmet_snippet')
|
||||||
let snippet = snippets['emmet_snippet']
|
let snippet = snippets['emmet_snippet']
|
||||||
@@ -271,16 +271,16 @@ function! emmet#toString(...)
|
|||||||
return str
|
return str
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! emmet#getSettings()
|
function! emmet#getSettings() abort
|
||||||
return s:emmet_settings
|
return s:emmet_settings
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! emmet#getFilters(type)
|
function! emmet#getFilters(type) abort
|
||||||
let filterstr = emmet#getResource(a:type, 'filters', '')
|
let filterstr = emmet#getResource(a:type, 'filters', '')
|
||||||
return split(filterstr, '\s*,\s*')
|
return split(filterstr, '\s*,\s*')
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! emmet#getResource(type, name, default)
|
function! emmet#getResource(type, name, default) abort
|
||||||
if exists('b:emmet_' . a:name)
|
if exists('b:emmet_' . a:name)
|
||||||
return get(b:, 'emmet_' . a:name)
|
return get(b:, 'emmet_' . a:name)
|
||||||
endif
|
endif
|
||||||
@@ -291,14 +291,14 @@ function! emmet#getResource(type, name, default)
|
|||||||
|
|
||||||
if has_key(s:emmet_settings[a:type], 'extends')
|
if has_key(s:emmet_settings[a:type], 'extends')
|
||||||
let extends = s:emmet_settings[a:type].extends
|
let extends = s:emmet_settings[a:type].extends
|
||||||
if type(extends) == 1
|
if type(extends) ==# 1
|
||||||
let tmp = split(extends, '\s*,\s*')
|
let tmp = split(extends, '\s*,\s*')
|
||||||
unlet! extends
|
unlet! extends
|
||||||
let extends = tmp
|
let extends = tmp
|
||||||
endif
|
endif
|
||||||
for ext in extends
|
for ext in extends
|
||||||
if has_key(s:emmet_settings, ext) && has_key(s:emmet_settings[ext], a:name)
|
if has_key(s:emmet_settings, ext) && has_key(s:emmet_settings[ext], a:name)
|
||||||
if type(ret) == 3 || type(ret) == 4
|
if type(ret) ==# 3 || type(ret) ==# 4
|
||||||
call emmet#mergeConfig(ret, s:emmet_settings[ext][a:name])
|
call emmet#mergeConfig(ret, s:emmet_settings[ext][a:name])
|
||||||
else
|
else
|
||||||
let ret = s:emmet_settings[ext][a:name]
|
let ret = s:emmet_settings[ext][a:name]
|
||||||
@@ -308,7 +308,7 @@ function! emmet#getResource(type, name, default)
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
if has_key(s:emmet_settings[a:type], a:name)
|
if has_key(s:emmet_settings[a:type], a:name)
|
||||||
if type(ret) == 3 || type(ret) == 4
|
if type(ret) ==# 3 || type(ret) ==# 4
|
||||||
call emmet#mergeConfig(ret, s:emmet_settings[a:type][a:name])
|
call emmet#mergeConfig(ret, s:emmet_settings[a:type][a:name])
|
||||||
else
|
else
|
||||||
let ret = s:emmet_settings[a:type][a:name]
|
let ret = s:emmet_settings[a:type][a:name]
|
||||||
@@ -318,18 +318,18 @@ function! emmet#getResource(type, name, default)
|
|||||||
return ret
|
return ret
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! emmet#getFileType(...)
|
function! emmet#getFileType(...) abort
|
||||||
let flg = get(a:000, 0, 0)
|
let flg = get(a:000, 0, 0)
|
||||||
let type = ''
|
let type = ''
|
||||||
for part in split(&ft, '\.')
|
for part in split(&filetype, '\.')
|
||||||
if emmet#lang#exists(part)
|
if emmet#lang#exists(part)
|
||||||
let type = part
|
let type = part
|
||||||
break
|
break
|
||||||
endif
|
endif
|
||||||
let base = emmet#getBaseType(part)
|
let base = emmet#getBaseType(part)
|
||||||
if base != ''
|
if base !=# ''
|
||||||
if flg
|
if flg
|
||||||
let type = &ft
|
let type = &filetype
|
||||||
else
|
else
|
||||||
let type = base
|
let type = base
|
||||||
endif
|
endif
|
||||||
@@ -337,27 +337,27 @@ function! emmet#getFileType(...)
|
|||||||
break
|
break
|
||||||
endif
|
endif
|
||||||
endfor
|
endfor
|
||||||
if type == 'html'
|
if type ==# 'html'
|
||||||
let pos = emmet#util#getcurpos()
|
let pos = emmet#util#getcurpos()
|
||||||
let type = synIDattr(synID(pos[1], pos[2], 1), "name")
|
let type = synIDattr(synID(pos[1], pos[2], 1), 'name')
|
||||||
if type =~ '^css\w'
|
if type =~# '^css\w'
|
||||||
let type = 'css'
|
let type = 'css'
|
||||||
endif
|
endif
|
||||||
if type =~ '^html\w'
|
if type =~# '^html\w'
|
||||||
let type = 'html'
|
let type = 'html'
|
||||||
endif
|
endif
|
||||||
if type =~ '^javaScript'
|
if type =~# '^javaScript'
|
||||||
let type = 'javascript'
|
let type = 'javascript'
|
||||||
endif
|
endif
|
||||||
if len(type) == 0 && type =~ '^xml'
|
if len(type) ==# 0 && type =~# '^xml'
|
||||||
let type = 'xml'
|
let type = 'xml'
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
if len(type) == 0 | let type = 'html' | endif
|
if len(type) ==# 0 | let type = 'html' | endif
|
||||||
return type
|
return type
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! emmet#getDollarExprs(expand)
|
function! emmet#getDollarExprs(expand) abort
|
||||||
let expand = a:expand
|
let expand = a:expand
|
||||||
let dollar_list = []
|
let dollar_list = []
|
||||||
let dollar_reg = '\%(\\\)\@<!\${\(\([^{}]\|\%(\\\)\@\<=[{}]\)\{}\)}'
|
let dollar_reg = '\%(\\\)\@<!\${\(\([^{}]\|\%(\\\)\@\<=[{}]\)\{}\)}'
|
||||||
@@ -365,11 +365,11 @@ function! emmet#getDollarExprs(expand)
|
|||||||
let matcharr = matchlist(expand, dollar_reg)
|
let matcharr = matchlist(expand, dollar_reg)
|
||||||
if len(matcharr) > 0
|
if len(matcharr) > 0
|
||||||
let key = get(matcharr, 1)
|
let key = get(matcharr, 1)
|
||||||
if key !~ '^\d\+:'
|
if key !~# '^\d\+:'
|
||||||
let key = substitute(key, '\\{', '{', 'g')
|
let key = substitute(key, '\\{', '{', 'g')
|
||||||
let key = substitute(key, '\\}', '}', 'g')
|
let key = substitute(key, '\\}', '}', 'g')
|
||||||
let value = emmet#getDollarValueByKey(key)
|
let value = emmet#getDollarValueByKey(key)
|
||||||
if type(value) == type('')
|
if type(value) ==# type('')
|
||||||
let expr = get(matcharr, 0)
|
let expr = get(matcharr, 0)
|
||||||
call add(dollar_list, {'expr': expr, 'value': value})
|
call add(dollar_list, {'expr': expr, 'value': value})
|
||||||
endif
|
endif
|
||||||
@@ -382,31 +382,31 @@ function! emmet#getDollarExprs(expand)
|
|||||||
return dollar_list
|
return dollar_list
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! emmet#getDollarValueByKey(key)
|
function! emmet#getDollarValueByKey(key) abort
|
||||||
let ret = 0
|
let ret = 0
|
||||||
let key = a:key
|
let key = a:key
|
||||||
let ftsetting = get(s:emmet_settings, emmet#getFileType())
|
let ftsetting = get(s:emmet_settings, emmet#getFileType())
|
||||||
if type(ftsetting) == 4 && has_key(ftsetting, key)
|
if type(ftsetting) ==# 4 && has_key(ftsetting, key)
|
||||||
let V = get(ftsetting, key)
|
let V = get(ftsetting, key)
|
||||||
if type(V) == 1 | return V | endif
|
if type(V) ==# 1 | return V | endif
|
||||||
endif
|
endif
|
||||||
if type(ret) != 1 && has_key(s:emmet_settings.variables, key)
|
if type(ret) !=# 1 && has_key(s:emmet_settings.variables, key)
|
||||||
let V = get(s:emmet_settings.variables, key)
|
let V = get(s:emmet_settings.variables, key)
|
||||||
if type(V) == 1 | return V | endif
|
if type(V) ==# 1 | return V | endif
|
||||||
endif
|
endif
|
||||||
if has_key(s:emmet_settings, 'custom_expands') && type(s:emmet_settings['custom_expands']) == 4
|
if has_key(s:emmet_settings, 'custom_expands') && type(s:emmet_settings['custom_expands']) ==# 4
|
||||||
for k in keys(s:emmet_settings['custom_expands'])
|
for k in keys(s:emmet_settings['custom_expands'])
|
||||||
if key =~ k
|
if key =~# k
|
||||||
let V = get(s:emmet_settings['custom_expands'], k)
|
let V = get(s:emmet_settings['custom_expands'], k)
|
||||||
if type(V) == 1 | return V | endif
|
if type(V) ==# 1 | return V | endif
|
||||||
if type(V) == 2 | return V(key) | endif
|
if type(V) ==# 2 | return V(key) | endif
|
||||||
endif
|
endif
|
||||||
endfor
|
endfor
|
||||||
endif
|
endif
|
||||||
return ret
|
return ret
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! emmet#reExpandDollarExpr(expand, times)
|
function! emmet#reExpandDollarExpr(expand, times) abort
|
||||||
let expand = a:expand
|
let expand = a:expand
|
||||||
let dollar_exprs = emmet#getDollarExprs(expand)
|
let dollar_exprs = emmet#getDollarExprs(expand)
|
||||||
if len(dollar_exprs) > 0
|
if len(dollar_exprs) > 0
|
||||||
@@ -423,14 +423,14 @@ function! emmet#reExpandDollarExpr(expand, times)
|
|||||||
return expand
|
return expand
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! emmet#expandDollarExpr(expand)
|
function! emmet#expandDollarExpr(expand) abort
|
||||||
return emmet#reExpandDollarExpr(a:expand, 0)
|
return emmet#reExpandDollarExpr(a:expand, 0)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! emmet#expandCursorExpr(expand, mode)
|
function! emmet#expandCursorExpr(expand, mode) abort
|
||||||
let expand = a:expand
|
let expand = a:expand
|
||||||
if expand !~ '\${cursor}'
|
if expand !~# '\${cursor}'
|
||||||
if a:mode == 2
|
if a:mode ==# 2
|
||||||
let expand = '${cursor}' . expand
|
let expand = '${cursor}' . expand
|
||||||
else
|
else
|
||||||
let expand .= '${cursor}'
|
let expand .= '${cursor}'
|
||||||
@@ -438,16 +438,16 @@ function! emmet#expandCursorExpr(expand, mode)
|
|||||||
endif
|
endif
|
||||||
let expand = substitute(expand, '\${cursor}', '$cursor$', '')
|
let expand = substitute(expand, '\${cursor}', '$cursor$', '')
|
||||||
let expand = substitute(expand, '\${cursor}', '', 'g')
|
let expand = substitute(expand, '\${cursor}', '', 'g')
|
||||||
let expand = substitute(expand, '\${\d\+:\([^}]\+\)}', '$select$\1$select$', 'g')
|
let expand = substitute(expand, '\${\d\+:\?\([^}]\+\)}', '$select$\1$select$', 'g')
|
||||||
let expand = substitute(expand, '\${cursor}', '', 'g')
|
let expand = substitute(expand, '\${cursor}', '', 'g')
|
||||||
return expand
|
return expand
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! emmet#unescapeDollarExpr(expand)
|
function! emmet#unescapeDollarExpr(expand) abort
|
||||||
return substitute(a:expand, '\\\$', '$', 'g')
|
return substitute(a:expand, '\\\$', '$', 'g')
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! emmet#expandAbbr(mode, abbr) range
|
function! emmet#expandAbbr(mode, abbr) range abort
|
||||||
let type = emmet#getFileType()
|
let type = emmet#getFileType()
|
||||||
let rtype = emmet#getFileType(1)
|
let rtype = emmet#getFileType(1)
|
||||||
let indent = emmet#getIndentation(type)
|
let indent = emmet#getIndentation(type)
|
||||||
@@ -457,22 +457,22 @@ function! emmet#expandAbbr(mode, abbr) range
|
|||||||
let rest = ''
|
let rest = ''
|
||||||
|
|
||||||
let filters = emmet#getFilters(type)
|
let filters = emmet#getFilters(type)
|
||||||
if len(filters) == 0
|
if len(filters) ==# 0
|
||||||
let filters = ['html']
|
let filters = ['html']
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if a:mode == 2
|
if a:mode ==# 2
|
||||||
let leader = substitute(input('Tag: ', ''), '^\s*\(.*\)\s*$', '\1', 'g')
|
let leader = substitute(input('Tag: ', ''), '^\s*\(.*\)\s*$', '\1', 'g')
|
||||||
if len(leader) == 0
|
if len(leader) ==# 0
|
||||||
return ''
|
return ''
|
||||||
endif
|
endif
|
||||||
if leader =~ s:filtermx
|
if leader =~# s:filtermx
|
||||||
let filters = map(split(matchstr(leader, s:filtermx)[1:], '\s*[^\\]\zs,\s*'), 'substitute(v:val, "\\\\\\\\zs.\\\\ze", "&", "g")')
|
let filters = map(split(matchstr(leader, s:filtermx)[1:], '\s*[^\\]\zs,\s*'), 'substitute(v:val, "\\\\\\\\zs.\\\\ze", "&", "g")')
|
||||||
let leader = substitute(leader, s:filtermx, '', '')
|
let leader = substitute(leader, s:filtermx, '', '')
|
||||||
endif
|
endif
|
||||||
if leader =~ '\*'
|
if leader =~# '\*'
|
||||||
let query = substitute(leader, '*', '*' . (a:lastline - a:firstline + 1), '')
|
let query = substitute(leader, '*', '*' . (a:lastline - a:firstline + 1), '')
|
||||||
if query !~ '}\s*$'
|
if query !~# '}\s*$'
|
||||||
let query .= '>{$#}'
|
let query .= '>{$#}'
|
||||||
endif
|
endif
|
||||||
if emmet#useFilter(filters, '/')
|
if emmet#useFilter(filters, '/')
|
||||||
@@ -535,7 +535,7 @@ function! emmet#expandAbbr(mode, abbr) range
|
|||||||
let str .= lpart . "\n"
|
let str .= lpart . "\n"
|
||||||
endif
|
endif
|
||||||
endfor
|
endfor
|
||||||
if stridx(leader, '{$#}') == -1
|
if stridx(leader, '{$#}') ==# -1
|
||||||
let leader .= '{$#}'
|
let leader .= '{$#}'
|
||||||
endif
|
endif
|
||||||
let items = emmet#parseIntoTree(leader, type).child
|
let items = emmet#parseIntoTree(leader, type).child
|
||||||
@@ -545,7 +545,7 @@ function! emmet#expandAbbr(mode, abbr) range
|
|||||||
silent! normal! gvygv
|
silent! normal! gvygv
|
||||||
let str = @"
|
let str = @"
|
||||||
call setreg('"', save_regcont, save_regtype)
|
call setreg('"', save_regcont, save_regtype)
|
||||||
if stridx(leader, '{$#}') == -1
|
if stridx(leader, '{$#}') ==# -1
|
||||||
let leader .= '{$#}'
|
let leader .= '{$#}'
|
||||||
endif
|
endif
|
||||||
let items = emmet#parseIntoTree(leader, type).child
|
let items = emmet#parseIntoTree(leader, type).child
|
||||||
@@ -558,27 +558,27 @@ function! emmet#expandAbbr(mode, abbr) range
|
|||||||
let expand = substitute(expand, '<', '\<', 'g')
|
let expand = substitute(expand, '<', '\<', 'g')
|
||||||
let expand = substitute(expand, '>', '\>', 'g')
|
let expand = substitute(expand, '>', '\>', 'g')
|
||||||
endif
|
endif
|
||||||
if stridx(leader, '{$#}') != -1
|
if stridx(leader, '{$#}') !=# -1
|
||||||
let expand = substitute(expand, '\$#', '\="\n" . str', 'g')
|
let expand = substitute(expand, '\$#', '\="\n" . str', 'g')
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
elseif a:mode == 4
|
elseif a:mode ==# 4
|
||||||
let line = getline('.')
|
let line = getline('.')
|
||||||
let spaces = matchstr(line, '^\s*')
|
let spaces = matchstr(line, '^\s*')
|
||||||
if line !~ '^\s*$'
|
if line !~# '^\s*$'
|
||||||
put =spaces.a:abbr
|
put =spaces.a:abbr
|
||||||
else
|
else
|
||||||
call setline('.', spaces.a:abbr)
|
call setline('.', spaces.a:abbr)
|
||||||
endif
|
endif
|
||||||
normal! $
|
normal! $
|
||||||
call emmet#expandAbbr(0, "")
|
call emmet#expandAbbr(0, '')
|
||||||
return ''
|
return ''
|
||||||
else
|
else
|
||||||
let line = getline('.')
|
let line = getline('.')
|
||||||
if col('.') < len(line)
|
if col('.') < len(line)
|
||||||
let line = matchstr(line, '^\(.*\%'.col('.').'c\)')
|
let line = matchstr(line, '^\(.*\%'.col('.').'c\)')
|
||||||
endif
|
endif
|
||||||
if a:mode == 1
|
if a:mode ==# 1
|
||||||
let part = matchstr(line, '\([a-zA-Z0-9:_\-\@|]\+\)$')
|
let part = matchstr(line, '\([a-zA-Z0-9:_\-\@|]\+\)$')
|
||||||
else
|
else
|
||||||
let part = matchstr(line, '\(\S.*\)$')
|
let part = matchstr(line, '\(\S.*\)$')
|
||||||
@@ -586,13 +586,13 @@ function! emmet#expandAbbr(mode, abbr) range
|
|||||||
let part = emmet#lang#{ftype}#findTokens(part)
|
let part = emmet#lang#{ftype}#findTokens(part)
|
||||||
let line = line[0: strridx(line, part) + len(part) - 1]
|
let line = line[0: strridx(line, part) + len(part) - 1]
|
||||||
endif
|
endif
|
||||||
if col('.') == col('$')
|
if col('.') ==# col('$')
|
||||||
let rest = ''
|
let rest = ''
|
||||||
else
|
else
|
||||||
let rest = getline('.')[len(line):]
|
let rest = getline('.')[len(line):]
|
||||||
endif
|
endif
|
||||||
let str = part
|
let str = part
|
||||||
if str =~ s:filtermx
|
if str =~# s:filtermx
|
||||||
let filters = split(matchstr(str, s:filtermx)[1:], '\s*,\s*')
|
let filters = split(matchstr(str, s:filtermx)[1:], '\s*,\s*')
|
||||||
let str = substitute(str, s:filtermx, '', '')
|
let str = substitute(str, s:filtermx, '', '')
|
||||||
endif
|
endif
|
||||||
@@ -611,20 +611,20 @@ function! emmet#expandAbbr(mode, abbr) range
|
|||||||
let expand = emmet#expandCursorExpr(expand, a:mode)
|
let expand = emmet#expandCursorExpr(expand, a:mode)
|
||||||
if len(expand)
|
if len(expand)
|
||||||
if has_key(s:emmet_settings, 'timezone') && len(s:emmet_settings.timezone)
|
if has_key(s:emmet_settings, 'timezone') && len(s:emmet_settings.timezone)
|
||||||
let expand = substitute(expand, '${datetime}', strftime("%Y-%m-%dT%H:%M:%S") . s:emmet_settings.timezone, 'g')
|
let expand = substitute(expand, '${datetime}', strftime('%Y-%m-%dT%H:%M:%S') . s:emmet_settings.timezone, 'g')
|
||||||
else
|
else
|
||||||
" TODO: on windows, %z/%Z is 'Tokyo(Standard)'
|
" TODO: on windows, %z/%Z is 'Tokyo(Standard)'
|
||||||
let expand = substitute(expand, '${datetime}', strftime("%Y-%m-%dT%H:%M:%S %z"), 'g')
|
let expand = substitute(expand, '${datetime}', strftime('%Y-%m-%dT%H:%M:%S %z'), 'g')
|
||||||
endif
|
endif
|
||||||
let expand = emmet#unescapeDollarExpr(expand)
|
let expand = emmet#unescapeDollarExpr(expand)
|
||||||
if a:mode == 2 && visualmode() ==# 'v'
|
if a:mode ==# 2 && visualmode() ==# 'v'
|
||||||
if a:firstline == a:lastline
|
if a:firstline ==# a:lastline
|
||||||
let expand = substitute(expand, '\n\s*', '', 'g')
|
let expand = substitute(expand, '\n\s*', '', 'g')
|
||||||
else
|
else
|
||||||
let expand = substitute(expand, '\n$', '', 'g')
|
let expand = substitute(expand, '\n$', '', 'g')
|
||||||
endif
|
endif
|
||||||
silent! normal! gv
|
silent! normal! gv
|
||||||
let col = col("'<")
|
let col = col('''<')
|
||||||
silent! normal! c
|
silent! normal! c
|
||||||
let line = getline('.')
|
let line = getline('.')
|
||||||
let lhs = matchstr(line, '.*\%<'.col.'c.')
|
let lhs = matchstr(line, '.*\%<'.col.'c.')
|
||||||
@@ -636,21 +636,21 @@ function! emmet#expandAbbr(mode, abbr) range
|
|||||||
call append(line('.'), lines[1:])
|
call append(line('.'), lines[1:])
|
||||||
endif
|
endif
|
||||||
else
|
else
|
||||||
if line[:-len(part)-1] =~ '^\s\+$'
|
if line[:-len(part)-1] =~# '^\s\+$'
|
||||||
let indent = line[:-len(part)-1]
|
let indent = line[:-len(part)-1]
|
||||||
else
|
else
|
||||||
let indent = ''
|
let indent = ''
|
||||||
endif
|
endif
|
||||||
let expand = substitute(expand, '\n\s*$', '', 'g')
|
let expand = substitute(expand, '\n\s*$', '', 'g')
|
||||||
if emmet#useFilter(filters, 's')
|
if emmet#useFilter(filters, 's')
|
||||||
let epart = substitute(expand, "\n\s\*", "", 'g')
|
let epart = substitute(expand, "\n\s\*", '', 'g')
|
||||||
else
|
else
|
||||||
let epart = substitute(expand, "\n", "\n" . indent, 'g')
|
let epart = substitute(expand, "\n", "\n" . indent, 'g')
|
||||||
endif
|
endif
|
||||||
let expand = line[:-len(part)-1] . epart . rest
|
let expand = line[:-len(part)-1] . epart . rest
|
||||||
let lines = split(expand, "\n", 1)
|
let lines = split(expand, "\n", 1)
|
||||||
if a:mode == 2
|
if a:mode ==# 2
|
||||||
silent! exe "normal! gvc"
|
silent! exe 'normal! gvc'
|
||||||
endif
|
endif
|
||||||
call setline('.', lines[0])
|
call setline('.', lines[0])
|
||||||
if len(lines) > 1
|
if len(lines) > 1
|
||||||
@@ -664,11 +664,11 @@ function! emmet#expandAbbr(mode, abbr) range
|
|||||||
if search('\ze\$\(cursor\|select\)\$')
|
if search('\ze\$\(cursor\|select\)\$')
|
||||||
let oldselection = &selection
|
let oldselection = &selection
|
||||||
let &selection = 'inclusive'
|
let &selection = 'inclusive'
|
||||||
if foldclosed(line('.')) != -1
|
if foldclosed(line('.')) !=# -1
|
||||||
silent! foldopen
|
silent! foldopen
|
||||||
endif
|
endif
|
||||||
let pos = emmet#util#getcurpos()
|
let pos = emmet#util#getcurpos()
|
||||||
if getline('.')[col('.')-1:] =~ '^\$select'
|
if getline('.')[col('.')-1:] =~# '^\$select'
|
||||||
let pos[2] += 1
|
let pos[2] += 1
|
||||||
silent! s/\$select\$//
|
silent! s/\$select\$//
|
||||||
let next = searchpos('.\ze\$select\$', 'nW')
|
let next = searchpos('.\ze\$select\$', 'nW')
|
||||||
@@ -687,7 +687,7 @@ function! emmet#expandAbbr(mode, abbr) range
|
|||||||
return ''
|
return ''
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! emmet#updateTag()
|
function! emmet#updateTag() abort
|
||||||
let type = emmet#getFileType()
|
let type = emmet#getFileType()
|
||||||
let region = emmet#util#searchRegion('<\S', '>')
|
let region = emmet#util#searchRegion('<\S', '>')
|
||||||
if !emmet#util#regionIsValid(region) || !emmet#util#cursorInRegion(region)
|
if !emmet#util#regionIsValid(region) || !emmet#util#cursorInRegion(region)
|
||||||
@@ -695,7 +695,7 @@ function! emmet#updateTag()
|
|||||||
endif
|
endif
|
||||||
let content = emmet#util#getContent(region)
|
let content = emmet#util#getContent(region)
|
||||||
let content = matchstr(content, '^<[^><]\+>')
|
let content = matchstr(content, '^<[^><]\+>')
|
||||||
if content !~ '^<[^><]\+>$'
|
if content !~# '^<[^><]\+>$'
|
||||||
return ''
|
return ''
|
||||||
endif
|
endif
|
||||||
let current = emmet#lang#html#parseTag(content)
|
let current = emmet#lang#html#parseTag(content)
|
||||||
@@ -715,19 +715,19 @@ function! emmet#updateTag()
|
|||||||
return ''
|
return ''
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! emmet#moveNextPrevItem(flag)
|
function! emmet#moveNextPrevItem(flag) abort
|
||||||
let type = emmet#getFileType()
|
let type = emmet#getFileType()
|
||||||
let rtype = emmet#lang#exists(type) ? type : 'html'
|
let rtype = emmet#lang#exists(type) ? type : 'html'
|
||||||
return emmet#lang#{rtype}#moveNextPrevItem(a:flag)
|
return emmet#lang#{rtype}#moveNextPrevItem(a:flag)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! emmet#moveNextPrev(flag)
|
function! emmet#moveNextPrev(flag) abort
|
||||||
let type = emmet#getFileType()
|
let type = emmet#getFileType()
|
||||||
let rtype = emmet#lang#exists(type) ? type : 'html'
|
let rtype = emmet#lang#exists(type) ? type : 'html'
|
||||||
return emmet#lang#{rtype}#moveNextPrev(a:flag)
|
return emmet#lang#{rtype}#moveNextPrev(a:flag)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! emmet#imageSize()
|
function! emmet#imageSize() abort
|
||||||
let orgpos = emmet#util#getcurpos()
|
let orgpos = emmet#util#getcurpos()
|
||||||
let type = emmet#getFileType()
|
let type = emmet#getFileType()
|
||||||
let rtype = emmet#lang#exists(type) ? type : 'html'
|
let rtype = emmet#lang#exists(type) ? type : 'html'
|
||||||
@@ -736,46 +736,46 @@ function! emmet#imageSize()
|
|||||||
return ''
|
return ''
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! emmet#encodeImage()
|
function! emmet#encodeImage() abort
|
||||||
let type = emmet#getFileType()
|
let type = emmet#getFileType()
|
||||||
let rtype = emmet#lang#exists(type) ? type : 'html'
|
let rtype = emmet#lang#exists(type) ? type : 'html'
|
||||||
return emmet#lang#{rtype}#encodeImage()
|
return emmet#lang#{rtype}#encodeImage()
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! emmet#toggleComment()
|
function! emmet#toggleComment() abort
|
||||||
let type = emmet#getFileType()
|
let type = emmet#getFileType()
|
||||||
let rtype = emmet#lang#exists(type) ? type : 'html'
|
let rtype = emmet#lang#exists(type) ? type : 'html'
|
||||||
call emmet#lang#{rtype}#toggleComment()
|
call emmet#lang#{rtype}#toggleComment()
|
||||||
return ''
|
return ''
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! emmet#balanceTag(flag) range
|
function! emmet#balanceTag(flag) range abort
|
||||||
let type = emmet#getFileType()
|
let type = emmet#getFileType()
|
||||||
let rtype = emmet#lang#exists(type) ? type : 'html'
|
let rtype = emmet#lang#exists(type) ? type : 'html'
|
||||||
return emmet#lang#{rtype}#balanceTag(a:flag)
|
return emmet#lang#{rtype}#balanceTag(a:flag)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! emmet#splitJoinTag()
|
function! emmet#splitJoinTag() abort
|
||||||
let type = emmet#getFileType()
|
let type = emmet#getFileType()
|
||||||
let rtype = emmet#lang#exists(type) ? type : 'html'
|
let rtype = emmet#lang#exists(type) ? type : 'html'
|
||||||
return emmet#lang#{rtype}#splitJoinTag()
|
return emmet#lang#{rtype}#splitJoinTag()
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! emmet#mergeLines() range
|
function! emmet#mergeLines() range abort
|
||||||
let lines = join(map(getline(a:firstline, a:lastline), 'matchstr(v:val, "^\\s*\\zs.*\\ze\\s*$")'), '')
|
let lines = join(map(getline(a:firstline, a:lastline), 'matchstr(v:val, "^\\s*\\zs.*\\ze\\s*$")'), '')
|
||||||
let indent = substitute(getline('.'), '^\(\s*\).*', '\1', '')
|
let indent = substitute(getline('.'), '^\(\s*\).*', '\1', '')
|
||||||
silent! exe "normal! gvc"
|
silent! exe 'normal! gvc'
|
||||||
call setline('.', indent . lines)
|
call setline('.', indent . lines)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! emmet#removeTag()
|
function! emmet#removeTag() abort
|
||||||
let type = emmet#getFileType()
|
let type = emmet#getFileType()
|
||||||
let rtype = emmet#lang#exists(type) ? type : 'html'
|
let rtype = emmet#lang#exists(type) ? type : 'html'
|
||||||
call emmet#lang#{rtype}#removeTag()
|
call emmet#lang#{rtype}#removeTag()
|
||||||
return ''
|
return ''
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! emmet#anchorizeURL(flag)
|
function! emmet#anchorizeURL(flag) abort
|
||||||
let mx = 'https\=:\/\/[-!#$%&*+,./:;=?@0-9a-zA-Z_~]\+'
|
let mx = 'https\=:\/\/[-!#$%&*+,./:;=?@0-9a-zA-Z_~]\+'
|
||||||
let pos1 = searchpos(mx, 'bcnW')
|
let pos1 = searchpos(mx, 'bcnW')
|
||||||
let url = matchstr(getline(pos1[0])[pos1[1]-1:], mx)
|
let url = matchstr(getline(pos1[0])[pos1[1]-1:], mx)
|
||||||
@@ -793,9 +793,9 @@ function! emmet#anchorizeURL(flag)
|
|||||||
|
|
||||||
let type = emmet#getFileType()
|
let type = emmet#getFileType()
|
||||||
let rtype = emmet#lang#exists(type) ? type : 'html'
|
let rtype = emmet#lang#exists(type) ? type : 'html'
|
||||||
if &ft == 'markdown'
|
if &filetype ==# 'markdown'
|
||||||
let expand = printf("[%s](%s)", substitute(title, '[\[\]]', '\\&', 'g'), url)
|
let expand = printf('[%s](%s)', substitute(title, '[\[\]]', '\\&', 'g'), url)
|
||||||
elseif a:flag == 0
|
elseif a:flag ==# 0
|
||||||
let a = emmet#lang#html#parseTag('<a>')
|
let a = emmet#lang#html#parseTag('<a>')
|
||||||
let a.attr.href = url
|
let a.attr.href = url
|
||||||
let a.value = '{' . title . '}'
|
let a.value = '{' . title . '}'
|
||||||
@@ -826,9 +826,9 @@ function! emmet#anchorizeURL(flag)
|
|||||||
return ''
|
return ''
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! emmet#codePretty() range
|
function! emmet#codePretty() range abort
|
||||||
let type = input('FileType: ', &ft, 'filetype')
|
let type = input('FileType: ', &filetype, 'filetype')
|
||||||
if len(type) == 0
|
if len(type) ==# 0
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
let block = emmet#util#getVisualBlock()
|
let block = emmet#util#getVisualBlock()
|
||||||
@@ -847,18 +847,18 @@ function! emmet#codePretty() range
|
|||||||
call emmet#util#setContent(block, content)
|
call emmet#util#setContent(block, content)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! emmet#expandWord(abbr, type, orig)
|
function! emmet#expandWord(abbr, type, orig) abort
|
||||||
let str = a:abbr
|
let str = a:abbr
|
||||||
let type = a:type
|
let type = a:type
|
||||||
let indent = emmet#getIndentation(type)
|
let indent = emmet#getIndentation(type)
|
||||||
|
|
||||||
if len(type) == 0 | let type = 'html' | endif
|
if len(type) ==# 0 | let type = 'html' | endif
|
||||||
if str =~ s:filtermx
|
if str =~# s:filtermx
|
||||||
let filters = split(matchstr(str, s:filtermx)[1:], '\s*,\s*')
|
let filters = split(matchstr(str, s:filtermx)[1:], '\s*,\s*')
|
||||||
let str = substitute(str, s:filtermx, '', '')
|
let str = substitute(str, s:filtermx, '', '')
|
||||||
else
|
else
|
||||||
let filters = emmet#getFilters(a:type)
|
let filters = emmet#getFilters(a:type)
|
||||||
if len(filters) == 0
|
if len(filters) ==# 0
|
||||||
let filters = ['html']
|
let filters = ['html']
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
@@ -874,28 +874,29 @@ function! emmet#expandWord(abbr, type, orig)
|
|||||||
let expand = substitute(expand, '>', '\>', 'g')
|
let expand = substitute(expand, '>', '\>', 'g')
|
||||||
endif
|
endif
|
||||||
if emmet#useFilter(filters, 's')
|
if emmet#useFilter(filters, 's')
|
||||||
let expand = substitute(expand, "\n\s\*", "", 'g')
|
let expand = substitute(expand, "\n\s\*", '', 'g')
|
||||||
endif
|
endif
|
||||||
if a:orig == 0
|
if a:orig ==# 0
|
||||||
let expand = emmet#expandDollarExpr(expand)
|
let expand = emmet#expandDollarExpr(expand)
|
||||||
let expand = substitute(expand, '\${cursor}', '', 'g')
|
let expand = substitute(expand, '\${cursor}', '', 'g')
|
||||||
|
let expand = substitute(expand, '\${\d\+\(:[^}]\+\|\)}', '\1', 'g')
|
||||||
endif
|
endif
|
||||||
return expand
|
return expand
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! emmet#getSnippets(type)
|
function! emmet#getSnippets(type) abort
|
||||||
let type = a:type
|
let type = a:type
|
||||||
if len(type) == 0 || !has_key(s:emmet_settings, type)
|
if len(type) ==# 0 || !has_key(s:emmet_settings, type)
|
||||||
let type = 'html'
|
let type = 'html'
|
||||||
endif
|
endif
|
||||||
return emmet#getResource(type, 'snippets', {})
|
return emmet#getResource(type, 'snippets', {})
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! emmet#completeTag(findstart, base)
|
function! emmet#completeTag(findstart, base) abort
|
||||||
if a:findstart
|
if a:findstart
|
||||||
let line = getline('.')
|
let line = getline('.')
|
||||||
let start = col('.') - 1
|
let start = col('.') - 1
|
||||||
while start > 0 && line[start - 1] =~ '[a-zA-Z0-9:_\@\-]'
|
while start > 0 && line[start - 1] =~# '[a-zA-Z0-9:_\@\-]'
|
||||||
let start -= 1
|
let start -= 1
|
||||||
endwhile
|
endwhile
|
||||||
return start
|
return start
|
||||||
@@ -905,13 +906,13 @@ function! emmet#completeTag(findstart, base)
|
|||||||
|
|
||||||
let snippets = emmet#getResource(type, 'snippets', {})
|
let snippets = emmet#getResource(type, 'snippets', {})
|
||||||
for item in keys(snippets)
|
for item in keys(snippets)
|
||||||
if stridx(item, a:base) != -1
|
if stridx(item, a:base) !=# -1
|
||||||
call add(res, substitute(item, '\${cursor}\||', '', 'g'))
|
call add(res, substitute(item, '\${cursor}\||', '', 'g'))
|
||||||
endif
|
endif
|
||||||
endfor
|
endfor
|
||||||
let aliases = emmet#getResource(type, 'aliases', {})
|
let aliases = emmet#getResource(type, 'aliases', {})
|
||||||
for item in values(aliases)
|
for item in values(aliases)
|
||||||
if stridx(item, a:base) != -1
|
if stridx(item, a:base) !=# -1
|
||||||
call add(res, substitute(item, '\${cursor}\||', '', 'g'))
|
call add(res, substitute(item, '\${cursor}\||', '', 'g'))
|
||||||
endif
|
endif
|
||||||
endfor
|
endfor
|
||||||
@@ -1860,7 +1861,7 @@ if exists('g:user_emmet_settings')
|
|||||||
call emmet#mergeConfig(s:emmet_settings, g:user_emmet_settings)
|
call emmet#mergeConfig(s:emmet_settings, g:user_emmet_settings)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let &cpo = s:save_cpo
|
let &cpoptions = s:save_cpo
|
||||||
unlet s:save_cpo
|
unlet s:save_cpo
|
||||||
|
|
||||||
" vim:set et:
|
" vim:set et:
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
function! emmet#lang#css#findTokens(str)
|
function! emmet#lang#css#findTokens(str) abort
|
||||||
return substitute(substitute(a:str, '^.*[;{]\s*', '', ''), '}\s*$', '', '')
|
return substitute(substitute(a:str, '^.*[;{]\s*', '', ''), '}\s*$', '', '')
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! emmet#lang#css#parseIntoTree(abbr, type)
|
function! emmet#lang#css#parseIntoTree(abbr, type) abort
|
||||||
let abbr = a:abbr
|
let abbr = a:abbr
|
||||||
let type = a:type
|
let type = a:type
|
||||||
let prefix = 0
|
let prefix = 0
|
||||||
@@ -17,8 +17,8 @@ function! emmet#lang#css#parseIntoTree(abbr, type)
|
|||||||
|
|
||||||
" emmet
|
" emmet
|
||||||
let tokens = split(abbr, '+\ze[^+)!]')
|
let tokens = split(abbr, '+\ze[^+)!]')
|
||||||
let block = emmet#util#searchRegion("{", "}")
|
let block = emmet#util#searchRegion('{', '}')
|
||||||
if abbr !~ '^@' && emmet#getBaseType(type) == 'css' && type != 'sass' && block[0] == [0,0] && block[1] == [0,0]
|
if abbr !~# '^@' && emmet#getBaseType(type) ==# 'css' && type !=# 'sass' && block[0] ==# [0,0] && block[1] ==# [0,0]
|
||||||
let current = emmet#newNode()
|
let current = emmet#newNode()
|
||||||
let current.snippet = abbr . " {\n" . indent . "${cursor}\n}"
|
let current.snippet = abbr . " {\n" . indent . "${cursor}\n}"
|
||||||
let current.name = ''
|
let current.name = ''
|
||||||
@@ -29,7 +29,7 @@ function! emmet#lang#css#parseIntoTree(abbr, type)
|
|||||||
let prop = matchlist(token, '^\(-\{0,1}[a-zA-Z]\+\|[a-zA-Z0-9]\++\{0,1}\|([a-zA-Z0-9]\++\{0,1})\)\(\%([0-9.-]\+[pe]\{0,1}-\{0,1}\|-auto\)*\)$')
|
let prop = matchlist(token, '^\(-\{0,1}[a-zA-Z]\+\|[a-zA-Z0-9]\++\{0,1}\|([a-zA-Z0-9]\++\{0,1})\)\(\%([0-9.-]\+[pe]\{0,1}-\{0,1}\|-auto\)*\)$')
|
||||||
if len(prop)
|
if len(prop)
|
||||||
let token = substitute(prop[1], '^(\(.*\))', '\1', '')
|
let token = substitute(prop[1], '^(\(.*\))', '\1', '')
|
||||||
if token =~ '^-'
|
if token =~# '^-'
|
||||||
let prefix = 1
|
let prefix = 1
|
||||||
let token = token[1:]
|
let token = token[1:]
|
||||||
endif
|
endif
|
||||||
@@ -38,18 +38,18 @@ function! emmet#lang#css#parseIntoTree(abbr, type)
|
|||||||
if len(value) > 0
|
if len(value) > 0
|
||||||
let value .= ' '
|
let value .= ' '
|
||||||
endif
|
endif
|
||||||
if token =~ '^[z]'
|
if token =~# '^[z]'
|
||||||
" TODO
|
" TODO
|
||||||
let value .= substitute(v, '[^0-9.]*$', '', '')
|
let value .= substitute(v, '[^0-9.]*$', '', '')
|
||||||
elseif v =~ 'p$'
|
elseif v =~# 'p$'
|
||||||
let value .= substitute(v, 'p$', '%', '')
|
let value .= substitute(v, 'p$', '%', '')
|
||||||
elseif v =~ 'e$'
|
elseif v =~# 'e$'
|
||||||
let value .= substitute(v, 'e$', 'em', '')
|
let value .= substitute(v, 'e$', 'em', '')
|
||||||
elseif v =~ '\.'
|
elseif v =~# '\.'
|
||||||
let value .= v . 'em'
|
let value .= v . 'em'
|
||||||
elseif v == 'auto'
|
elseif v ==# 'auto'
|
||||||
let value .= v
|
let value .= v
|
||||||
elseif v == '0'
|
elseif v ==# '0'
|
||||||
let value .= '0'
|
let value .= '0'
|
||||||
else
|
else
|
||||||
let value .= v . 'px'
|
let value .= v . 'px'
|
||||||
@@ -58,7 +58,7 @@ function! emmet#lang#css#parseIntoTree(abbr, type)
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
let tag_name = token
|
let tag_name = token
|
||||||
if tag_name =~ '.!$'
|
if tag_name =~# '.!$'
|
||||||
let tag_name = tag_name[:-2]
|
let tag_name = tag_name[:-2]
|
||||||
let important = 1
|
let important = 1
|
||||||
else
|
else
|
||||||
@@ -150,7 +150,7 @@ function! emmet#lang#css#parseIntoTree(abbr, type)
|
|||||||
call add(root.child, deepcopy(current))
|
call add(root.child, deepcopy(current))
|
||||||
let current.snippet = snippet
|
let current.snippet = snippet
|
||||||
call add(root.child, current)
|
call add(root.child, current)
|
||||||
elseif token =~ '^c#\([0-9a-fA-F]\{3}\|[0-9a-fA-F]\{6}\)\(\.[0-9]\+\)\?'
|
elseif token =~# '^c#\([0-9a-fA-F]\{3}\|[0-9a-fA-F]\{6}\)\(\.[0-9]\+\)\?'
|
||||||
let cs = split(token, '\.')
|
let cs = split(token, '\.')
|
||||||
let current.name = ''
|
let current.name = ''
|
||||||
let [r,g,b] = [0,0,0]
|
let [r,g,b] = [0,0,0]
|
||||||
@@ -171,7 +171,7 @@ function! emmet#lang#css#parseIntoTree(abbr, type)
|
|||||||
let current.snippet = printf('color:rgb(%d, %d, %d, %s);', r, g, b, string(str2float('0.'.cs[1])))
|
let current.snippet = printf('color:rgb(%d, %d, %d, %s);', r, g, b, string(str2float('0.'.cs[1])))
|
||||||
endif
|
endif
|
||||||
call add(root.child, current)
|
call add(root.child, current)
|
||||||
elseif token =~ '^c#'
|
elseif token =~# '^c#'
|
||||||
let current.name = ''
|
let current.name = ''
|
||||||
let current.snippet = 'color:\${cursor};'
|
let current.snippet = 'color:\${cursor};'
|
||||||
call add(root.child, current)
|
call add(root.child, current)
|
||||||
@@ -183,7 +183,7 @@ function! emmet#lang#css#parseIntoTree(abbr, type)
|
|||||||
return root
|
return root
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! emmet#lang#css#toString(settings, current, type, inline, filters, itemno, indent)
|
function! emmet#lang#css#toString(settings, current, type, inline, filters, itemno, indent) abort
|
||||||
let current = a:current
|
let current = a:current
|
||||||
let value = current.value[1:-2]
|
let value = current.value[1:-2]
|
||||||
if emmet#useFilter(a:filters, 'fc')
|
if emmet#useFilter(a:filters, 'fc')
|
||||||
@@ -197,7 +197,7 @@ function! emmet#lang#css#toString(settings, current, type, inline, filters, item
|
|||||||
return value
|
return value
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! emmet#lang#css#imageSize()
|
function! emmet#lang#css#imageSize() abort
|
||||||
let img_region = emmet#util#searchRegion('{', '}')
|
let img_region = emmet#util#searchRegion('{', '}')
|
||||||
if !emmet#util#regionIsValid(img_region) || !emmet#util#cursorInRegion(img_region)
|
if !emmet#util#regionIsValid(img_region) || !emmet#util#cursorInRegion(img_region)
|
||||||
return
|
return
|
||||||
@@ -205,9 +205,9 @@ function! emmet#lang#css#imageSize()
|
|||||||
let content = emmet#util#getContent(img_region)
|
let content = emmet#util#getContent(img_region)
|
||||||
let fn = matchstr(content, '\<url(\zs[^)]\+\ze)')
|
let fn = matchstr(content, '\<url(\zs[^)]\+\ze)')
|
||||||
let fn = substitute(fn, '[''" \t]', '', 'g')
|
let fn = substitute(fn, '[''" \t]', '', 'g')
|
||||||
if fn =~ '^\s*$'
|
if fn =~# '^\s*$'
|
||||||
return
|
return
|
||||||
elseif fn !~ '^\(/\|http\)'
|
elseif fn !~# '^\(/\|http\)'
|
||||||
let fn = simplify(expand('%:h') . '/' . fn)
|
let fn = simplify(expand('%:h') . '/' . fn)
|
||||||
endif
|
endif
|
||||||
let [width, height] = emmet#util#getImageSize(fn)
|
let [width, height] = emmet#util#getImageSize(fn)
|
||||||
@@ -215,12 +215,12 @@ function! emmet#lang#css#imageSize()
|
|||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
let indent = emmet#getIndentation('css')
|
let indent = emmet#getIndentation('css')
|
||||||
if content =~ '.*\<width\s*:[^;]*;.*'
|
if content =~# '.*\<width\s*:[^;]*;.*'
|
||||||
let content = substitute(content, '\<width\s*:[^;]*;', 'width: ' . width . 'px;', '')
|
let content = substitute(content, '\<width\s*:[^;]*;', 'width: ' . width . 'px;', '')
|
||||||
else
|
else
|
||||||
let content = substitute(content, '}', indent . 'width: ' . width . "px;\n}", '')
|
let content = substitute(content, '}', indent . 'width: ' . width . "px;\n}", '')
|
||||||
endif
|
endif
|
||||||
if content =~ '.*\<height\s*:[^;]*;.*'
|
if content =~# '.*\<height\s*:[^;]*;.*'
|
||||||
let content = substitute(content, '\<height\s*:[^;]*;', 'height: ' . height . 'px;', '')
|
let content = substitute(content, '\<height\s*:[^;]*;', 'height: ' . height . 'px;', '')
|
||||||
else
|
else
|
||||||
let content = substitute(content, '}', indent . 'height: ' . height . "px;\n}", '')
|
let content = substitute(content, '}', indent . 'height: ' . height . "px;\n}", '')
|
||||||
@@ -228,17 +228,17 @@ function! emmet#lang#css#imageSize()
|
|||||||
call emmet#util#setContent(img_region, content)
|
call emmet#util#setContent(img_region, content)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! emmet#lang#css#encodeImage()
|
function! emmet#lang#css#encodeImage() abort
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! emmet#lang#css#parseTag(tag)
|
function! emmet#lang#css#parseTag(tag) abort
|
||||||
return {}
|
return {}
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! emmet#lang#css#toggleComment()
|
function! emmet#lang#css#toggleComment() abort
|
||||||
let line = getline('.')
|
let line = getline('.')
|
||||||
let mx = '^\(\s*\)/\*\s*\(.*\)\s*\*/\s*$'
|
let mx = '^\(\s*\)/\*\s*\(.*\)\s*\*/\s*$'
|
||||||
if line =~ '{\s*$'
|
if line =~# '{\s*$'
|
||||||
let block = emmet#util#searchRegion('/\*', '\*/\zs')
|
let block = emmet#util#searchRegion('/\*', '\*/\zs')
|
||||||
if emmet#util#regionIsValid(block)
|
if emmet#util#regionIsValid(block)
|
||||||
let content = emmet#util#getContent(block)
|
let content = emmet#util#getContent(block)
|
||||||
@@ -251,7 +251,7 @@ function! emmet#lang#css#toggleComment()
|
|||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
else
|
else
|
||||||
if line =~ mx
|
if line =~# mx
|
||||||
let space = substitute(matchstr(line, mx), mx, '\1', '')
|
let space = substitute(matchstr(line, mx), mx, '\1', '')
|
||||||
let line = substitute(matchstr(line, mx), mx, '\2', '')
|
let line = substitute(matchstr(line, mx), mx, '\2', '')
|
||||||
let line = space . substitute(line, '^\s*\|\s*$', '\1', 'g')
|
let line = space . substitute(line, '^\s*\|\s*$', '\1', 'g')
|
||||||
@@ -263,7 +263,7 @@ function! emmet#lang#css#toggleComment()
|
|||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! emmet#lang#css#balanceTag(flag) range
|
function! emmet#lang#css#balanceTag(flag) range abort
|
||||||
if a:flag == -2 || a:flag == 2
|
if a:flag == -2 || a:flag == 2
|
||||||
let curpos = [0, line("'<"), col("'<"), 0]
|
let curpos = [0, line("'<"), col("'<"), 0]
|
||||||
else
|
else
|
||||||
@@ -281,7 +281,7 @@ function! emmet#lang#css#balanceTag(flag) range
|
|||||||
else
|
else
|
||||||
if a:flag > 0
|
if a:flag > 0
|
||||||
let content = emmet#util#getContent(block)
|
let content = emmet#util#getContent(block)
|
||||||
if content !~ '^{.*}$'
|
if content !~# '^{.*}$'
|
||||||
let block = emmet#util#searchRegion('{', '}')
|
let block = emmet#util#searchRegion('{', '}')
|
||||||
if emmet#util#regionIsValid(block)
|
if emmet#util#regionIsValid(block)
|
||||||
call emmet#util#selectRegion(block)
|
call emmet#util#selectRegion(block)
|
||||||
@@ -301,17 +301,17 @@ function! emmet#lang#css#balanceTag(flag) range
|
|||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
if a:flag == -2 || a:flag == 2
|
if a:flag == -2 || a:flag == 2
|
||||||
silent! exe "normal! gv"
|
silent! exe 'normal! gv'
|
||||||
else
|
else
|
||||||
call setpos('.', curpos)
|
call setpos('.', curpos)
|
||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! emmet#lang#css#moveNextPrevItem(flag)
|
function! emmet#lang#css#moveNextPrevItem(flag) abort
|
||||||
return emmet#lang#css#moveNextPrev(a:flag)
|
return emmet#lang#css#moveNextPrev(a:flag)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! emmet#lang#css#moveNextPrev(flag)
|
function! emmet#lang#css#moveNextPrev(flag) abort
|
||||||
let pos = search('""\|()\|\(:\s*\zs$\)', a:flag ? 'Wbp' : 'Wp')
|
let pos = search('""\|()\|\(:\s*\zs$\)', a:flag ? 'Wbp' : 'Wp')
|
||||||
if pos == 2
|
if pos == 2
|
||||||
startinsert!
|
startinsert!
|
||||||
@@ -321,10 +321,10 @@ function! emmet#lang#css#moveNextPrev(flag)
|
|||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! emmet#lang#css#splitJoinTag()
|
function! emmet#lang#css#splitJoinTag() abort
|
||||||
" nothing to do
|
" nothing to do
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! emmet#lang#css#removeTag()
|
function! emmet#lang#css#removeTag() abort
|
||||||
" nothing to do
|
" nothing to do
|
||||||
endfunction
|
endfunction
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
"=============================================================================
|
"=============================================================================
|
||||||
" File: emmet.vim
|
" File: emmet.vim
|
||||||
" Author: Yasuhiro Matsumoto <mattn.jp@gmail.com>
|
" Author: Yasuhiro Matsumoto <mattn.jp@gmail.com>
|
||||||
" Last Change: 28-Nov-2013.
|
" Last Change: 17-Dec-2014.
|
||||||
" Version: 0.85
|
" Version: 0.85
|
||||||
" WebPage: http://github.com/mattn/emmet-vim
|
" WebPage: http://github.com/mattn/emmet-vim
|
||||||
" Description: vim plugins for HTML and CSS hi-speed coding.
|
" Description: vim plugins for HTML and CSS hi-speed coding.
|
||||||
@@ -66,13 +66,13 @@
|
|||||||
" GetLatestVimScripts: 2981 1 :AutoInstall: emmet.vim
|
" GetLatestVimScripts: 2981 1 :AutoInstall: emmet.vim
|
||||||
" script type: plugin
|
" script type: plugin
|
||||||
|
|
||||||
if &cp || v:version < 702 || (exists('g:loaded_emmet_vim') && g:loaded_emmet_vim)
|
if &compatible || v:version < 702 || (exists('g:loaded_emmet_vim') && g:loaded_emmet_vim)
|
||||||
finish
|
finish
|
||||||
endif
|
endif
|
||||||
let g:loaded_emmet_vim = 1
|
let g:loaded_emmet_vim = 1
|
||||||
|
|
||||||
let s:save_cpo = &cpo
|
let s:save_cpo = &cpoptions
|
||||||
set cpo&vim
|
set cpoptions&vim
|
||||||
|
|
||||||
if !exists('g:emmet_html5')
|
if !exists('g:emmet_html5')
|
||||||
let g:emmet_html5 = 1
|
let g:emmet_html5 = 1
|
||||||
@@ -135,7 +135,7 @@ function! s:install_plugin(mode, buffer)
|
|||||||
\]
|
\]
|
||||||
|
|
||||||
for item in items
|
for item in items
|
||||||
if a:mode != 'a' && stridx(a:mode, item.mode) == -1
|
if a:mode !=# 'a' && stridx(a:mode, item.mode) == -1
|
||||||
continue
|
continue
|
||||||
endif
|
endif
|
||||||
exe item.mode . 'noremap '. buffer .' <plug>(' . item.plug . ') ' . item.func
|
exe item.mode . 'noremap '. buffer .' <plug>(' . item.plug . ') ' . item.func
|
||||||
@@ -160,7 +160,7 @@ if get(g:, 'user_emmet_install_command', 1)
|
|||||||
command! -nargs=1 Emmet call emmet#expandAbbr(4, <q-args>)
|
command! -nargs=1 Emmet call emmet#expandAbbr(4, <q-args>)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let &cpo = s:save_cpo
|
let &cpoptions = s:save_cpo
|
||||||
unlet s:save_cpo
|
unlet s:save_cpo
|
||||||
|
|
||||||
" vim:set et:
|
" vim:set et:
|
||||||
|
|||||||
Reference in New Issue
Block a user