From 4dfd07003e2114312860c73882218efc2d6104bd Mon Sep 17 00:00:00 2001 From: mattn Date: Mon, 4 Jun 2012 17:12:31 +0900 Subject: [PATCH] removeTag for haml & slim. --- autoload/zencoding.vim | 38 +++----------------------------- autoload/zencoding/lang/haml.vim | 27 ++++++++++++++++++++++- autoload/zencoding/lang/html.vim | 38 ++++++++++++++++++++++++++++++++ autoload/zencoding/lang/slim.vim | 26 ++++++++++++++++++++++ 4 files changed, 93 insertions(+), 36 deletions(-) diff --git a/autoload/zencoding.vim b/autoload/zencoding.vim index a4c6179..e6c2ccd 100644 --- a/autoload/zencoding.vim +++ b/autoload/zencoding.vim @@ -458,41 +458,9 @@ function! zencoding#mergeLines() range endfunction function! zencoding#removeTag() - let curpos = getpos('.') - while 1 - let mx = '<\(/\{0,1}[a-zA-Z][a-zA-Z0-9:_\-]*\)[^>]*>' - let pos1 = searchpos(mx, 'bcnW') - let content = matchstr(getline(pos1[0])[pos1[1]-1:], mx) - let tag_name = substitute(content, '^<\(/\{0,1}[a-zA-Z0-9:_\-]*\).*$', '\1', '') - let block = [pos1, [pos1[0], pos1[1] + len(content) - 1]] - if content[-2:] == '/>' && zencoding#util#cursorInRegion(block) - call zencoding#util#setContent(block, '') - call setpos('.', [0, block[0][0], block[0][1], 0]) - return - else - if tag_name[0] == '/' - let pos1 = searchpos('<' . tag_name[1:] . '[^a-zA-Z0-9]', 'bcnW') - call setpos('.', [0, pos1[0], pos1[1], 0]) - let pos2 = searchpos('', 'cneW') - else - let pos2 = searchpos('', 'cneW') - endif - let block = [pos1, pos2] - let content = zencoding#util#getContent(block) - if zencoding#util#pointInRegion(curpos[1:2], block) && content[1:] !~ '<' . tag_name . '[^a-zA-Z0-9]*[^>]*>' - call zencoding#util#setContent(block, '') - call setpos('.', [0, block[0][0], block[0][1], 0]) - return - else - if block[0][0] > 0 - call setpos('.', [0, block[0][0]-1, block[0][1], 0]) - else - call setpos('.', curpos) - return - endif - endif - endif - endwhile + let type = zencoding#getFileType() + let rtype = len(globpath(&rtp, 'autoload/zencoding/lang/'.type.'.vim')) ? type : 'html' + return zencoding#lang#{rtype}#removeTag() endfunction function! zencoding#anchorizeURL(flag) diff --git a/autoload/zencoding/lang/haml.vim b/autoload/zencoding/lang/haml.vim index c1eb7d6..19fc155 100644 --- a/autoload/zencoding/lang/haml.vim +++ b/autoload/zencoding/lang/haml.vim @@ -198,5 +198,30 @@ function! zencoding#lang#haml#moveNextPrev(flag) endfunction function! zencoding#lang#haml#splitJoinTag() - " TODO +endfunction + +function! zencoding#lang#haml#removeTag() + let n = line('.') + let ml = 0 + while n > 0 + if getline(n) =~ '^\s*\ze[a-z]' + let ml = len(matchstr(getline(n), '^\s*%[a-z]')) + break + endif + let n -= 1 + endwhile + let sn = n + while n < line('$') + let l = len(matchstr(getline(n), '^\s*%[a-z]')) + if l > 0 && l <= ml + let n -= 1 + break + endif + let n += 1 + endwhile + if sn == n + exe "delete" + else + exe sn "," (n-1) "delete" + endif endfunction diff --git a/autoload/zencoding/lang/html.vim b/autoload/zencoding/lang/html.vim index 5f13e68..74b751a 100644 --- a/autoload/zencoding/lang/html.vim +++ b/autoload/zencoding/lang/html.vim @@ -626,3 +626,41 @@ function! zencoding#lang#html#splitJoinTag() endif endwhile endfunction + +function! zencoding#lang#html#removeTag() + let curpos = getpos('.') + while 1 + let mx = '<\(/\{0,1}[a-zA-Z][a-zA-Z0-9:_\-]*\)[^>]*>' + let pos1 = searchpos(mx, 'bcnW') + let content = matchstr(getline(pos1[0])[pos1[1]-1:], mx) + let tag_name = substitute(content, '^<\(/\{0,1}[a-zA-Z0-9:_\-]*\).*$', '\1', '') + let block = [pos1, [pos1[0], pos1[1] + len(content) - 1]] + if content[-2:] == '/>' && zencoding#util#cursorInRegion(block) + call zencoding#util#setContent(block, '') + call setpos('.', [0, block[0][0], block[0][1], 0]) + return + else + if tag_name[0] == '/' + let pos1 = searchpos('<' . tag_name[1:] . '[^a-zA-Z0-9]', 'bcnW') + call setpos('.', [0, pos1[0], pos1[1], 0]) + let pos2 = searchpos('', 'cneW') + else + let pos2 = searchpos('', 'cneW') + endif + let block = [pos1, pos2] + let content = zencoding#util#getContent(block) + if zencoding#util#pointInRegion(curpos[1:2], block) && content[1:] !~ '<' . tag_name . '[^a-zA-Z0-9]*[^>]*>' + call zencoding#util#setContent(block, '') + call setpos('.', [0, block[0][0], block[0][1], 0]) + return + else + if block[0][0] > 0 + call setpos('.', [0, block[0][0]-1, block[0][1], 0]) + else + call setpos('.', curpos) + return + endif + endif + endif + endwhile +endfunction diff --git a/autoload/zencoding/lang/slim.vim b/autoload/zencoding/lang/slim.vim index f76f244..837d999 100644 --- a/autoload/zencoding/lang/slim.vim +++ b/autoload/zencoding/lang/slim.vim @@ -189,3 +189,29 @@ endfunction function! zencoding#lang#slim#splitJoinTag() " TODO endfunction + +function! zencoding#lang#slim#removeTag() + let n = line('.') + let ml = 0 + while n > 0 + if getline(n) =~ '^\s*\ze[a-z]' + let ml = len(matchstr(getline(n), '^\s*[a-z]')) + break + endif + let n -= 1 + endwhile + let sn = n + while n < line('$') + let l = len(matchstr(getline(n), '^\s*[a-z]')) + if l > 0 && l <= ml + let n -= 1 + break + endif + let n += 1 + endwhile + if sn == n + exe "delete" + else + exe sn "," (n-1) "delete" + endif +endfunction