unicode-display_width 2.2.0 → 2.4.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
  SHA256:
3
- metadata.gz: 7ffaa48384e0e104eeaa7b4ddd92c77c014c42670fd34b9b53c484328cfd6101
4
- data.tar.gz: aca8e2e11f726baf9ef0dcbf7d7c6e49aa1e9e521b8daef737e043afe695f201
3
+ metadata.gz: e64e9230d9a0df4076a18bb935b6f1aeac16e079544aa65097b1ddb967b4960c
4
+ data.tar.gz: 17d5cf547c89859318bc578e3e15a63ce0ab94d8801f2928097bb29d27cb6da0
5
5
  SHA512:
6
- metadata.gz: bef56545861c63ac28714e9f83e31b2e37791c4695def8d8a470caec8edfbc5d04c2d09b28f478928969966f7d48d47c41a01dd9db3b7655a5926731da9292bd
7
- data.tar.gz: 3bcdb857803a71186d5de93cebee4343b16ffddf09177dd5312013c245eb4beac5cf50c4ebdd866a13ee85004ed05a8c4a104f213ba7f5b0397ab74cf175cd10
6
+ metadata.gz: 1ea3ee4075d687ac1708a095ffe82e833389db1ec613ef43c9f8aa3aeeb5983d585cf6ad22e7d00d1020378344d9e9450096d6b7a04f27358d5418466b7fdf41
7
+ data.tar.gz: 00a75b4f46daa89186bde97d5e2da86d197e5ef8704876c16085dd9a503620dc2aaf6e6e9030b9a438417f54d48070d0df06ca2b3e1530bc6d2d1be761f21054
data/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## 2.4.0
4
+ - Improve performance for ASCII-only strings, by @fatkodima
5
+ - Require Ruby 2.4
6
+
7
+ ## 2.3.0
8
+
9
+ - Unicode 15.0
10
+
3
11
  ## 2.2.0
4
12
 
5
13
  - Add *Hangul Jamo Extended-B* block to zero-width chars, thanks @ninjalj #22
data/README.md CHANGED
@@ -1,12 +1,14 @@
1
1
  ## Unicode::DisplayWidth [![[version]](https://badge.fury.io/rb/unicode-display_width.svg)](https://badge.fury.io/rb/unicode-display_width) [<img src="https://github.com/janlelis/unicode-display_width/workflows/Test/badge.svg" />](https://github.com/janlelis/unicode-display_width/actions?query=workflow%3ATest)
2
2
 
