unisec 0.0.1 → 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 +4 -4
- data/lib/unisec/cli/cli.rb +4 -0
- data/lib/unisec/cli/size.rb +38 -0
- data/lib/unisec/cli/versions.rb +38 -0
- data/lib/unisec/size.rb +171 -0
- data/lib/unisec/version.rb +1 -1
- data/lib/unisec/versions.rb +85 -0
- data/lib/unisec.rb +2 -0
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ce2d8764170d8ac6976db2dd115a0d31c232b1c933de4d9b55b47cc7d8af9f1e
|
4
|
+
data.tar.gz: 29279259ec14a9ff8d1752d5554c601259999d10fcd447795b2bdcbd6be984af
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1e23f9ec4a267c592d4caad37fd452c0ee9498ed4d06578868acc69022ebf55cd5614ef18b0099272de040be7eb85f34d9e1f6f0665112407189835e879ccd3a
|
7
|
+
data.tar.gz: 42a10be34f6f3ee20288d5896971acabdd6082fd9c739e9edb7173c2246f44f609a59d677977d4f50dbaafcbd3603b30174bf0115fe718c5381048754b665607
|
data/lib/unisec/cli/cli.rb
CHANGED
@@ -4,6 +4,8 @@ require 'unisec/cli/surrogates'
|
|
4
4
|
require 'unisec/cli/hexdump'
|
5
5
|
require 'unisec/cli/properties'
|
6
6
|
require 'unisec/cli/confusables'
|
7
|
+
require 'unisec/cli/versions'
|
8
|
+
require 'unisec/cli/size'
|
7
9
|
|
8
10
|
module Unisec
|
9
11
|
# Module used to create the CLI for the executable
|
@@ -22,6 +24,8 @@ module Unisec
|
|
22
24
|
register 'properties char', Properties::Char
|
23
25
|
register 'confusables list', Confusables::List
|
24
26
|
register 'confusables randomize', Confusables::Randomize
|
27
|
+
register 'versions', Versions
|
28
|
+
register 'size', Size
|
25
29
|
end
|
26
30
|
end
|
27
31
|
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'dry/cli'
|
4
|
+
require 'unisec'
|
5
|
+
|
6
|
+
module Unisec
|
7
|
+
module CLI
|
8
|
+
module Commands
|
9
|
+
# CLI command `unisec size` for the class {Unisec::Size} from the lib.
|
10
|
+
#
|
11
|
+
# Example:
|
12
|
+
#
|
13
|
+
# ```plaintext
|
14
|
+
# $ unisec size 🧑🏼🔬
|
15
|
+
# Code point(s): 4
|
16
|
+
# Grapheme(s): 1
|
17
|
+
# UTF-8 byte(s): 15
|
18
|
+
# UTF-16 byte(s): 14
|
19
|
+
# UTF-32 byte(s): 16
|
20
|
+
# UTF-8 unit(s): 15
|
21
|
+
# UTF-16 unit(s): 7
|
22
|
+
# UTF-32 unit(s): 4
|
23
|
+
# ```
|
24
|
+
class Size < Dry::CLI::Command
|
25
|
+
desc 'All kinf of size information about a Unicode string'
|
26
|
+
|
27
|
+
argument :input, required: true,
|
28
|
+
desc: 'String input'
|
29
|
+
|
30
|
+
# All kinf of size information about a Unicode string.
|
31
|
+
# @param input [String] Input sting we want to know the size of
|
32
|
+
def call(input: nil, **)
|
33
|
+
puts Unisec::Size.new(input).display
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'dry/cli'
|
4
|
+
require 'unisec'
|
5
|
+
|
6
|
+
module Unisec
|
7
|
+
module CLI
|
8
|
+
module Commands
|
9
|
+
# CLI command `unisec versions` for the class {Unisec::Versions} from the lib.
|
10
|
+
#
|
11
|
+
# Example:
|
12
|
+
#
|
13
|
+
# ```plaintext
|
14
|
+
# $ unisec versions
|
15
|
+
# Unicode:
|
16
|
+
# Unicode (Ruby) 15.0.0
|
17
|
+
# Unicode (twitter_cldr gem) 14.0.0
|
18
|
+
# Unicode (unicode-confusable gem) 15.0.0
|
19
|
+
# ICU (twitter_cldr gem) 70.1
|
20
|
+
# CLDR (twitter_cldr gem) 40
|
21
|
+
# Unicode emoji (Ruby) 15.0
|
22
|
+
#
|
23
|
+
# Gems:
|
24
|
+
# unisec 0.0.1
|
25
|
+
# twitter_cldr gem 6.11.5
|
26
|
+
# unicode-confusable gem 1.9.0
|
27
|
+
# ```
|
28
|
+
class Versions < Dry::CLI::Command
|
29
|
+
desc 'Version of anything related to Unicode as used in unisec'
|
30
|
+
|
31
|
+
# Version of anything related to Unicode as used in unisec.
|
32
|
+
def call(**)
|
33
|
+
puts Unisec::Versions.display
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
data/lib/unisec/size.rb
ADDED
@@ -0,0 +1,171 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'paint'
|
4
|
+
|
5
|
+
module Unisec
|
6
|
+
# All kinf of size information about a Unicode string
|
7
|
+
class Size
|
8
|
+
# Number of code points
|
9
|
+
# @return [Integer] number of code points
|
10
|
+
# @example
|
11
|
+
# us = Unisec::Size.new('👩❤️👩')
|
12
|
+
# us.code_points_size # => 6
|
13
|
+
attr_reader :code_points_size
|
14
|
+
|
15
|
+
# Number of graphemes
|
16
|
+
# @return [Integer] number of graphemes
|
17
|
+
# @example
|
18
|
+
# us = Unisec::Size.new('👩❤️👩')
|
19
|
+
# us.grapheme_size # => 1
|
20
|
+
attr_reader :grapheme_size
|
21
|
+
|
22
|
+
# UTF-8 size in bytes
|
23
|
+
# @return [Integer] UTF-8 size in bytes
|
24
|
+
# @example
|
25
|
+
# us = Unisec::Size.new('👩❤️👩')
|
26
|
+
# us.utf8_bytesize # => 20
|
27
|
+
attr_reader :utf8_bytesize
|
28
|
+
|
29
|
+
# UTF-16 size in bytes
|
30
|
+
# @return [Integer] UTF-16 size in bytes
|
31
|
+
# @example
|
32
|
+
# us = Unisec::Size.new('👩❤️👩')
|
33
|
+
# us.utf16_bytesize # => 16
|
34
|
+
attr_reader :utf16_bytesize
|
35
|
+
|
36
|
+
# UTF-32 size in bytes
|
37
|
+
# @return [Integer] UTF-32 size in bytes
|
38
|
+
# @example
|
39
|
+
# us = Unisec::Size.new('👩❤️👩')
|
40
|
+
# us.utf32_bytesize # => 24
|
41
|
+
attr_reader :utf32_bytesize
|
42
|
+
|
43
|
+
# Number of UTF-8 units
|
44
|
+
# @return [Integer] number of UTF-8 units
|
45
|
+
# @example
|
46
|
+
# us = Unisec::Size.new('👩❤️👩')
|
47
|
+
# us.utf8_unitsize # => 20
|
48
|
+
attr_reader :utf8_unitsize
|
49
|
+
|
50
|
+
# Number of UTF-16 units
|
51
|
+
# @return [Integer] number of UTF-16 units
|
52
|
+
# @example
|
53
|
+
# us = Unisec::Size.new('👩❤️👩')
|
54
|
+
# us.utf16_unitsize # => 8
|
55
|
+
attr_reader :utf16_unitsize
|
56
|
+
|
57
|
+
# Number of UTF-32 units
|
58
|
+
# @return [Integer] number of UTF-32 units
|
59
|
+
# @example
|
60
|
+
# us = Unisec::Size.new('👩❤️👩')
|
61
|
+
# us.utf32_unitsize # => 6
|
62
|
+
attr_reader :utf32_unitsize
|
63
|
+
|
64
|
+
def initialize(str)
|
65
|
+
@code_points_size = Size.code_points_size(str)
|
66
|
+
@grapheme_size = Size.grapheme_size(str)
|
67
|
+
@utf8_bytesize = Size.utf8_bytesize(str)
|
68
|
+
@utf16_bytesize = Size.utf16_bytesize(str)
|
69
|
+
@utf32_bytesize = Size.utf32_bytesize(str)
|
70
|
+
@utf8_unitsize = Size.utf8_unitsize(str)
|
71
|
+
@utf16_unitsize = Size.utf16_unitsize(str)
|
72
|
+
@utf32_unitsize = Size.utf32_unitsize(str)
|
73
|
+
end
|
74
|
+
|
75
|
+
# Number of code points
|
76
|
+
# @param str [String] Input sting we want to know the size of
|
77
|
+
# @return [Integer] number of code points
|
78
|
+
# @example
|
79
|
+
# Unisec::Size.code_points_size('👩❤️👩') # => 6
|
80
|
+
def self.code_points_size(str)
|
81
|
+
str.size
|
82
|
+
end
|
83
|
+
|
84
|
+
# Number of graphemes
|
85
|
+
# @param str [String] Input sting we want to know the size of
|
86
|
+
# @return [Integer] number of graphemes
|
87
|
+
# @example
|
88
|
+
# Unisec::Size.grapheme_size('👩❤️👩') # => 1
|
89
|
+
def self.grapheme_size(str)
|
90
|
+
str.grapheme_clusters.size
|
91
|
+
end
|
92
|
+
|
93
|
+
# UTF-8 size in bytes
|
94
|
+
# @param str [String] Input sting we want to know the size of
|
95
|
+
# @return [Integer] UTF-8 size in bytes
|
96
|
+
# @example
|
97
|
+
# Unisec::Size.utf8_bytesize('👩❤️👩') # => 20
|
98
|
+
def self.utf8_bytesize(str)
|
99
|
+
str.bytesize
|
100
|
+
end
|
101
|
+
|
102
|
+
# UTF-16 size in bytes
|
103
|
+
# @param str [String] Input sting we want to know the size of
|
104
|
+
# @return [Integer] UTF-16 size in bytes
|
105
|
+
# @example
|
106
|
+
# Unisec::Size.utf16_bytesize('👩❤️👩') # => 16
|
107
|
+
def self.utf16_bytesize(str)
|
108
|
+
str.encode('UTF-16BE').bytesize
|
109
|
+
end
|
110
|
+
|
111
|
+
# UTF-32 size in bytes
|
112
|
+
# @param str [String] Input sting we want to know the size of
|
113
|
+
# @return [Integer] UTF-32 size in bytes
|
114
|
+
# @example
|
115
|
+
# Unisec::Size.utf32_bytesize('👩❤️👩') # => 24
|
116
|
+
def self.utf32_bytesize(str)
|
117
|
+
str.encode('UTF-32BE').bytesize
|
118
|
+
end
|
119
|
+
|
120
|
+
# Number of UTF-8 units
|
121
|
+
# @param str [String] Input sting we want to know the size of
|
122
|
+
# @return [Integer] number of UTF-8 units
|
123
|
+
# @example
|
124
|
+
# Unisec::Size.utf8_unitsize('👩❤️👩') # => 20
|
125
|
+
def self.utf8_unitsize(str)
|
126
|
+
utf8_bytesize(str)
|
127
|
+
end
|
128
|
+
|
129
|
+
# Number of UTF-16 units
|
130
|
+
# @param str [String] Input sting we want to know the size of
|
131
|
+
# @return [Integer] number of UTF-16 units
|
132
|
+
# @example
|
133
|
+
# Unisec::Size.utf16_unitsize('👩❤️👩') # => 8
|
134
|
+
def self.utf16_unitsize(str)
|
135
|
+
utf16_bytesize(str) / 2
|
136
|
+
end
|
137
|
+
|
138
|
+
# Number of UTF-32 units
|
139
|
+
# @param str [String] Input sting we want to know the size of
|
140
|
+
# @return [Integer] number of UTF-32 units
|
141
|
+
# @example
|
142
|
+
# Unisec::Size.utf32_unitsize('👩❤️👩') # => 6
|
143
|
+
def self.utf32_unitsize(str)
|
144
|
+
utf32_bytesize(str) / 4
|
145
|
+
end
|
146
|
+
|
147
|
+
# Display a CLI-friendly output summurizing the size information about a Unicode string.
|
148
|
+
# @example
|
149
|
+
# Unisec::Size.new('👩❤️👨').display
|
150
|
+
# # =>
|
151
|
+
# # Code point(s): 6
|
152
|
+
# # Grapheme(s): 1
|
153
|
+
# # UTF-8 byte(s): 20
|
154
|
+
# # UTF-16 byte(s): 16
|
155
|
+
# # UTF-32 byte(s): 24
|
156
|
+
# # UTF-8 unit(s): 20
|
157
|
+
# # UTF-16 unit(s): 8
|
158
|
+
# # UTF-32 unit(s): 6
|
159
|
+
def display
|
160
|
+
display = ->(key, value) { puts Paint[key, :red, :bold].ljust(27) + " #{value}" }
|
161
|
+
display.call('Code point(s):', @code_points_size)
|
162
|
+
display.call('Grapheme(s):', @grapheme_size)
|
163
|
+
display.call('UTF-8 byte(s):', @utf8_bytesize)
|
164
|
+
display.call('UTF-16 byte(s):', @utf16_bytesize)
|
165
|
+
display.call('UTF-32 byte(s):', @utf32_bytesize)
|
166
|
+
display.call('UTF-8 unit(s):', @utf8_unitsize)
|
167
|
+
display.call('UTF-16 unit(s):', @utf16_unitsize)
|
168
|
+
display.call('UTF-32 unit(s):', @utf32_unitsize)
|
169
|
+
end
|
170
|
+
end
|
171
|
+
end
|
data/lib/unisec/version.rb
CHANGED
@@ -0,0 +1,85 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'twitter_cldr'
|
4
|
+
require 'unicode/confusable'
|
5
|
+
require 'paint'
|
6
|
+
|
7
|
+
module Unisec
|
8
|
+
# Version information related to Unicode used in Unisec
|
9
|
+
class Versions
|
10
|
+
# Version and label of anything related to Unicode used in Unisec
|
11
|
+
# @return [Hash] versions of each component
|
12
|
+
# @example
|
13
|
+
# Unisec::Versions.versions
|
14
|
+
# # =>
|
15
|
+
# # {:unisec=>{:version=>"0.0.1", :label=>"unisec"},
|
16
|
+
# # … }
|
17
|
+
def self.versions # rubocop:disable Metrics/MethodLength
|
18
|
+
{
|
19
|
+
unisec: {
|
20
|
+
version: Unisec::VERSION,
|
21
|
+
label: 'unisec'
|
22
|
+
},
|
23
|
+
ruby_unicode: {
|
24
|
+
version: RbConfig::CONFIG['UNICODE_VERSION'],
|
25
|
+
label: 'Unicode (Ruby)'
|
26
|
+
},
|
27
|
+
ruby_unicode_emoji: {
|
28
|
+
version: RbConfig::CONFIG['UNICODE_EMOJI_VERSION'],
|
29
|
+
label: 'Unicode emoji (Ruby)'
|
30
|
+
},
|
31
|
+
twittercldr_cldr: {
|
32
|
+
version: TwitterCldr::Versions::CLDR_VERSION,
|
33
|
+
label: 'CLDR (twitter_cldr gem)'
|
34
|
+
},
|
35
|
+
twittercldr_icu: {
|
36
|
+
version: TwitterCldr::Versions::ICU_VERSION,
|
37
|
+
label: 'ICU (twitter_cldr gem)'
|
38
|
+
},
|
39
|
+
twittercldr_unicode: {
|
40
|
+
version: TwitterCldr::Versions::UNICODE_VERSION,
|
41
|
+
label: 'Unicode (twitter_cldr gem)'
|
42
|
+
},
|
43
|
+
twittercldr: {
|
44
|
+
version: TwitterCldr::VERSION,
|
45
|
+
label: 'twitter_cldr gem'
|
46
|
+
},
|
47
|
+
unicodeconfusable: {
|
48
|
+
version: Unicode::Confusable::VERSION,
|
49
|
+
label: 'unicode-confusable gem'
|
50
|
+
},
|
51
|
+
unicodeconfusable_unicode: {
|
52
|
+
version: Unicode::Confusable::UNICODE_VERSION,
|
53
|
+
label: 'Unicode (unicode-confusable gem)'
|
54
|
+
}
|
55
|
+
}
|
56
|
+
end
|
57
|
+
|
58
|
+
# Display a CLI-friendly output of the version of anything related to Unicode used in unisec
|
59
|
+
# @example
|
60
|
+
# Unisec::Versions.display
|
61
|
+
# # =>
|
62
|
+
# # Unicode:
|
63
|
+
# # Unicode (Ruby) 15.0.0
|
64
|
+
# # …
|
65
|
+
# #
|
66
|
+
# # Gems:
|
67
|
+
# # unisec 0.0.1
|
68
|
+
# # …
|
69
|
+
def self.display # rubocop:disable Metrics/AbcSize
|
70
|
+
data = versions
|
71
|
+
display = ->(node) { puts Paint[data[node][:label], :red, :bold].ljust(44) + " #{data[node][:version]}" }
|
72
|
+
puts Paint['Unicode:', :underline]
|
73
|
+
display.call(:ruby_unicode)
|
74
|
+
display.call(:twittercldr_unicode)
|
75
|
+
display.call(:unicodeconfusable_unicode)
|
76
|
+
display.call(:twittercldr_icu)
|
77
|
+
display.call(:twittercldr_cldr)
|
78
|
+
display.call(:ruby_unicode_emoji)
|
79
|
+
puts Paint["\nGems:", :underline]
|
80
|
+
display.call(:unisec)
|
81
|
+
display.call(:twittercldr)
|
82
|
+
display.call(:unicodeconfusable)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
data/lib/unisec.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: unisec
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexandre ZANNI
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-08-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ctf-party
|
@@ -100,13 +100,17 @@ files:
|
|
100
100
|
- lib/unisec/cli/confusables.rb
|
101
101
|
- lib/unisec/cli/hexdump.rb
|
102
102
|
- lib/unisec/cli/properties.rb
|
103
|
+
- lib/unisec/cli/size.rb
|
103
104
|
- lib/unisec/cli/surrogates.rb
|
105
|
+
- lib/unisec/cli/versions.rb
|
104
106
|
- lib/unisec/confusables.rb
|
105
107
|
- lib/unisec/hexdump.rb
|
106
108
|
- lib/unisec/properties.rb
|
109
|
+
- lib/unisec/size.rb
|
107
110
|
- lib/unisec/surrogates.rb
|
108
111
|
- lib/unisec/utils.rb
|
109
112
|
- lib/unisec/version.rb
|
113
|
+
- lib/unisec/versions.rb
|
110
114
|
homepage: https://github.com/Acceis/unisec
|
111
115
|
licenses:
|
112
116
|
- MIT
|