@@ -14,6 +14,12 @@ export def ZipLists(l1: list<any>, l2: list<any>): list<list<any>>
1414 return map (range (min_len), $ ' [{l1}[v:val], {l2}[v:val]]' )
1515enddef
1616
17+ export def RegexList2RegexOR (regex_list: list <string> ): string
18+ # Valid only for very- magic regex.
19+ return regex_list- >map ((_, val) = > substitute (val, ' ^\(\\v\)' , ' ' , ' ' ))
20+ - >join (' |' )- >printf (' \v(%s)' )
21+ enddef
22+
1723export def GetTextObject (textobject: string ): string
1824 # You pass a text object like " iw" and it returns the text
1925 # associated to it.
@@ -323,26 +329,46 @@ export def GetDelimitersRanges(open_delimiter: string,
323329 return ranges
324330enddef
325331
332+ export def IsGreater (l1: list <number> , l2: list <number> ): bool
333+ # Compare two list of integers of size 2 based on the first element
334+ # return true if l1 > l2
335+
336+ if l1[0 ] > l2[0 ]
337+ return true
338+ elseif l1[0 ] == l2[0 ] && l1[1 ] > l2[1 ]
339+ return true
340+ else
341+ return false
342+ endif
343+ enddef
344+
345+ export def IsGreaterEqual (l1: list <number> , l2: list <number> ): bool
346+ # Compare two list of integers of size 2 based on the first element
347+ # return true if l1 >= l2
348+
349+ if l1[0 ] > l2[0 ]
350+ return true
351+ elseif l1[0 ] == l2[0 ] && l1[1 ] > l2[1 ]
352+ return true
353+ elseif l1[0 ] == l2[0 ] && l1[1 ] == l2[1 ]
354+ return true
355+ else
356+ return false
357+ endif
358+ enddef
359+
326360export def IsBetweenMarks (A: string , B: string ): bool
327361 var cursor_pos = getpos (" ." )
328- var A_pos = getcharpos (A)
329- var B_pos = getcharpos (B)
330-
331- # Convert in floats of the form " line.column" so the check reduces to a
332- # comparison of floats.
333- var lower_float = str2float ($ ' {A_pos[1]}.{A_pos[2]}' )
334- var upper_float = str2float ($ ' {B_pos[1]}.{B_pos[2]}' )
335- var cursor_pos_float =
336- str2float ($ ' {getcharpos(".")[1]}.{getcharpos(".")[2]}' )
337-
338- # In case the lower limit is larger than the higher limit, swap
339- if upper_float < lower_float
340- var tmp = upper_float
341- upper_float = lower_float
342- lower_float = tmp
362+ var A_pos = getcharpos (A)[1 : 2 ]
363+ var B_pos = getcharpos (B)[1 : 2 ]
364+
365+ if IsGreater (A_pos, B_pos)
366+ var tmp = B_pos
367+ B_pos = A_pos
368+ A_pos = tmp
343369 endif
344370
345- return lower_float <= cursor_pos_float && cursor_pos_float <= upper_float
371+ return IsGreaterEqual (cursor_pos, A_pos) && IsGreaterEqual (B_pos, cursor_pos)
346372enddef
347373
348374export def IsInRange (open_delimiter: string ,
0 commit comments