unicode-display_width 0.3.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7d30235f9e772a7cb8bd87db9e46ccfda2486562
4
- data.tar.gz: ee3e35d0979b120a900b5d02c115db8541ff2786
3
+ metadata.gz: e33d3077d16ee2ad442841b2e30f4e6166597a1c
4
+ data.tar.gz: 23bd47c3b47e3ffe0795a94315f2629d669e58e0
5
5
  SHA512:
6
- metadata.gz: 31322009d863f9b2d83997d0c27ea60fd43a6522beee58a08d719bd2d51f7fb0186c140e5b17b0fb313be59a16fee2e679b704498311456dc1a60a6c230a7d9f
7
- data.tar.gz: 7c49daaf067fdf97869e3dac8e143dd116e34ecb5d9f88e358a26f1d58b206e9add60262864b7875971dfe74cf3636b70d47ae541d91f38f0ecf436fbcd1a428
6
+ metadata.gz: 90a0db88800f45f0e7cd53247b338bad6ae9c3c7682223f50e9c8fdeb0a5e6873a6e6449581283e1836d26ae90c6914a8889c9560f419f7fc6b28ab1201eda73
7
+ data.tar.gz: d4d6e252efe9b804c519e5a9e456a64ca99fedbd6fd67280878c22cec81813e9f147f7818a28f274491ff1adfd8fd283079cce522ffc8e9160f3431fd41c8705
@@ -1,7 +1,19 @@
1
+ ## 1.0.0
2
+
3
+ * Faster than 0.3.1
4
+ * Advanced determination of character width
5
+ * This includes: Treat width of most chars of general categories (Mn, Me, Cf) as 0
6
+ * This includes: Introduce list of characters with special widths
7
+ * Allow custom overrides for specific codepoints
8
+ * Set required Ruby version to 2.0
9
+ * Add NO_STRING_EXT mode to disable monkey patching
10
+ * Internal API & index format changed drastically
11
+ * Remove require 'unicode/display_size' (use 'unicode/display_width' instead)
12
+
1
13
  ## 0.3.1
2
14
 
3
15
  * Faster than 0.3.0
4
- * Deprecate usage of aliases: String#display_size and String#display_width
16
+ * Deprecate usage of aliases: String#display_size and String#display_length
5
17
  * Eliminate Ruby warnings (@amatsuda)
6
18
 
7
19
  ## 0.3.0
@@ -1,6 +1,6 @@
1
1
  The MIT LICENSE
2
2
 
