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.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/wcwidth.rb +129 -0
  3. 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: []