3
- Determines the monospace display width of a string in Ruby. Implementation based on [EastAsianWidth.txt](https://www.unicode.org/Public/UNIDATA/EastAsianWidth.txt) and other data, 100% in Ruby. It does not rely on the OS vendor (like [wcwidth()](https://github.com/janlelis/wcswidth-ruby)) to provide an up-to-date method for measuring string width.
3
+ Determines the monospace display width of a string in Ruby. Useful for all kinds of terminal-based applications. Implementation based on [EastAsianWidth.txt](https://www.unicode.org/Public/UNIDATA/EastAsianWidth.txt) and other data, 100% in Ruby. It does not rely on the OS vendor (like [wcwidth()](https://github.com/janlelis/wcswidth-ruby)) to provide an up-to-date method for measuring string width.
4
4
 
5
- Unicode version: **14.0.0** (September 2021)
5
+ Unicode version: **15.0.0** (September 2022)
6
6
 
7
7
  Supported Rubies: **3.1**, **3.0**, **2.7**
8
8
 
9
- Old Rubies which might still work: **2.6**, **2.5**, **2.4**, **2.3**, **2.2**, **2.1**, **2.0**, **1.9**
9
+ Old Rubies which might still work: **2.6**, **2.5**, **2.4**
10
+
11
+ For even older Rubies, use version 2.3.0 of this gem: **2.3**, **2.2**, **2.1**, **2.0**, **1.9**
10
12
 
11
13
  ## Version 2.0 — Breaking Changes
12
14
 
@@ -39,7 +41,7 @@ Width | Characters | Comment
39
41
  -------|------------------------------|--------------------------------------------------
40
42
  X | (user defined) | Overwrites any other values
41
43
  -1 | `"\b"` | Backspace (total width never below 0)
42
- 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
44
+ 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) which do not change horizontal width
43
45
  1 | `"\u{00AD}"` | SOFT HYPHEN
44
46
  2 | `"\u{2E3A}"` | TWO-EM DASH
45
47
  3 | `"\u{2E3B}"` | THREE-EM DASH
@@ -148,6 +150,7 @@ Replace "一" with the actual string to measure
148
150
  - JavaScript: https://github.com/mycoboco/wcwidth.js
149
151
  - C: https://www.cl.cam.ac.uk/~mgk25/ucs/wcwidth.c
150
152
  - C for Julia: https://github.com/JuliaLang/utf8proc/issues/2
153
+ - Golang: https://github.com/rivo/uniseg
151
154
 
152
155
  See [unicode-x](https://github.com/janlelis/unicode-x) for more Unicode related micro libraries.
153
156
 
Binary file
@@ -2,8 +2,8 @@
2
2
 
3
3
  module Unicode
4
4
  class DisplayWidth
5
- VERSION = "2.2.0"
6
- UNICODE_VERSION = "14.0.0"
5
+ VERSION = "2.4.0"
6
+ UNICODE_VERSION = "15.0.0"
7
7
  DATA_DIRECTORY = File.expand_path(File.dirname(__FILE__) + "/../../../data/")
8
8
  INDEX_FILENAME = DATA_DIRECTORY + "/display_width.marshal.gz"
9
9
  end
@@ -6,8 +6,15 @@ require_relative "display_width/index"
6
6
  module Unicode
7
7
  class DisplayWidth
8
8
  DEPTHS = [0x10000, 0x1000, 0x100, 0x10].freeze
9
+ ASCII_NON_ZERO_REGEX = /[\0\x05\a\b\n\v\f\r\x0E\x0F]/
9
10
 
10
11
  def self.of(string, ambiguous = 1, overwrite = {}, options = {})
12
+ # Optimization for ASCII-only strings without control symbols.
13
+ if overwrite.empty? && string.ascii_only? && !string.match?(ASCII_NON_ZERO_REGEX)
14
+ return string.size
15
+ end
16
+
17
+ # Add width of each char
11
18
  res = string.codepoints.inject(0){ |total_width, codepoint|
12
19
  index_or_value = INDEX
13
20
  codepoint_depth_offset = codepoint
@@ -21,7 +28,10 @@ module Unicode
21
28
  total_width + (overwrite[codepoint] || width || 1)
22
29
  }
23
30
 
31
+ # Substract emoji error
24
32
  res -= emoji_extra_width_of(string, ambiguous, overwrite) if options[:emoji]
33
+
34
+ # Return result + prevent negative lengths
25
35
  res < 0 ? 0 : res
26
36
  end
27
37
 
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: 2.2.0
4
+ version: 2.4.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: 2022-06-24 00:00:00.000000000 Z
11
+ date: 2023-01-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -38,7 +38,7 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '13.0'
41
- description: "[Unicode 14.0.0] Determines the monospace display width of a string
41
+ description: "[Unicode 15.0.0] Determines the monospace display width of a string
42
42
  using EastAsianWidth.txt, Unicode general category, and other data."
43
43
  email:
44
44
  - hi@ruby.consulting
@@ -62,7 +62,7 @@ homepage: https://github.com/janlelis/unicode-display_width
62
62
  licenses:
63
63
  - MIT
64
64
  metadata:
65
- changelog_uri: https://github.com/janlelis/unicode-display_width/blob/master/CHANGELOG.md
65
+ changelog_uri: https://github.com/janlelis/unicode-display_width/blob/main/CHANGELOG.md
66
66
  source_code_uri: https://github.com/janlelis/unicode-display_width
67
67
  bug_tracker_uri: https://github.com/janlelis/unicode-display_width/issues
68
68
  rubygems_mfa_required: 'true'
@@ -74,14 +74,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
74
74
  requirements:
75
75
  - - ">="
76
76
  - !ruby/object:Gem::Version
77
- version: 1.9.3
77
+ version: 2.4.0
78
78
  required_rubygems_version: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  requirements: []
84
- rubygems_version: 3.3.3
84
+ rubygems_version: 3.3.7
85
85
  signing_key:
86
86
  specification_version: 4
87
87
  summary: Determines the monospace display width of a string in Ruby.