From 712bab8c72fc3d1f9e55eabb433578ae622f7ce8 Mon Sep 17 00:00:00 2001 From: Junegunn Choi Date: Mon, 12 Aug 2013 11:58:52 +0900 Subject: [PATCH] Allow zero-width matches --- autoload/easy_align.vim | 24 ++++++++++++++---------- test/regexp.expected | 3 +++ test/regexp.script | 2 +- 3 files changed, 18 insertions(+), 11 deletions(-) diff --git a/autoload/easy_align.vim b/autoload/easy_align.vim index dc49081..561599d 100644 --- a/autoload/easy_align.vim +++ b/autoload/easy_align.vim @@ -158,20 +158,24 @@ function! s:split_line(line, fc, lc, pattern, stick_to_left, ignore_unmatched, i while 1 let matches = matchlist(left, pattern, idx) if empty(matches) | break | endif - - let ignorable = s:highlighted_as(a:line, idx + len(matches[2]) + a:fc, a:ignores) - if ignorable - let token .= matches[1] + if empty(matches[1]) + let char = strpart(left, idx, 1) + if empty(char) | break | endif + let [match, part, delim] = [char, char, ''] else - call add(tokens, token . matches[1]) - call add(delims, matches[3]) + let [match, part, delim] = matches[1 : 3] + endif + + let ignorable = s:highlighted_as(a:line, idx + len(part) + a:fc, a:ignores) + if ignorable + let token .= match + else + call add(tokens, token . match) + call add(delims, delim) let token = '' endif - if empty(matches[1]) - call s:exit("Invalid regular expression") - endif - let idx += len(matches[1]) + let idx += len(match) endwhile let leftover = token . strpart(left, idx) diff --git a/test/regexp.expected b/test/regexp.expected index de25c1d..2a2fd20 100644 --- a/test/regexp.expected +++ b/test/regexp.expected @@ -91,3 +91,6 @@ apricot = 'DAD' + 'F#AD' banana = 'Gros Michel' # comment 2 ``` +a()p()p()l()e();():()b()a()n()a()n()a():():()c()a()k()e +d()a()t()a();();()e()x()c()h()a()n()g()e():();()f()o()r()m()a()t + diff --git a/test/regexp.script b/test/regexp.script index 760c3ea..ca8b777 100644 --- a/test/regexp.script +++ b/test/regexp.script @@ -1 +1 @@ -4Gvipjyvip:EasyAlign: Pvip:EasyAlign*: Pvip:EasyAlign-: Pvip:EasyAlign * : Pvip:EasyAlign -2 : Pvip:EasyAlign -2: Pvip:easyA€kb€kb€kb€kb€kbEasAli€kb€kb€kbyAlign *: Pvip:EasyAlign; Pvip:EasyAlign /;/ Pvip:EasyAlign/;/ Pvip:EasyAlign*/;/ Pvip:e€kbEasyAlign/[:;]\+/ Pvip:EasyAlign*/[:;]\+/ Pvip:EasyAlign* /[:;]\+/ Pvip:EasyAlign */[:;]\+/ Pvip:EasyAlign * [:€kb€kb/[:;]\+/ Pvip:EasyAlign*[:;]\+€kb€kb€kb€kb€kb€kb€kb=/[€kb€kb€kb-/[:;]\+/ Pvip:EasyAlign-2/[:;\€kb\€kb]\+/ Pvip:EasyAlign/[:;]\+/{ 'l': '<<<', 'r': '>>>'} Pvip:EasyAlign/[:;]\+/{'l':''m€kb, 's': 1} Pvip:EasyAlign * /€kb /[:;]€kb\€kb]\+/ {'stick_to': 1, 'le': '???', 'marr': '~~~'} Pvip:EasyAlign /../ Pvip:EasyAlign*/../ Pvip:EasyAlign ** €kb/[:;]/€kb€kb\+]/ Pvip:EasyAlign/[:;\€kb\€kb]\+/'€kb{'rm':'____'} Pvip:EasyAlign**[€kb/[:;]\+/ Pvip:EasyAlign!**/[:;]\+/ Pfbjfm:EasyAlign/[:;]\+/ 90Gvip:EasyAlign/#/{'is':['String'],'iu':0} +4Gvipjyvip:EasyAlign: Pvip:EasyAlign*: Pvip:EasyAlign-: Pvip:EasyAlign * : Pvip:EasyAlign -2 : Pvip:EasyAlign -2: Pvip:easyA€kb€kb€kb€kb€kbEasAli€kb€kb€kbyAlign *: Pvip:EasyAlign; Pvip:EasyAlign /;/ Pvip:EasyAlign/;/ Pvip:EasyAlign*/;/ Pvip:e€kbEasyAlign/[:;]\+/ Pvip:EasyAlign*/[:;]\+/ Pvip:EasyAlign* /[:;]\+/ Pvip:EasyAlign */[:;]\+/ Pvip:EasyAlign * [:€kb€kb/[:;]\+/ Pvip:EasyAlign*[:;]\+€kb€kb€kb€kb€kb€kb€kb=/[€kb€kb€kb-/[:;]\+/ Pvip:EasyAlign-2/[:;\€kb\€kb]\+/ Pvip:EasyAlign/[:;]\+/{ 'l': '<<<', 'r': '>>>'} Pvip:EasyAlign/[:;]\+/{'l':''m€kb, 's': 1} Pvip:EasyAlign * /€kb /[:;]€kb\€kb]\+/ {'stick_to': 1, 'le': '???', 'marr': '~~~'} Pvip:EasyAlign /../ Pvip:EasyAlign*/../ Pvip:EasyAlign ** €kb/[:;]/€kb€kb\+]/ Pvip:EasyAlign/[:;\€kb\€kb]\+/'€kb{'rm':'____'} Pvip:EasyAlign**[€kb/[:;]\+/ Pvip:EasyAlign!**/[:;]\+/ Pfbjfm:EasyAlign/[:;]\+/ 90Gvip:EasyAlign/#/{'is':['String'],'iu':0} 93Gpvip:EasyAlign*/\s*/{'l':'(', 'r': ')'}