3
- Copyright (c) 2011, 2015 Jan Lelis
3
+ Copyright (c) 2011, 2015-2016 Jan Lelis
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining
6
6
  a copy of this software and associated documentation files (the
@@ -0,0 +1,98 @@
1
+ ## Unicode::DisplayWidth [![[version]](https://badge.fury.io/rb/unicode-display_width.svg)](http://badge.fury.io/rb/unicode-display_width) [<img src="https://travis-ci.org/janlelis/unicode-display_width.png" />](https://travis-ci.org/janlelis/unicode-display_width)
2
+
3
+ Determines the monospace display width of a string in Ruby. Implementation based on [EastAsianWidth.txt](http://www.unicode.org/Public/UNIDATA/EastAsianWidth.txt) and other data, 100% in Ruby. You can also use [wcswidth-ruby](https://github.com/janlelis/wcswidth-ruby) for the same purpose, but it is less often updated by OS vendors, so results may differ.
4
+
5
+ ## Introduction to Character Widths
6
+
7
+ Guesing the correct space a character will consume on terminals is not easy. There is no single standard. Most implementations combine data from [East Asian Width](http://www.unicode.org/reports/tr11/), some [General Categories](https://en.wikipedia.org/wiki/Unicode_character_property#General_Category), and hand-picked adjustments.
8
+
9
+ ### How this Library Handles Widths
10
+
11
+ As of version 1.0.0. Further at the top means higher precedence. Please expect changes to this algorithm with every MINOR version update (the X in 1.X.0)!
12
+
13
+ Width | Characters | Comment
14
+ -------|------------------------------|--------------------------------------------------
15
+ X | (user defined) | Overwrites any other values
16
+ -1 | `"\b"` | Backspace (total width never below 0)
17
+ 0 | `"\0"`, `"\x05"`, `"\a"`, `"\n"`, `"\v"`, `"\f"`, `"\r"`, `"\x0E"`, `"\x0F"` | [C0 control codes](https://en.wikipedia.org/wiki/C0_and_C1_control_codes#C0_.28ASCII_and_derivatives.29) that do not change horizontal width
18
+ 1 | `"\u{00AD}"` | SOFT HYPHEN
19
+ 2 | `"\u{2E3A}"` | TWO-EM DASH
20
+ 3 | `"\u{2E3B}"` | THREE-EM DASH
21
+ 0 | General Categories: Mn, Me, Cf (non-arabic) | Excludes ARABIC format characters
22
+ 0 | `"\u{1160}".."\u{11FF}"` | HANGUL JUNGSEONG
23
+ 2 | East Asian Width: F, W | Full-width characters
24
+ 1 or 2 | East Asian Width: A | Ambiguous characters, user defined, default: 1
25
+ 1 | All other codepoints | -
26
+
27
+ ## Install
28
+
29
+ Install the gem with:
30
+
31
+ gem install unicode-display_width
32
+
33
+ Or add to your Gemfile:
34
+
35
+ gem 'unicode-display_width'
36
+
37
+ ## Usage
38
+
39
+ ```ruby
40
+ require 'unicode/display_width'
41
+
42
+ Unicode::DisplayWidth.of("⚀") # => 1
43
+ Unicode::DisplayWidth.of("一") # => 2
44
+ ```
45
+
46
+ ### Ambiguous Characters
47
+
48
+ The second parameter defines the value returned by characterrs defined as ambiguous:
49
+
50
+ ```ruby
51
+ Unicode::DisplayWidth.of("·", 1) # => 1
52
+ Unicode::DisplayWidth.of("·", 2) # => 2
53
+ ```
54
+
55
+ ### Custom Overwrites
56
+
57
+ You can overwrite how to handle specific code points by passing a hash (or even a proc) as third parameter:
58
+
59
+ ```ruby
60
+ Unicode::DisplayWidth.of("a\tb", 1, 0x09 => 10)) # => 12
61
+ ```
62
+
63
+ ### Usage with String Extension
64
+
65
+ Activated by default. Will be deactivated in version 2.0:
66
+
67
+ ```ruby
68
+ require 'unicode/display_width/string_ext'
69
+
70
+ "⚀".display_width #=> 1
71
+ '一'.display_width #=> 2
72
+ ```
73
+
74
+ You can actively opt-out from the string extension with: `require 'unicode/display_width/no_string_ext'`
75
+
76
+ ### Usage From the CLI
77
+
78
+ If you are not a Ruby developer, but you still want to use this software to print out display widths for strings:
79
+
80
+ ```
81
+ $ gem install unicode-display_width
82
+ $ ruby -r unicode/display_width -e 'puts Unicode::DisplayWidth.of $*[0]' -- "一"
83
+ ```
84
+ Replace "一" with the actual string to measure
85
+
86
+ ## Other Implementations & Discussion
87
+
88
+ - Python: https://github.com/jquast/wcwidth
89
+ - JavaScript: https://github.com/mycoboco/wcwidth.js
90
+ - C: http://www.cl.cam.ac.uk/~mgk25/ucs/wcwidth.c
91
+ - C for Julia: https://github.com/JuliaLang/utf8proc/issues/2
92
+
93
+ ## Copyright & Info
94
+
95
+ - Copyright (c) 2011, 2015-2016 Jan Lelis, http://janlelis.com, released under the MIT
96
+ license
97
+ - Early versions based on runpaint's unicode-data interface: Copyright (c) 2009 Run Paint Run Run
98
+ - Unicode data: http://www.unicode.org/copyright.html#Exhibit1
data/Rakefile CHANGED
@@ -45,26 +45,8 @@ task :default => :test
45
45
  namespace :update do
46
46
  desc "#{gemspec.name} | Update index"
47
47
  task :index do
48
- require File.dirname(__FILE__) + '/lib/unicode/display_width'
49
- data = File.open Unicode::DisplayWidth::DATA_FILE
50
- data.rewind
51
- table = {}
52
- dir = File.dirname Unicode::DisplayWidth::TABLE_FILE
53
- Dir.mkdir(dir) unless Dir.exists?(dir)
54
- data.each_line{ |line|
55
- line =~ /^(\S+?);(\S+)\s+#.*$/
56
- if $1 && $2
57
- cps, width = $1, $2
58
- if cps['..']
59
- range = Range.new(*cps.split('..').map{ |cp| cp.to_i(16) })
60
- range.each{ |cp| table[ cp ] = width.to_sym }
61
- else
62
- table[ cps.to_i(16) ] = width.to_sym
63
- end
64
- end
65
-
66
- }
67
- File.open(Unicode::DisplayWidth::TABLE_FILE, 'wb') { |f| Marshal.dump(table, f) }
48
+ require File.dirname(__FILE__) + '/lib/unicode/display_width/index_builder'
49
+ Unicode::DisplayWidth::IndexBuilder.build!
68
50
  end
69
51
  end
70
52
 
@@ -74,11 +56,8 @@ end
74
56
  namespace :update do
75
57
  desc "#{gemspec.name} | Update unicode data"
76
58
  task :data do
77
- require File.dirname(__FILE__) + '/lib/unicode/display_width'
78
- require 'open-uri'
79
- open("http://www.unicode.org/Public/UNIDATA/EastAsianWidth.txt") { |f|
80
- File.write(Unicode::DisplayWidth::DATA_FILE, f.read)
81
- }
59
+ require File.dirname(__FILE__) + '/lib/unicode/display_width/index_builder'
60
+ Unicode::DisplayWidth::IndexBuilder.fetch!
82
61
  end
83
62
  end
84
63
 
Binary file
@@ -1,56 +1,33 @@
1
- # encoding: utf-8
1
+ require_relative 'display_width/constants'
2
2
 
3
3
  module Unicode
4
4
  module DisplayWidth
5
- VERSION = '0.3.1'.freeze
6
- DATA_DIR = File.join(File.dirname(__FILE__), '../../data/').freeze
7
- TABLE_FILE = (DATA_DIR + 'EastAsianWidth.index').freeze
8
- DATA_FILE = (DATA_DIR + 'EastAsianWidth.txt').freeze
5
+ def self.of(string, ambiguous = 1, overwrite = {})
6
+ require_relative 'display_width/index' unless defined? ::Unicode::DisplayWidth::INDEX
9
7
 
10
- class << self
11
- def table
12
- if defined?(@table) && @table
13
- @table
14
- else
15
- @table = Marshal.load File.respond_to?(:binread) ? File.binread(TABLE_FILE) : File.read(TABLE_FILE)
16
- end
17
- end
8
+ res = string.unpack('U*').inject(0){ |total_width, codepoint|
9
+ total_width + (
10
+ overwrite[codepoint] || case width = INDEX[codepoint]
11
+ when Integer
12
+ width
13
+ when :F, :W
14
+ 2
15
+ when :A
16
+ ambiguous
17
+ else # including :N, :Na, :H
18
+ 1
19
+ end
20
+ )
21
+ }
18
22
 
19
- def codepoint(n)
20
- n = n.to_s.unpack('U')[0] unless n.is_a? Integer
21
- table[n] or raise ArgumentError, 'codepoint not found'
22
- end
23
- alias width codepoint
24
- alias of codepoint
23
+ res < 0 ? 0 : res
25
24
  end
26
25
  end
27
26
  end
28
27
 
29
- class String
30
- def display_width(ambiguous = 1)
31
- unpack('U*').inject(0){ |total_width, char|
32
- total_width + case Unicode::DisplayWidth.codepoint(char).to_s
33
- when 'F', 'W'
34
- 2
35
- when 'N', 'Na', 'H'
36
- 1
37
- when 'A'
38
- ambiguous
39
- else
40
- 1
41
- end
42
- }
43
- end
44
-
45
- def display_size(*args)
46
- warn "Deprecation warning: Please use `String#display_width` instead of `String#display_size`"
47
- display_width(*args)
48
- end
49
-
50
- def display_length(*args)
51
- warn "Deprecation warning: Please use `String#display_width` instead of `String#display_length`"
52
- display_width(*args)
53
- end
28
+ # Allows you to opt-out of the default string extension. Will eventually be removed,
29
+ # so you must opt-in for the core extension by requiring 'display_width/string_ext'
30
+ unless defined?(Unicode::DisplayWidth::NO_STRING_EXT) && Unicode::DisplayWidth::NO_STRING_EXT
31
+ require_relative 'display_width/string_ext'
54
32
  end
55
33
 
56
- # J-_-L
@@ -0,0 +1,7 @@
1
+ module Unicode
2
+ module DisplayWidth
3
+ VERSION = '1.0.0'.freeze
4
+ DATA_DIRECTORY = File.join(File.dirname(__FILE__), '../../../data/').freeze
5
+ INDEX_FILENAME = (DATA_DIRECTORY + 'unicode-width.index').freeze
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ require_relative 'constants'
2
+
3
+ module Unicode
4
+ module DisplayWidth
5
+ INDEX = Marshal.load(File.binread(INDEX_FILENAME))
6
+ end
7
+ end
@@ -0,0 +1,68 @@
1
+ require_relative 'constants'
2
+
3
+ module Unicode
4
+ module DisplayWidth
5
+ module IndexBuilder
6
+ EAST_ASIAN_WIDTH_DATA_URL = "http://www.unicode.org/Public/UNIDATA/EastAsianWidth.txt".freeze
7
+ EAST_ASIAN_WIDTH_DATA_FILENAME = (DATA_DIRECTORY + 'EastAsianWidth.txt').freeze
8
+ IGNORE_CATEGORIES = %w[Cs Co Cn].freeze
9
+ ZERO_WIDTH_CATEGORIES = %w[Mn Me Cf].freeze
10
+ ZERO_WIDTH_CODEPOINTS = [*0x1160..0x11FF].freeze
11
+ SPECIAL_WIDTHS = {
12
+ 0x0 => 0, # \0 NULL
13
+ 0x5 => 0, # ENQUIRY
14
+ 0x7 => 0, # \a BELL
15
+ 0x8 => -1, # \b BACKSPACE
16
+ 0xA => 0, # \n LINE FEED
17
+ 0xB => 0, # \v LINE TABULATION
18
+ 0xC => 0, # \f FORM FEED
19
+ 0xD => 0, # \r CARRIAGE RETURN
20
+ 0xE => 0, # SHIFT OUT
21
+ 0xF => 0, # SHIFT IN
22
+ 0x00AD => 1, # SOFT HYPHEN
23
+ 0x2E3A => 2, # TWO-EM DASH
24
+ 0x2E3B => 3, # THREE-EM DASH
25
+ }.freeze
26
+
27
+ def self.fetch!
28
+ require 'open-uri'
29
+ open(EAST_ASIAN_WIDTH_DATA_URL) { |f|
30
+ File.write(EAST_ASIAN_WIDTH_DATA_FILENAME, f.read)
31
+ }
32
+ end
33
+
34
+ def self.build!
35
+ data = File.open(EAST_ASIAN_WIDTH_DATA_FILENAME)
36
+ data.rewind
37
+ Dir.mkdir(DATA_DIRECTORY) unless Dir.exists?(DATA_DIRECTORY)
38
+ index = {}
39
+
40
+ data.each_line{ |line|
41
+ line =~ /^(\S+?);(\S+)\s+#\s(\S+).*$/
42
+ if $1 && $2
43
+ cps, width, category = $1, $2, $3
44
+ next if IGNORE_CATEGORIES.include?(category)
45
+ if cps['..']
46
+ codepoints = Range.new(*cps.split('..').map{ |cp| cp.to_i(16) })
47
+ else
48
+ codepoints = [cps.to_i(16)]
49
+ end
50
+
51
+ codepoints.each{ |cp|
52
+ index[cp] = is_zero_width?(category, cp) ? 0 : width.to_sym
53
+ }
54
+ end
55
+ }
56
+
57
+ index.merge! SPECIAL_WIDTHS
58
+ File.open(INDEX_FILENAME, 'wb') { |f| Marshal.dump(index, f) }
59
+ end
60
+
61
+ def self.is_zero_width?(category, cp)
62
+ ( ZERO_WIDTH_CATEGORIES.include?(category) &&
63
+ [cp].pack('U') !~ /\p{Cf}(?<=\p{Arabic})/ ) ||
64
+ ZERO_WIDTH_CODEPOINTS.include?(cp)
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,7 @@
1
+ module Unicode
2
+ module DisplayWidth
3
+ NO_STRING_EXT = true
4
+ end
5
+ end
6
+
7
+ require_relative '../display_width'
@@ -0,0 +1,17 @@
1
+ require_relative '../display_width'
2
+
3
+ class String
4
+ def display_width(ambiguous = 1, overwrite = {})
5
+ Unicode::DisplayWidth.of(self, ambiguous, overwrite)
6
+ end
7
+
8
+ def display_size(*args)
9
+ warn "Deprecation warning: Please use `String#display_width` instead of `String#display_size`"
10
+ display_width(*args)
11
+ end
12
+
13
+ def display_length(*args)
14
+ warn "Deprecation warning: Please use `String#display_width` instead of `String#display_length`"
15
+ display_width(*args)
16
+ end
17
+ end
@@ -0,0 +1,126 @@
1
+ # coding: utf-8
2
+
3
+ require 'unicode/display_width'
4
+
5
+ describe 'Unicode::DisplayWidth.of' do
6
+ describe '[east asian width]' do
7
+ it 'returns 2 for F' do
8
+ expect( '!'.display_width ).to eq 2
9
+ end
10
+
11
+ it 'returns 2 for W' do
12
+ expect( '一'.display_width ).to eq 2
13
+ end
14
+
15
+ it 'returns 1 for N' do
16
+ expect( 'À'.display_width ).to eq 1
17
+ end
18
+
19
+ it 'returns 1 for Na' do
20
+ expect( 'A'.display_width ).to eq 1
21
+ end
22
+
23
+ it 'returns 1 for H' do
24
+ expect( '。'.display_width ).to eq 1
25
+ end
26
+
27
+ it 'returns first argument of display_width for A' do
28
+ expect( '·'.display_width(1) ).to eq 1
29
+ end
30
+
31
+ it 'returns first argument of display_width for A' do
32
+ expect( '·'.display_width(2) ).to eq 2
33
+ end
34
+
35
+ it 'returns 1 for A if no argument given' do
36
+ expect( '·'.display_width ).to eq 1
37
+ end
38
+ end
39
+
40
+ describe '[zero width]' do
41
+ it 'returns 0 for Mn chars' do
42
+ expect( 'ֿ'.display_width ).to eq 0
43
+ end
44
+
45
+ it 'returns 0 for Me chars' do
46
+ expect( '҈'.display_width ).to eq 0
47
+ end
48
+
49
+ it 'returns 0 for Cf chars' do
50
+ expect( '​'.display_width ).to eq 0
51
+ end
52
+
53
+ it 'returns 0 for HANGUL JUNGSEONG chars' do
54
+ expect( 'ᅠ'.display_width ).to eq 0
55
+ end
56
+ end
57
+
58
+ describe '[special characters]' do
59
+ it 'returns 0 for ␀' do
60
+ expect( "\0".display_width ).to eq 0
61
+ end
62
+
63
+ it 'returns 0 for ␅' do
64
+ expect( "\x05".display_width ).to eq 0
65
+ end
66
+
67
+ it 'returns 0 for ␇' do
68
+ expect( "\a".display_width ).to eq 0
69
+ end
70
+
71
+ it 'returns -1 for ␈' do
72
+ expect( "aaaa\b".display_width ).to eq 3
73
+ end
74
+
75
+ it 'returns -1 for ␈, but at least 0' do
76
+ expect( "\b".display_width ).to eq 0
77
+ end
78
+
79
+ it 'returns 0 for ␊' do
80
+ expect( "\n".display_width ).to eq 0
81
+ end
82
+
83
+ it 'returns 0 for ␋' do
84
+ expect( "\v".display_width ).to eq 0
85
+ end
86
+
87
+ it 'returns 0 for ␌' do
88
+ expect( "\f".display_width ).to eq 0
89
+ end
90
+
91
+ it 'returns 0 for ␍' do
92
+ expect( "\r".display_width ).to eq 0
93
+ end
94
+
95
+ it 'returns 0 for ␎' do
96
+ expect( "\x0E".display_width ).to eq 0
97
+ end
98
+
99
+ it 'returns 0 for ␏' do
100
+ expect( "\x0F".display_width ).to eq 0
101
+ end
102
+
103
+ it 'returns 1 for other C0 characters' do
104
+ expect( "\x10".display_width ).to eq 1
105
+ end
106
+
107
+ it 'returns 1 for SOFT HYPHEN' do
108
+ expect( "­".display_width ).to eq 1
109
+ end
110
+
111
+ it 'returns 2 for THREE-EM DASH' do
112
+ expect( "⸺".display_width ).to eq 2
113
+ end
114
+
115
+ it 'returns 3 for THREE-EM DASH' do
116
+ expect( "⸻".display_width ).to eq 3
117
+ end
118
+ end
119
+
120
+
121
+ describe '[overwrite]' do
122
+ it 'can be passed a 3rd parameter with overwrites' do
123
+ expect( "\t".display_width(1, 0x09 => 12) ).to eq 12
124
+ end
125
+ end
126
+ end
@@ -1,5 +1,4 @@
1
1
  # -*- encoding: utf-8 -*-
2
- require 'rubygems' unless defined? Gem
3
2
  require File.dirname(__FILE__) + "/lib/unicode/display_width"
4
3
 
5
4
  Gem::Specification.new do |s|
@@ -10,10 +9,10 @@ Gem::Specification.new do |s|
10
9
  s.homepage = "http://github.com/janlelis/unicode-display_width"
11
10
  s.summary = "Support for east_asian_width string widths."
12
11
  s.description = "This gem adds String#display_width to get the display size of a string using EastAsianWidth.txt."
13
- s.required_rubygems_version = ">= 1.3.6"
14
- s.files = Dir.glob(%w[{lib,test}/**/*.rb bin/* [A-Z]*.{txt,rdoc} data/EastAsianWidth.index ext/**/*.{rb,c} **/deps.rip]) + %w{Rakefile unicode-display_width.gemspec}
15
- s.extra_rdoc_files = ["README.rdoc", "MIT-LICENSE.txt", "CHANGELOG.txt"]
12
+ s.files = Dir.glob(%w[{lib,spec}/**/*.rb [A-Z]*.{txt,rdoc} data/unicode-width.index]) + %w{Rakefile unicode-display_width.gemspec}
13
+ s.extra_rdoc_files = ["README.md", "MIT-LICENSE.txt", "CHANGELOG.txt"]
16
14
  s.license = 'MIT'
17
- s.add_development_dependency 'rspec', '~> 3.2'
15
+ s.required_ruby_version = '~> 2.0'
16
+ s.add_development_dependency 'rspec', '~> 3.4'
18
17
  s.add_development_dependency 'rake', '~> 10.4'
19
18
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: unicode-display_width
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jan Lelis
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-01-06 00:00:00.000000000 Z
11
+ date: 2016-03-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '3.2'
19
+ version: '3.4'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '3.2'
26
+ version: '3.4'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -44,17 +44,22 @@ email: mail@janlelis.de
44
44
  executables: []
45
45
  extensions: []
46
46
  extra_rdoc_files:
47
- - README.rdoc
47
+ - README.md
48
48
  - MIT-LICENSE.txt
49
49
  - CHANGELOG.txt
50
50
  files:
51
51
  - CHANGELOG.txt
52
52
  - MIT-LICENSE.txt
53
- - README.rdoc
53
+ - README.md
54
54
  - Rakefile
55
- - data/EastAsianWidth.index
56
- - lib/unicode/display_size.rb
55
+ - data/unicode-width.index
57
56
  - lib/unicode/display_width.rb
57
+ - lib/unicode/display_width/constants.rb
58
+ - lib/unicode/display_width/index.rb
59
+ - lib/unicode/display_width/index_builder.rb
60
+ - lib/unicode/display_width/no_string_ext.rb
61
+ - lib/unicode/display_width/string_ext.rb
62
+ - spec/display_width_spec.rb
58
63
  - unicode-display_width.gemspec
59
64
  homepage: http://github.com/janlelis/unicode-display_width
60
65
  licenses:
@@ -66,14 +71,14 @@ require_paths:
66
71
  - lib
67
72
  required_ruby_version: !ruby/object:Gem::Requirement
68
73
  requirements:
69
- - - ">="
74
+ - - "~>"
70
75
  - !ruby/object:Gem::Version
71
- version: '0'
76
+ version: '2.0'
72
77
  required_rubygems_version: !ruby/object:Gem::Requirement
73
78
  requirements:
74
79
  - - ">="
75
80
  - !ruby/object:Gem::Version
76
- version: 1.3.6
81
+ version: '0'
77
82
  requirements: []
78
83
  rubyforge_project:
79
84
  rubygems_version: 2.5.1
@@ -1,38 +0,0 @@
1
- == unicode/display_width {<img src="https://travis-ci.org/janlelis/unicode-display_width.png" />}[https://travis-ci.org/janlelis/unicode-display_width]
2
-
3
- An early draft of a way to determine the size of the characters using <tt>EastAsianWidth.txt</tt>, based on the very early draft of a {Ruby interface to UnicodeData.txt}[https://github.com/runpaint/unicode-data] by runpaint.
4
-
5
- == Install
6
-
7
- Install the gem with:
8
-
9
- gem install unicode-display_width
10
-
11
- or add to your Gemfile:
12
-
13
- gem 'unicode-display_width'
14
-
15
- == Usage
16
-
17
- require 'unicode/display_width'
18
-
19
- The easy way is to use the <tt>String#display_width</tt> method:
20
- "⚀".display_width #=> 1
21
- '一'.display_width #=> 2
22
-
23
- To obtain more detailed character data, you can use the following syntax:
24
- Unicode::DisplayWidth.codepoint( c )
25
-
26
- === Ambiguous Characters
27
-
28
- The <tt>display_width</tt> method takes an optional argument, which will be used as width for characters defined as "ambigious". The default value is 1.
29
-
30
- == Copyright
31
-
32
- Copyright (c) 2011, 2015 Jan Lelis, http://rbjl.net, released under the MIT license.
33
-
34
- Contains code by runpaint: Copyright (c) 2009 Run Paint Run Run
35
-
36
- Contains EastAsianWidth.txt: Copyright (c) 1991-2015 Unicode, Inc.
37
-
38
- J-_-L
Binary file
@@ -1,2 +0,0 @@
1
- warn "Deprecation warning: Please use require 'unicode/display_width' instead of require 'unicode/display_size'"
2
- require File.dirname(__FILE__) + "/display_width"