35 lines
807 B
Ruby
35 lines
807 B
Ruby
# frozen_string_literal: true
|
|
|
|
require "zlib"
|
|
require_relative "constants"
|
|
|
|
module Unicode
|
|
class DisplayWidth
|
|
File.open(INDEX_FILENAME, "rb") do |file|
|
|
serialized_data = Zlib::GzipReader.new(file).read
|
|
serialized_data.force_encoding Encoding::BINARY
|
|
INDEX = Marshal.load(serialized_data)
|
|
end
|
|
|
|
def self.decompress_index(index, level)
|
|
index.flat_map{ |value|
|
|
if level > 0
|
|
if value.instance_of?(Array)
|
|
value[15] ||= nil
|
|
decompress_index(value, level - 1)
|
|
else
|
|
decompress_index([value] * 16, level - 1)
|
|
end
|
|
else
|
|
if value.instance_of?(Array)
|
|
value[15] ||= nil
|
|
value
|
|
else
|
|
[value] * 16
|
|
end
|
|
end
|
|
}
|
|
end
|
|
end
|
|
end
|