module Unicode::DisplayWidth
Constants
- DATA_DIRECTORY
- INDEX
- INDEX_FILENAME
- NO_STRING_EXT
- UNICODE_VERSION
- VERSION
Public Class Methods
of(string, ambiguous = 1, overwrite = {})
click to toggle source
# File lib/unicode/display_width.rb, line 5 def self.of(string, ambiguous = 1, overwrite = {}) require_relative 'display_width/index' unless defined? ::Unicode::DisplayWidth::INDEX res = string.unpack('U*').inject(0){ |total_width, codepoint| index_or_value = INDEX codepoint_depth_offset = codepoint [0x10000, 0x1000, 0x100, 0x10].each{ |depth| index_or_value = index_or_value[codepoint_depth_offset / depth] codepoint_depth_offset = codepoint_depth_offset % depth break unless index_or_value.is_a? Array } width = index_or_value.is_a?(Array) ? index_or_value[codepoint_depth_offset] : index_or_value width = ambiguous if width == :A total_width + (overwrite[codepoint] || width || 1) } res < 0 ? 0 : res end