expand local variables in custom snippets.

closes #414
This commit is contained in:
Yasuhiro Matsumoto
2018-04-25 10:03:38 +09:00
parent 350f0ba10b
commit 06b4cda774
2 changed files with 16 additions and 0 deletions

View File

@@ -196,6 +196,18 @@ function! s:itemno(itemno, current) abort
endif
endfunction
function! s:localvar(current, key) abort
let val = ''
let cur = a:current
while !empty(cur)
if has_key(cur, 'variables') && has_key(cur.variables, a:key)
return cur.variables[a:key]
endif
let cur = cur.parent
endwhile
return ''
endfunction
function! emmet#toString(...) abort
let current = a:1
if a:0 > 1
@@ -291,6 +303,7 @@ function! emmet#toString(...) abort
let inner = current.value[1:-2]
endif
let inner = substitute(inner, "\n", "\n" . indent, 'g')
let str = substitute(str, '\${\(\w\+\)}', '\=s:localvar(current, submatch(1))', '')
let str = substitute(str, '\${child}', inner, '')
endif
let itemno = itemno + 1

View File

@@ -94,6 +94,7 @@ function! emmet#lang#html#parseIntoTree(abbr, type) abort
let abbr = rabbr
let root = emmet#newNode()
let root['variables'] = {}
let parent = root
let last = root
let pos = []
@@ -257,9 +258,11 @@ function! emmet#lang#html#parseIntoTree(abbr, type) abort
endif
if item[0] ==# '#'
let current.attr.id = item[1:]
let root['variables']['id'] = current.attr.id
endif
if item[0] ==# '.'
let current.attr.class = substitute(item[1:], '\.', ' ', 'g')
let root['variables']['class'] = current.attr.class
endif
if item[0] ==# '['
let atts = item[1:-2]