Module: Unicode::DisplayWidth
- Defined in:
- lib/unicode/display_width.rb,
lib/unicode/display_width/index.rb,
lib/unicode/display_width/constants.rb,
lib/unicode/display_width/no_string_ext.rb
Constant Summary collapse
- DEPTHS =
[0x10000, 0x1000, 0x100, 0x10].freeze
- INDEX =
Marshal.load(Gem.gunzip(File.binread(INDEX_FILENAME)))
- VERSION =
'1.1.3'- UNICODE_VERSION =
"9.0.0".freeze
- DATA_DIRECTORY =
File.(File.dirname(__FILE__) + '/../../../data/').freeze
- INDEX_FILENAME =
(DATA_DIRECTORY + '/display_width.marshal.gz').freeze
- NO_STRING_EXT =
true
Class Method Summary collapse
Class Method Details
.of(string, ambiguous = 1, overwrite = {}) ⇒ Object
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# File 'lib/unicode/display_width.rb', line 8 def self.of(string, ambiguous = 1, overwrite = {}) res = string.codepoints.inject(0){ |total_width, codepoint| index_or_value = INDEX codepoint_depth_offset = codepoint DEPTHS.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 |