unicode-display_width 2.3.0 → 2.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/README.md +5 -3
- data/lib/unicode/display_width/constants.rb +1 -1
- data/lib/unicode/display_width.rb +10 -0
- metadata +4 -4
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: e64e9230d9a0df4076a18bb935b6f1aeac16e079544aa65097b1ddb967b4960c
|
|
4
|
+
data.tar.gz: 17d5cf547c89859318bc578e3e15a63ce0ab94d8801f2928097bb29d27cb6da0
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 1ea3ee4075d687ac1708a095ffe82e833389db1ec613ef43c9f8aa3aeeb5983d585cf6ad22e7d00d1020378344d9e9450096d6b7a04f27358d5418466b7fdf41
|
|
7
|
+
data.tar.gz: 00a75b4f46daa89186bde97d5e2da86d197e5ef8704876c16085dd9a503620dc2aaf6e6e9030b9a438417f54d48070d0df06ca2b3e1530bc6d2d1be761f21054
|
data/CHANGELOG.md
CHANGED
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
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
|
|
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)
|
|
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
|
|
@@ -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.
|
|
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:
|
|
11
|
+
date: 2023-01-03 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rspec
|
|
@@ -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/
|
|
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,7 +74,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
74
74
|
requirements:
|
|
75
75
|
- - ">="
|
|
76
76
|
- !ruby/object:Gem::Version
|
|
77
|
-
version:
|
|
77
|
+
version: 2.4.0
|
|
78
78
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
79
79
|
requirements:
|
|
80
80
|
- - ">="
|