class Test::Unit::Diff::UTF8Line
def [](*args)
def [](*args) result = @characters[*args] if result.respond_to?(:pack) result.pack("U*") else result end end
def binary_search_ranges(character, ranges)
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
def compute_width(start, _end)
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
def each(&block)
def each(&block) @characters.each(&block) end
def initialize(line)
def initialize(line) @line = line @characters = @line.unpack("U*") end
def size
def size @characters.size end
def to_s
def to_s @line end
def wide_character?(character)
def wide_character?(character) binary_search_ranges(character, WIDE_CHARACTERS) or binary_search_ranges(character, AMBIGUOUS) end