[ruby/reline] Fix Reline::Unicode.take_range as it was not fully functional

5da6a8d851
This commit is contained in:
aycabta 2021-08-31 15:09:04 +09:00 committed by git
parent 7fae57dbb4
commit c8a07a1231
3 changed files with 32 additions and 23 deletions

View file

@ -186,9 +186,9 @@ class Reline::Unicode
end
# Take a chunk of a String with escape sequences.
def self.take_range(str, col, length, encoding = str.encoding)
def self.take_range(str, start_col, max_width, encoding = str.encoding)
chunk = String.new(encoding: encoding)
width = 0
total_width = 0
rest = str.encode(Encoding::UTF_8)
in_zero_width = false
rest.scan(WIDTH_SCANNER) do |gc|
@ -206,9 +206,10 @@ class Reline::Unicode
if in_zero_width
chunk << gc
else
width = get_mbchar_width(gc)
break if (width + length) <= col
chunk << gc if col <= width
mbchar_width = get_mbchar_width(gc)
total_width += mbchar_width
break if (start_col + max_width) < total_width
chunk << gc if start_col < total_width
end
end
end