class Test::Unit::Diff::UTF8Line

Constants

AMBIGUOUS
WIDE_CHARACTERS

from unicode.org/reports/tr11/

Public Class Methods

new(line) click to toggle source
# File lib/test/unit/diff.rb, line 374
def initialize(line)
  @line = line
  @characters = @line.unpack("U*")
end
wide_character?(character) click to toggle source
# File lib/test/unit/diff.rb, line 349
def wide_character?(character)
  binary_search_ranges(character, WIDE_CHARACTERS) or
    binary_search_ranges(character, AMBIGUOUS)
end

Private Class Methods

binary_search_ranges(character, ranges) click to toggle source
# File lib/test/unit/diff.rb, line 355
def binary_search_ranges(character, ranges)
  if ranges.size.zero?
    false
  elsif ranges.size == 1
    ranges[0].include?(character)
  else
    half = ranges.size / 2
    range = ranges[half]
    if range.include?(character)
      true
    elsif character < range.begin
      binary_search_ranges(character, ranges[0...half])
    else
      binary_search_ranges(character, ranges[(half + 1)..-1])
    end
  end
end

Public Instance Methods

[](*args) click to toggle source
# File lib/test/unit/diff.rb, line 379
def [](*args)
  result = @characters[*args]
  if result.respond_to?(:pack)
    result.pack("U*")
  else
    result
  end
end
compute_width(start, _end) click to toggle source
# File lib/test/unit/diff.rb, line 400
def compute_width(start, _end)
  width = 0
  start.upto(_end - 1) do |i|
    if self.class.wide_character?(@characters[i])
      width += 2
    else
      width += 1
    end
  end
  width
end
each(&block) click to toggle source
# File lib/test/unit/diff.rb, line 388
def each(&block)
  @characters.each(&block)
end
size() click to toggle source
# File lib/test/unit/diff.rb, line 392
def size
  @characters.size
end
to_s() click to toggle source
# File lib/test/unit/diff.rb, line 396
def to_s
  @line
end