mirror of
https://github.com/ruby/ruby.git
synced 2025-08-23 21:14:23 +02:00
[ruby/reline] Fix Reline::Unicode.take_range as it was not fully functional
5da6a8d851
This commit is contained in:
parent
7fae57dbb4
commit
c8a07a1231
3 changed files with 32 additions and 23 deletions
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue