markw-wcwidth 0.0.2
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 +7 -0
- data/lib/wcwidth.rb +129 -0
- metadata +43 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: b88ec64e8c639150c8fc809df70b025c0172696e
|
4
|
+
data.tar.gz: 32c2be4dc162f6f427b3b8aee19895dded0b2bc0
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 51dd43ab187eea3fa71ce81fbc696d033abab315162cc173716a3391f7ac4b7198029ce152a5a2be02846d0c6896762042fbafb8a5fac392ede05a69c65446dc
|
7
|
+
data.tar.gz: 1c929bfee291eb068d1d2355d5f650c6edf28ee4aed324e81d564d2000f62df02aaeba602a3c304c9840fa38465b3cf5124d2424a70fac1f69fd6e477b75d861
|
data/lib/wcwidth.rb
ADDED
@@ -0,0 +1,129 @@
|
|
1
|
+
#--
|
2
|
+
# DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
3
|
+
# Version 2, December 2004
|
4
|
+
#
|
5
|
+
# Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
|
6
|
+
#
|
7
|
+
# Everyone is permitted to copy and distribute verbatim or modified
|
8
|
+
# copies of this license document, and changing it is allowed as long
|
9
|
+
# as the name is changed.
|
10
|
+
#
|
11
|
+
# DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
12
|
+
# TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
13
|
+
#
|
14
|
+
# 0. You just DO WHAT THE FUCK YOU WANT TO.
|
15
|
+
# Thanks to http://www.cl.cam.ac.uk/~mgk25/ucs/wcwidth.c
|
16
|
+
#++
|
17
|
+
|
18
|
+
class String
|
19
|
+
COMBINING = [0x0300..0x036F, 0x0483..0x0486, 0x0488..0x0489,
|
20
|
+
0x0591..0x05BD, 0x05BF..0x05BF, 0x05C1..0x05C2,
|
21
|
+
0x05C4..0x05C5, 0x05C7..0x05C7, 0x0600..0x0603,
|
22
|
+
0x0610..0x0615, 0x064B..0x065E, 0x0670..0x0670,
|
23
|
+
0x06D6..0x06E4, 0x06E7..0x06E8, 0x06EA..0x06ED,
|
24
|
+
0x070F..0x070F, 0x0711..0x0711, 0x0730..0x074A,
|
25
|
+
0x07A6..0x07B0, 0x07EB..0x07F3, 0x0901..0x0902,
|
26
|
+
0x093C..0x093C, 0x0941..0x0948, 0x094D..0x094D,
|
27
|
+
0x0951..0x0954, 0x0962..0x0963, 0x0981..0x0981,
|
28
|
+
0x09BC..0x09BC, 0x09C1..0x09C4, 0x09CD..0x09CD,
|
29
|
+
0x09E2..0x09E3, 0x0A01..0x0A02, 0x0A3C..0x0A3C,
|
30
|
+
0x0A41..0x0A42, 0x0A47..0x0A48, 0x0A4B..0x0A4D,
|
31
|
+
0x0A70..0x0A71, 0x0A81..0x0A82, 0x0ABC..0x0ABC,
|
32
|
+
0x0AC1..0x0AC5, 0x0AC7..0x0AC8, 0x0ACD..0x0ACD,
|
33
|
+
0x0AE2..0x0AE3, 0x0B01..0x0B01, 0x0B3C..0x0B3C,
|
34
|
+
0x0B3F..0x0B3F, 0x0B41..0x0B43, 0x0B4D..0x0B4D,
|
35
|
+
0x0B56..0x0B56, 0x0B82..0x0B82, 0x0BC0..0x0BC0,
|
36
|
+
0x0BCD..0x0BCD, 0x0C3E..0x0C40, 0x0C46..0x0C48,
|
37
|
+
0x0C4A..0x0C4D, 0x0C55..0x0C56, 0x0CBC..0x0CBC,
|
38
|
+
0x0CBF..0x0CBF, 0x0CC6..0x0CC6, 0x0CCC..0x0CCD,
|
39
|
+
0x0CE2..0x0CE3, 0x0D41..0x0D43, 0x0D4D..0x0D4D,
|
40
|
+
0x0DCA..0x0DCA, 0x0DD2..0x0DD4, 0x0DD6..0x0DD6,
|
41
|
+
0x0E31..0x0E31, 0x0E34..0x0E3A, 0x0E47..0x0E4E,
|
42
|
+
0x0EB1..0x0EB1, 0x0EB4..0x0EB9, 0x0EBB..0x0EBC,
|
43
|
+
0x0EC8..0x0ECD, 0x0F18..0x0F19, 0x0F35..0x0F35,
|
44
|
+
0x0F37..0x0F37, 0x0F39..0x0F39, 0x0F71..0x0F7E,
|
45
|
+
0x0F80..0x0F84, 0x0F86..0x0F87, 0x0F90..0x0F97,
|
46
|
+
0x0F99..0x0FBC, 0x0FC6..0x0FC6, 0x102D..0x1030,
|
47
|
+
0x1032..0x1032, 0x1036..0x1037, 0x1039..0x1039,
|
48
|
+
0x1058..0x1059, 0x1160..0x11FF, 0x135F..0x135F,
|
49
|
+
0x1712..0x1714, 0x1732..0x1734, 0x1752..0x1753,
|
50
|
+
0x1772..0x1773, 0x17B4..0x17B5, 0x17B7..0x17BD,
|
51
|
+
0x17C6..0x17C6, 0x17C9..0x17D3, 0x17DD..0x17DD,
|
52
|
+
0x180B..0x180D, 0x18A9..0x18A9, 0x1920..0x1922,
|
53
|
+
0x1927..0x1928, 0x1932..0x1932, 0x1939..0x193B,
|
54
|
+
0x1A17..0x1A18, 0x1B00..0x1B03, 0x1B34..0x1B34,
|
55
|
+
0x1B36..0x1B3A, 0x1B3C..0x1B3C, 0x1B42..0x1B42,
|
56
|
+
0x1B6B..0x1B73, 0x1DC0..0x1DCA, 0x1DFE..0x1DFF,
|
57
|
+
0x200B..0x200F, 0x202A..0x202E, 0x2060..0x2063,
|
58
|
+
0x206A..0x206F, 0x20D0..0x20EF, 0x302A..0x302F,
|
59
|
+
0x3099..0x309A, 0xA806..0xA806, 0xA80B..0xA80B,
|
60
|
+
0xA825..0xA826, 0xFB1E..0xFB1E, 0xFE00..0xFE0F,
|
61
|
+
0xFE20..0xFE23, 0xFEFF..0xFEFF, 0xFFF9..0xFFFB,
|
62
|
+
0x10A01..0x10A03, 0x10A05..0x10A06, 0x10A0C..0x10A0F,
|
63
|
+
0x10A38..0x10A3A, 0x10A3F..0x10A3F, 0x1D167..0x1D169,
|
64
|
+
0x1D173..0x1D182, 0x1D185..0x1D18B, 0x1D1AA..0x1D1AD,
|
65
|
+
0x1D242..0x1D244, 0xE0001..0xE0001, 0xE0020..0xE007F,
|
66
|
+
0xE0100..0xE01EF]
|
67
|
+
|
68
|
+
protected
|
69
|
+
def self.bisearch(ucs)
|
70
|
+
max, min, mid = COMBINING.size - 1, 0, 0
|
71
|
+
|
72
|
+
return false if ucs < COMBINING.first.begin or ucs > COMBINING.last.end
|
73
|
+
|
74
|
+
while max >= min
|
75
|
+
mid = (min + max) / 2
|
76
|
+
|
77
|
+
if ucs > COMBINING[mid].end
|
78
|
+
min = mid + 1
|
79
|
+
elsif (ucs < COMBINING[mid].first)
|
80
|
+
max = mid - 1
|
81
|
+
else
|
82
|
+
return true
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
false
|
87
|
+
end
|
88
|
+
|
89
|
+
def mk_wcswidth
|
90
|
+
res = 0
|
91
|
+
self.each_codepoint do |ucs|
|
92
|
+
z = if ucs == 0
|
93
|
+
0
|
94
|
+
elsif ucs < 32 or (ucs >= 0x7f and ucs < 0xa0)
|
95
|
+
-1
|
96
|
+
elsif (ucs >= 0x1100 and # Hangul Jamu init. consonants
|
97
|
+
(ucs <= 0x115f or
|
98
|
+
ucs == 0x2329 or ucs == 0x232a or
|
99
|
+
(ucs >= 0x2e80 and ucs <= 0xa4cf &&
|
100
|
+
ucs != 0x303f) or # CJK ... Yi
|
101
|
+
(ucs >= 0xac00 and ucs <= 0xd7a3) or # Hangul Syllables
|
102
|
+
(ucs >= 0xf900 and ucs <= 0xfaff) or # CJK Compatibility Ideographs
|
103
|
+
(ucs >= 0xfe10 and ucs <= 0xfe19) or # Vertical forms
|
104
|
+
(ucs >= 0xfe30 and ucs <= 0xfe6f) or # CJK Compatibility Forms
|
105
|
+
(ucs >= 0xff00 and ucs <= 0xff60) or # Fullwidth Forms
|
106
|
+
(ucs >= 0xffe0 and ucs <= 0xffe6) or
|
107
|
+
(ucs >= 0x20000 and ucs <= 0x2fffd) or
|
108
|
+
(ucs >= 0x30000 and ucs <= 0x3fffd)))
|
109
|
+
2
|
110
|
+
elsif String::bisearch(ucs)
|
111
|
+
0
|
112
|
+
else
|
113
|
+
1
|
114
|
+
end
|
115
|
+
|
116
|
+
if z < 0
|
117
|
+
res = -1
|
118
|
+
break
|
119
|
+
end
|
120
|
+
res += z
|
121
|
+
end
|
122
|
+
res
|
123
|
+
end
|
124
|
+
|
125
|
+
public
|
126
|
+
def width
|
127
|
+
self.mk_wcswidth
|
128
|
+
end
|
129
|
+
end
|
metadata
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: markw-wcwidth
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- markw
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-11-21 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: wcwidth ruby implementation
|
14
|
+
email: wattsmark2015@gmail.com
|
15
|
+
executables: []
|
16
|
+
extensions: []
|
17
|
+
extra_rdoc_files: []
|
18
|
+
files:
|
19
|
+
- lib/wcwidth.rb
|
20
|
+
homepage: http://github.com/mwatts15/ruby-wcwidth
|
21
|
+
licenses: []
|
22
|
+
metadata: {}
|
23
|
+
post_install_message:
|
24
|
+
rdoc_options: []
|
25
|
+
require_paths:
|
26
|
+
- lib
|
27
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
28
|
+
requirements:
|
29
|
+
- - ">="
|
30
|
+
- !ruby/object:Gem::Version
|
31
|
+
version: '0'
|
32
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
33
|
+
requirements:
|
34
|
+
- - ">="
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: '0'
|
37
|
+
requirements: []
|
38
|
+
rubyforge_project:
|
39
|
+
rubygems_version: 2.2.2
|
40
|
+
signing_key:
|
41
|
+
specification_version: 4
|
42
|
+
summary: wcwidth ruby implementation
|
43
|
+
test_files: []
|