@@ -159,7 +159,7 @@ export def SurroundNew(open_delimiter: string, close_delimiter: string, text_obj
159159 #
160160 # Note that Visual Selections and Text Objects are cousins
161161 #
162- if ! empty (CursorDelimitersInterval (open_delimiter, close_delimiter))
162+ if ! empty (IsInRange (open_delimiter, close_delimiter))
163163 RemoveSurrounding (open_delimiter, close_delimiter)
164164 else
165165 # Set marks
@@ -215,7 +215,7 @@ export def SurroundNew(open_delimiter: string, close_delimiter: string, text_obj
215215 # Check if A falls in an existing interval
216216 cursor (xA, yA)
217217 for delimiterg in ZipLists (open_delimiters, close_delimiters)
218- found_delimiters_interval = CursorDelimitersInterval (delimiterg[0 ], delimiterg[1 ])
218+ found_delimiters_interval = IsInRange (delimiterg[0 ], delimiterg[1 ])
219219 if ! empty (found_delimiters_interval)
220220 old_right_delimiter = delimiterg[0 ]
221221 # Existing blocks shall be disjoint,
@@ -234,7 +234,7 @@ export def SurroundNew(open_delimiter: string, close_delimiter: string, text_obj
234234 # Check if also B falls in an existing interval
235235 cursor (xB, yB)
236236 for delimiterg in ZipLists (open_delimiters, close_delimiters)
237- found_delimiters_interval = CursorDelimitersInterval (delimiterg[0 ], delimiterg[1 ])
237+ found_delimiters_interval = IsInRange (delimiterg[0 ], delimiterg[1 ])
238238 if ! empty (found_delimiters_interval)
239239 old_left_delimiter = delimiterg[0 ]
240240 break
@@ -419,11 +419,12 @@ enddef
419419
420420export def GetDelimitersRanges (open_delimiter: string ,
421421 close_delimiter: string ,
422- open_delimiter_length_max: number = 5 ,
423- close_delimiter_length_max: number = 5
422+ open_delimiter_length_max: number = 2 ,
423+ close_delimiter_length_max: number = 2
424424 ): list <list<list<number> >>
425425 # It returns open - intervals, i .e . the delimiters are excluded
426- # If there is a spare delimiter , it won't be considered
426+ # If there is a spare delimiter , it won't be considered. Delimiters are
427+ # regex
427428 #
428429 # TODO : It is assumed that the ranges have no intersections. Note that this
429430 # won't happen if open_delimiter = close_delimiter, as in many languages.
@@ -447,6 +448,7 @@ export def GetDelimitersRanges(open_delimiter: string,
447448 var close_delimiter_match = ' '
448449
449450 while open_delimiter_pos_short != [0 , 0 ]
451+ echom " open_delimiter: " .. open_delimiter
450452 open_delimiter_pos_short = searchpos (open_delimiter, ' W' )
451453
452454 # If you pass a regex, you don't know how long is the captured string
@@ -456,7 +458,7 @@ export def GetDelimitersRanges(open_delimiter: string,
456458 - >matchstr (open_delimiter)
457459 open_delimiter_length = len (open_delimiter_match)
458460
459- if getline ( open_delimiter_pos_short[0 ]) = ~ $ ' {open_delimiter}$ '
461+ if open_delimiter_pos_short[1 ] + open_delimiter_length == col ( ' $ ' )
460462 # If the open delimiter is the tail of the line , then the open - interval starts from
461463 # the next line , column 1
462464 open_delimiter_pos_short_final[0 ] = open_delimiter_pos_short[0 ] + 1
@@ -468,8 +470,8 @@ export def GetDelimitersRanges(open_delimiter: string,
468470 endif
469471 open_delimiter_pos = [0 ] + open_delimiter_pos_short_final + [0 ]
470472
473+ # Close delimiter
471474 close_delimiter_pos_short = searchpos (close_delimiter, ' W' )
472-
473475 # If you pass a regex, you don't know how long is the captured string
474476 close_delimiter_match = strcharpart (
475477 getline (close_delimiter_pos_short[0 ]),
@@ -479,7 +481,7 @@ export def GetDelimitersRanges(open_delimiter: string,
479481
480482 # If the closed delimiter is the lead of the line , then the open - interval starts from
481483 # the previous line , last column
482- if getline ( close_delimiter_pos_short[0 ]) = ~ $ ' ^{close_delimiter} '
484+ if close_delimiter_pos_short[1 ] - 1 == 0
483485 close_delimiter_pos_short_final[0 ] = close_delimiter_pos_short[0 ] - 1
484486 close_delimiter_pos_short_final[1 ] = len (getline (close_delimiter_pos_short_final[0 ]))
485487 else
@@ -512,9 +514,9 @@ export def IsBetweenMarks(A: string, B: string): bool
512514 var cursor_pos_float = str2float ($ ' {getcharpos(".")[1]}.{getcharpos(".")[2]}' )
513515
514516 # Debugging
515- echom " cur_pos: " .. cursor_pos_float
516- echom " a: " .. string (lower_float)
517- echom " b: " .. string (upper_float)
517+ # echom " cur_pos: " .. cursor_pos_float
518+ # echom " a: " .. string (lower_float)
519+ # echom " b: " .. string (upper_float)
518520
519521 # In case the lower limit is larger than the higher limit, swap
520522 if upper_float < lower_float
@@ -527,31 +529,33 @@ export def IsBetweenMarks(A: string, B: string): bool
527529
528530enddef
529531
530- export def CursorDelimitersInterval (open_delimiter: string , close_delimiter: string ): list <list<number> >
532+ export def IsInRange (open_delimiter: string , close_delimiter: string ): list <list<number> >
531533 # Return the range of the delimiters if the cursor is within such a range ,
532534 # otherwise return an empty list .
535+ # Arguments must be regex.
533536 var interval = []
534537
535538 # OBS! Ranges are open - intervals!
536- var ranges = g: GetBlocksRangesNew (open_delimiter, close_delimiter)
539+ var ranges = GetDelimitersRanges (open_delimiter, close_delimiter)
537540
538541 var saved_mark_a = getcharpos (" 'a" )
539542 var saved_mark_b = getcharpos (" 'b" )
540543
541544 for range in ranges
542- var A = setcharpos (" 'a" , range [0 ])
543- var B = setcharpos (" 'b" , range [1 ])
545+ setcharpos (" 'a" , range [0 ])
546+ setcharpos (" 'b" , range [1 ])
544547 if IsBetweenMarks (" 'a" , " 'b" )
545- interval = [A, B ]
548+ interval = [range [ 0 ], range [ 1 ] ]
546549 break
547550 endif
548551 endfor
549552
553+ echom " interval: " .. string (interval)
550554 # Restore marks ' a and ' b
551555 setcharpos (" 'a" , saved_mark_a)
552556 setcharpos (" 'b" , saved_mark_b)
553557
554- return is_inside_block
558+ return interval
555559enddef
556560
557561export def DeleteTextBetweenMarks (A: string , B: string ): string
0 commit comments