From 30d58ee41737b103b6d7c00478f98f719a5bd7f2 Mon Sep 17 00:00:00 2001 From: Yasuhiro Matsumoto Date: Sat, 29 Oct 2016 22:57:32 +0900 Subject: [PATCH] lookup base type --- autoload/emmet.vim | 33 ++++++++++++--------------------- autoload/emmet/lang.vim | 15 +++++++++++++++ 2 files changed, 27 insertions(+), 21 deletions(-) diff --git a/autoload/emmet.vim b/autoload/emmet.vim index 5e01df4..aa89e4f 100644 --- a/autoload/emmet.vim +++ b/autoload/emmet.vim @@ -102,8 +102,7 @@ endfunction function! emmet#parseIntoTree(abbr, type) abort let abbr = a:abbr let type = a:type - let rtype = emmet#lang#exists(type) ? type : 'html' - return emmet#lang#{rtype}#parseIntoTree(abbr, type) + return emmet#lang#{emmet#lang#type(type)}#parseIntoTree(abbr, type) endfunction function! emmet#expandAbbrIntelligent(feedkey) abort @@ -233,7 +232,7 @@ function! emmet#toString(...) abort let dollar_expr = emmet#getResource(type, 'dollar_expr', 1) let itemno = 0 let str = '' - let rtype = emmet#lang#exists(type) ? type : 'html' + let rtype = emmet#lang#type(type) while itemno < current.multiplier if len(current.name) if current.multiplier ==# 1 @@ -508,7 +507,7 @@ endfunction function! emmet#expandAbbr(mode, abbr) range abort let type = emmet#getFileType() - let rtype = emmet#getFileType(1) + let rtype = emmet#lang#type(emmet#getFileType(1)) let indent = emmet#getIndentation(type) let expand = '' let line = '' @@ -787,48 +786,41 @@ endfunction function! emmet#moveNextPrevItem(flag) abort let type = emmet#getFileType() - let rtype = emmet#lang#exists(type) ? type : 'html' - return emmet#lang#{rtype}#moveNextPrevItem(a:flag) + return emmet#lang#{emmet#lang#type(type)}#moveNextPrevItem(a:flag) endfunction function! emmet#moveNextPrev(flag) abort let type = emmet#getFileType() - let rtype = emmet#lang#exists(type) ? type : 'html' - return emmet#lang#{rtype}#moveNextPrev(a:flag) + return emmet#lang#{emmet#lang#type(type)}#moveNextPrev(a:flag) endfunction function! emmet#imageSize() abort let orgpos = emmet#util#getcurpos() let type = emmet#getFileType() - let rtype = emmet#lang#exists(type) ? type : 'html' - call emmet#lang#{rtype}#imageSize() + call emmet#lang#{emmet#lang#type(type)}#imageSize() silent! call setpos('.', orgpos) return '' endfunction function! emmet#encodeImage() abort let type = emmet#getFileType() - let rtype = emmet#lang#exists(type) ? type : 'html' - return emmet#lang#{rtype}#encodeImage() + return emmet#lang#{emmet#lang#type(type)}#encodeImage() endfunction function! emmet#toggleComment() abort let type = emmet#getFileType() - let rtype = emmet#lang#exists(type) ? type : 'html' - call emmet#lang#{rtype}#toggleComment() + call emmet#lang#{emmet#lang#type(type)}#toggleComment() return '' endfunction function! emmet#balanceTag(flag) range abort let type = emmet#getFileType() - let rtype = emmet#lang#exists(type) ? type : 'html' - return emmet#lang#{rtype}#balanceTag(a:flag) + return emmet#lang#{emmet#lang#type(type)}#balanceTag(a:flag) endfunction function! emmet#splitJoinTag() abort let type = emmet#getFileType() - let rtype = emmet#lang#exists(type) ? type : 'html' - return emmet#lang#{rtype}#splitJoinTag() + return emmet#lang#{emmet#lang#type(type)}#splitJoinTag() endfunction function! emmet#mergeLines() range abort @@ -840,8 +832,7 @@ endfunction function! emmet#removeTag() abort let type = emmet#getFileType() - let rtype = emmet#lang#exists(type) ? type : 'html' - call emmet#lang#{rtype}#removeTag() + call emmet#lang#{emmet#lang#type(type)}#removeTag() return '' endfunction @@ -862,7 +853,7 @@ function! emmet#anchorizeURL(flag) abort let title = matchstr(content, mx) let type = emmet#getFileType() - let rtype = emmet#lang#exists(type) ? type : 'html' + let rtype = emmet#lang#type(type) if &filetype ==# 'markdown' let expand = printf('[%s](%s)', substitute(title, '[\[\]]', '\\&', 'g'), url) elseif a:flag ==# 0 diff --git a/autoload/emmet/lang.vim b/autoload/emmet/lang.vim index c839fea..61a686e 100644 --- a/autoload/emmet/lang.vim +++ b/autoload/emmet/lang.vim @@ -9,3 +9,18 @@ function! emmet#lang#exists(type) abort return s:exists[a:type] endfunction +function! emmet#lang#type(type) abort + let type = a:type + let base = type + let settings = emmet#getSettings() + while base != '' + if emmet#lang#exists(base) + return base + endif + if !has_key(settings[base], 'extends') + break + endif + let base = settings[base].extends + endwhile + return 'html' +endfunction