utf8_proc 0.4.1 → 0.5.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/Gemfile +0 -6
- data/README.md +2 -4
- data/ext/utf8_proc/extconf.rb +5 -1
- data/ext/utf8_proc/utf8_proc.c +78 -46
- data/ext/utf8_proc/utf8_proc.h +6 -3
- data/lib/utf8_proc.rb +1 -0
- data/lib/utf8_proc/benchmark.rb +87 -0
- data/lib/utf8_proc/version.rb +1 -1
- data/utf8_proc.gemspec +4 -1
- metadata +31 -4
- data/bin/console +0 -12
- data/bin/setup +0 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ef828b3bc3e2413f1ef0df107c8924eaa84cac4a
|
4
|
+
data.tar.gz: c4fe505d4cdb442a921df2bc3bd2d1bd0a08d08b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ea8ec35886cf54a9ce7047ba26e66a0904d4171a26a2697a656dc4d746c3509a6123e7e926beb27f26960bd5d218ade3377b0c38efcc2cafb1acf2ce5ea612d6
|
7
|
+
data.tar.gz: 886eb31311b4d4f5559632d0347cd81ab6378d62285a958f0d2a2fcc193ae7f82aeefe945a192eee4d77d56ebdffa68426a0e4993890e83eec2bb305da3dbb5c
|
data/Gemfile
CHANGED
@@ -1,11 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
source "https://rubygems.org"
|
3
3
|
|
4
|
-
# Eagerly load a version of the OpenSSL gem on MRI Ruby 2.4
|
5
|
-
# Workaround for https://github.com/bundler/bundler/issues/5235
|
6
|
-
if defined?(RUBY_DESCRIPTION) && RUBY_DESCRIPTION.start_with?("ruby 2.4")
|
7
|
-
gem "openssl"
|
8
|
-
end
|
9
|
-
|
10
4
|
# Specify your gem's dependencies in icu_test.gemspec
|
11
5
|
gemspec
|
data/README.md
CHANGED
@@ -6,11 +6,9 @@
|
|
6
6
|
|
7
7
|
A simple wrapper around [utf8proc](https://github.com/JuliaLang/utf8proc) for normalizing Unicode strings. Will use the `utf8proc` shared library and headers installed on your system if they are available *(Packages are available. OSX: `brew install utf8proc`, Linux: `libutf8proc-dev` or `utf8proc-devel`)*. Failing that, it will fall-back to compiling the library into the extension.
|
8
8
|
|
9
|
-
Currently supports UTF-8/ASCII string input and NFC, NFD, NFKC, NFKD, and NKFC-Casefold forms. Handles Unicode 9.0 and includes the current official full suite of 9.0 normalization tests.
|
9
|
+
Currently supports UTF-8/ASCII string input and NFC, NFD, NFKC, NFKD, and NKFC-Casefold forms (US-ASCII strings return an unmodified or case-folded copy). Handles Unicode 9.0 and includes the current official full suite of 9.0 normalization tests.
|
10
10
|
|
11
|
-
Quick benchmarks against the [UNF](https://github.com/knu/ruby-unf) gem show
|
12
|
-
|
13
|
-
*(Note: UNF is generally a bit faster but currently officially supports Unicode 6.0 and does not pass all 9.0 normalization tests.)*
|
11
|
+
Quick benchmarks against the [UNF](https://github.com/knu/ruby-unf) gem show `utf8_proc` to be between the same speed (best-case) and ~2x slower (worst-case), averaging about 1.15 to 1.5x slower and improving on complex Unicode strings. *(However, UNF currently only officially supports Unicode 6.0 and does not pass all 9.0 normalization tests.)*
|
14
12
|
|
15
13
|
## Installation
|
16
14
|
|
data/ext/utf8_proc/extconf.rb
CHANGED
@@ -15,6 +15,10 @@ unless have_library("utf8proc")
|
|
15
15
|
$CFLAGS << " -I#{libutf8proc_dir}"
|
16
16
|
end
|
17
17
|
|
18
|
-
$CFLAGS << " -
|
18
|
+
$CFLAGS << " -fPIC" if RbConfig::CONFIG["target_cpu"] == "x86_64"
|
19
|
+
if RbConfig::CONFIG["CC"] == "clang"
|
20
|
+
$CFLAGS << " -flto -mllvm -inline-threshold=5000"
|
21
|
+
end
|
22
|
+
$CFLAGS << " -std=c99 -march=native -mtune=native -Wno-declaration-after-statement"
|
19
23
|
|
20
24
|
create_makefile("utf8_proc/utf8_proc")
|
data/ext/utf8_proc/utf8_proc.c
CHANGED
@@ -9,104 +9,136 @@ static ID NFKC;
|
|
9
9
|
static ID NFKD;
|
10
10
|
static ID NFKC_CF;
|
11
11
|
|
12
|
-
|
12
|
+
// Derived from utf8proc_map_custom.
|
13
|
+
// Pre-allocates string buffers and skips initial preflight decompose and
|
14
|
+
// post-flight relloc for speed.
|
15
|
+
static inline VALUE normInternal(VALUE *string, utf8proc_option_t options) {
|
13
16
|
rb_encoding *enc;
|
14
17
|
enc = rb_enc_get(*string);
|
15
|
-
if (enc
|
18
|
+
if (enc == enc_utf8) {
|
19
|
+
// Continue
|
20
|
+
} else if (enc == enc_usascii) {
|
21
|
+
// Return a US-ASCII copy, possibly case-folded
|
22
|
+
char *c_str = StringValuePtr(*string);
|
23
|
+
long c_strlen = RSTRING_LEN(*string);
|
24
|
+
if (options & UTF8PROC_CASEFOLD) {
|
25
|
+
for(int i = 0; i < c_strlen; i++) { c_str[i] = tolower(c_str[i]); }
|
26
|
+
}
|
27
|
+
return rb_enc_str_new(c_str, c_strlen, enc_usascii);
|
28
|
+
} else {
|
16
29
|
rb_raise(rb_eEncodingError, "%s", "String must be in UTF-8 or US-ASCII encoding.");
|
17
30
|
}
|
18
|
-
}
|
19
31
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
utf8proc_ssize_t
|
24
|
-
|
25
|
-
|
26
|
-
)
|
32
|
+
// Allocate buffer to safe maximum length estimated from Normalization options
|
33
|
+
// and known maximal expansion of codepoints
|
34
|
+
utf8proc_int32_t *buffer;
|
35
|
+
utf8proc_ssize_t bufflen;
|
36
|
+
bufflen = rb_str_strlen(*string) * ((options & UTF8PROC_COMPAT) ? 18 : 4);
|
37
|
+
buffer = (utf8proc_int32_t *) malloc(bufflen * sizeof(utf8proc_int32_t) + 1);
|
38
|
+
if (!buffer) {
|
39
|
+
rb_raise(rb_eEncodingError, "%s", utf8proc_errmsg(UTF8PROC_ERROR_NOMEM));
|
40
|
+
return Qnil;
|
41
|
+
}
|
27
42
|
|
28
|
-
|
29
|
-
|
30
|
-
|
43
|
+
utf8proc_ssize_t result;
|
44
|
+
// Decompose input
|
45
|
+
result = utf8proc_decompose_custom((unsigned char *) StringValuePtr(*string),
|
46
|
+
RSTRING_LEN(*string), buffer, bufflen,
|
47
|
+
options, NULL, NULL);
|
48
|
+
if (result < 0) {
|
49
|
+
free(buffer);
|
50
|
+
rb_raise(rb_eEncodingError, "%s", utf8proc_errmsg(result));
|
51
|
+
return Qnil;
|
52
|
+
}
|
31
53
|
|
54
|
+
// Compose & re-encode input.
|
55
|
+
result = utf8proc_reencode(buffer, result, options);
|
56
|
+
if (result < 0) {
|
57
|
+
free(buffer);
|
58
|
+
rb_raise(rb_eEncodingError, "%s", utf8proc_errmsg(result));
|
59
|
+
return Qnil;
|
60
|
+
}
|
61
|
+
|
62
|
+
VALUE new_str;
|
63
|
+
new_str = rb_enc_str_new((char *) buffer, result, enc_utf8);
|
64
|
+
free(buffer);
|
32
65
|
return new_str;
|
33
66
|
}
|
34
67
|
|
35
68
|
// NFC
|
36
69
|
|
37
70
|
static VALUE toNFC(VALUE self, VALUE string) {
|
38
|
-
return normInternal(string, UTF8PROC_STABLE | UTF8PROC_COMPOSE);
|
71
|
+
return normInternal(&string, UTF8PROC_STABLE | UTF8PROC_COMPOSE);
|
39
72
|
}
|
40
73
|
|
41
74
|
static VALUE StoNFC(VALUE string) {
|
42
|
-
return normInternal(string, UTF8PROC_STABLE | UTF8PROC_COMPOSE);
|
75
|
+
return normInternal(&string, UTF8PROC_STABLE | UTF8PROC_COMPOSE);
|
43
76
|
}
|
44
77
|
|
45
78
|
// NFD
|
46
79
|
|
47
80
|
static VALUE toNFD(VALUE self, VALUE string) {
|
48
|
-
return normInternal(string, UTF8PROC_STABLE | UTF8PROC_DECOMPOSE);
|
81
|
+
return normInternal(&string, UTF8PROC_STABLE | UTF8PROC_DECOMPOSE);
|
49
82
|
}
|
50
83
|
|
51
84
|
static VALUE StoNFD(VALUE string) {
|
52
|
-
return normInternal(string, UTF8PROC_STABLE | UTF8PROC_DECOMPOSE);
|
85
|
+
return normInternal(&string, UTF8PROC_STABLE | UTF8PROC_DECOMPOSE);
|
53
86
|
}
|
54
87
|
|
55
88
|
// NFKC
|
56
89
|
|
57
90
|
static VALUE toNFKC(VALUE self, VALUE string) {
|
58
|
-
return normInternal(string,UTF8PROC_STABLE | UTF8PROC_COMPOSE | UTF8PROC_COMPAT);
|
91
|
+
return normInternal(&string, UTF8PROC_STABLE | UTF8PROC_COMPOSE | UTF8PROC_COMPAT);
|
59
92
|
}
|
60
93
|
|
61
94
|
static VALUE StoNFKC(VALUE string) {
|
62
|
-
return normInternal(string,UTF8PROC_STABLE | UTF8PROC_COMPOSE | UTF8PROC_COMPAT);
|
95
|
+
return normInternal(&string, UTF8PROC_STABLE | UTF8PROC_COMPOSE | UTF8PROC_COMPAT);
|
63
96
|
}
|
64
97
|
|
65
98
|
// NFKD
|
66
99
|
|
67
100
|
static VALUE toNFKD(VALUE self, VALUE string) {
|
68
|
-
return normInternal(string, UTF8PROC_STABLE | UTF8PROC_DECOMPOSE | UTF8PROC_COMPAT);
|
101
|
+
return normInternal(&string, UTF8PROC_STABLE | UTF8PROC_DECOMPOSE | UTF8PROC_COMPAT);
|
69
102
|
}
|
70
103
|
|
71
104
|
static VALUE StoNFKD(VALUE string) {
|
72
|
-
return normInternal(string, UTF8PROC_STABLE | UTF8PROC_DECOMPOSE | UTF8PROC_COMPAT);
|
105
|
+
return normInternal(&string, UTF8PROC_STABLE | UTF8PROC_DECOMPOSE | UTF8PROC_COMPAT);
|
73
106
|
}
|
74
107
|
|
75
108
|
// NFKC_CF
|
76
109
|
|
77
110
|
static VALUE toNFKC_CF(VALUE self, VALUE string) {
|
78
|
-
return normInternal(string, UTF8PROC_STABLE | UTF8PROC_COMPOSE | UTF8PROC_COMPAT | UTF8PROC_CASEFOLD);
|
111
|
+
return normInternal(&string, UTF8PROC_STABLE | UTF8PROC_COMPOSE | UTF8PROC_COMPAT | UTF8PROC_CASEFOLD);
|
79
112
|
}
|
80
113
|
|
81
114
|
static VALUE StoNFKC_CF(VALUE string) {
|
82
|
-
return normInternal(string, UTF8PROC_STABLE | UTF8PROC_COMPOSE | UTF8PROC_COMPAT | UTF8PROC_CASEFOLD);
|
115
|
+
return normInternal(&string, UTF8PROC_STABLE | UTF8PROC_COMPOSE | UTF8PROC_COMPAT | UTF8PROC_CASEFOLD);
|
83
116
|
}
|
84
117
|
|
85
118
|
// Parameterized normalization
|
86
119
|
|
87
|
-
|
88
120
|
static VALUE toNorm(int argc, VALUE* argv, VALUE self){
|
89
121
|
VALUE string;
|
90
122
|
VALUE form;
|
91
123
|
rb_scan_args(argc, argv, "11", &string, &form);
|
92
124
|
|
93
125
|
if (NIL_P(form)) {
|
94
|
-
return
|
126
|
+
return normInternal(&string, UTF8PROC_STABLE | UTF8PROC_COMPOSE);
|
95
127
|
}
|
96
128
|
|
97
129
|
ID s_form;
|
98
130
|
s_form = SYM2ID(form);
|
99
131
|
if (s_form == NFC) {
|
100
|
-
return
|
101
|
-
}else if(s_form == NFD) {
|
102
|
-
return
|
103
|
-
}else if(s_form == NFKC) {
|
104
|
-
return
|
105
|
-
}else if(s_form == NFKD) {
|
106
|
-
return
|
107
|
-
}else if(s_form == NFKC_CF) {
|
108
|
-
return
|
109
|
-
}else{
|
132
|
+
return normInternal(&string, UTF8PROC_STABLE | UTF8PROC_COMPOSE);
|
133
|
+
} else if (s_form == NFD) {
|
134
|
+
return normInternal(&string, UTF8PROC_STABLE | UTF8PROC_DECOMPOSE);
|
135
|
+
} else if (s_form == NFKC) {
|
136
|
+
return normInternal(&string, UTF8PROC_STABLE | UTF8PROC_COMPOSE | UTF8PROC_COMPAT);
|
137
|
+
} else if (s_form == NFKD) {
|
138
|
+
return normInternal(&string, UTF8PROC_STABLE | UTF8PROC_DECOMPOSE | UTF8PROC_COMPAT);
|
139
|
+
} else if (s_form == NFKC_CF) {
|
140
|
+
return normInternal(&string, UTF8PROC_STABLE | UTF8PROC_COMPOSE | UTF8PROC_COMPAT | UTF8PROC_CASEFOLD);
|
141
|
+
} else {
|
110
142
|
rb_raise(rb_eArgError, "%s",
|
111
143
|
"Second argument must be one of [:nfc (default), :nfd, :nfkc, " \
|
112
144
|
":nfkd, :nfkc_cf]");
|
@@ -118,22 +150,22 @@ static VALUE StoNorm(int argc, VALUE* argv, VALUE string){
|
|
118
150
|
rb_scan_args(argc, argv, "01", &form);
|
119
151
|
|
120
152
|
if (NIL_P(form)) {
|
121
|
-
return
|
153
|
+
return normInternal(&string, UTF8PROC_STABLE | UTF8PROC_COMPOSE);
|
122
154
|
}
|
123
155
|
|
124
156
|
ID s_form;
|
125
157
|
s_form = SYM2ID(form);
|
126
158
|
if (s_form == NFC) {
|
127
|
-
return
|
128
|
-
}else if(s_form == NFD) {
|
129
|
-
return
|
130
|
-
}else if(s_form == NFKC) {
|
131
|
-
return
|
132
|
-
}else if(s_form == NFKD) {
|
133
|
-
return
|
134
|
-
}else if(s_form == NFKC_CF) {
|
135
|
-
return
|
136
|
-
}else{
|
159
|
+
return normInternal(&string, UTF8PROC_STABLE | UTF8PROC_COMPOSE);
|
160
|
+
} else if (s_form == NFD) {
|
161
|
+
return normInternal(&string, UTF8PROC_STABLE | UTF8PROC_DECOMPOSE);
|
162
|
+
} else if (s_form == NFKC) {
|
163
|
+
return normInternal(&string, UTF8PROC_STABLE | UTF8PROC_COMPOSE | UTF8PROC_COMPAT);
|
164
|
+
} else if (s_form == NFKD) {
|
165
|
+
return normInternal(&string, UTF8PROC_STABLE | UTF8PROC_DECOMPOSE | UTF8PROC_COMPAT);
|
166
|
+
} else if (s_form == NFKC_CF) {
|
167
|
+
return normInternal(&string, UTF8PROC_STABLE | UTF8PROC_COMPOSE | UTF8PROC_COMPAT | UTF8PROC_CASEFOLD);
|
168
|
+
} else {
|
137
169
|
rb_raise(rb_eArgError, "%s",
|
138
170
|
"Argument must be one of [:nfc (default), :nfd, :nfkc, " \
|
139
171
|
":nfkd, :nfkc_cf]");
|
data/ext/utf8_proc/utf8_proc.h
CHANGED
@@ -1,9 +1,12 @@
|
|
1
|
-
#ifndef
|
2
|
-
#define
|
1
|
+
#ifndef UTF8_PROC_H
|
2
|
+
#define UTF8_PROC_H 1
|
3
3
|
|
4
|
+
#include <ctype.h>
|
4
5
|
#include <ruby.h>
|
5
6
|
#include <ruby/encoding.h>
|
6
7
|
|
7
8
|
#include <utf8proc.h>
|
8
9
|
|
9
|
-
|
10
|
+
extern void Init_utf8_proc(void);
|
11
|
+
|
12
|
+
#endif /* UTF8_PROC_H */
|
data/lib/utf8_proc.rb
CHANGED
@@ -0,0 +1,87 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# rubocop:disable MethodLength
|
3
|
+
module UTF8Proc
|
4
|
+
module Benchmark
|
5
|
+
module_function
|
6
|
+
|
7
|
+
def run
|
8
|
+
require "benchmark/ips"
|
9
|
+
require "unf"
|
10
|
+
# Various different normalizations of Unicode characters.
|
11
|
+
test_arr = ["quick", "brown", "fox", "jumped", "over", "lazy", "dog",
|
12
|
+
"QUICK", "BROWN", "FOX", "JUMPED", "OVER", "LAZY", "DOG",
|
13
|
+
"\u{03D3}", "\u{03D2 0301}", "\u{038E}", "\u{03A5 0301}",
|
14
|
+
"\u{03D4}", "\u{03D2 0308}", "\u{03AB}", "\u{03A5 0308}",
|
15
|
+
"\u{1E9B}", "\u{017F 0307}", "\u{1E61}", "\u{0073 0307}",
|
16
|
+
"\u{1D160}", "\u{1D158 1D165 1D16E}",
|
17
|
+
"\u{1F82}", "\u{03B1 0313 0300 0345}",
|
18
|
+
"\u{FDFA}", "\u{0635 0644 0649 0020 0627 0644 0644 0647}" \
|
19
|
+
"\u{0020 0639 0644 064A 0647 0020 0648 0633 0644 0645}"] * 10
|
20
|
+
test_arr.concat([" "] * (test_arr.length / 4))
|
21
|
+
|
22
|
+
test_strings = Array.new(20) { test_arr.sample(30).join("") }
|
23
|
+
puts "\nBenchmark strings:\n\n * #{test_strings.join("\n * ")}\n\n"
|
24
|
+
|
25
|
+
::Benchmark.ips do |x|
|
26
|
+
x.config(time: 10, warmup: 2)
|
27
|
+
x.report("UNF NFC") do
|
28
|
+
UNF::Normalizer.normalize(test_strings.sample, :nfc)
|
29
|
+
end
|
30
|
+
|
31
|
+
x.report("UTF8Proc NFC") do
|
32
|
+
UTF8Proc.normalize(test_strings.sample, :nfc)
|
33
|
+
end
|
34
|
+
x.compare!
|
35
|
+
end
|
36
|
+
|
37
|
+
::Benchmark.ips do |x|
|
38
|
+
x.config(time: 10, warmup: 2)
|
39
|
+
x.report("UNF NFD") do
|
40
|
+
UNF::Normalizer.normalize(test_strings.sample, :nfd)
|
41
|
+
end
|
42
|
+
|
43
|
+
x.report("UTF8Proc NFD") do
|
44
|
+
UTF8Proc.normalize(test_strings.sample, :nfd)
|
45
|
+
end
|
46
|
+
x.compare!
|
47
|
+
end
|
48
|
+
|
49
|
+
::Benchmark.ips do |x|
|
50
|
+
x.config(time: 10, warmup: 2)
|
51
|
+
x.report("UNF NFKC") do
|
52
|
+
UNF::Normalizer.normalize(test_strings.sample, :nfkc)
|
53
|
+
end
|
54
|
+
|
55
|
+
x.report("UTF8Proc NFKC") do
|
56
|
+
UTF8Proc.normalize(test_strings.sample, :nfkc)
|
57
|
+
end
|
58
|
+
x.compare!
|
59
|
+
end
|
60
|
+
|
61
|
+
::Benchmark.ips do |x|
|
62
|
+
x.config(time: 10, warmup: 2)
|
63
|
+
x.report("UNF NFKD") do
|
64
|
+
UNF::Normalizer.normalize(test_strings.sample, :nfkd)
|
65
|
+
end
|
66
|
+
|
67
|
+
x.report("UTF8Proc NFKD") do
|
68
|
+
UTF8Proc.normalize(test_strings.sample, :nfkd)
|
69
|
+
end
|
70
|
+
x.compare!
|
71
|
+
end
|
72
|
+
|
73
|
+
::Benchmark.ips do |x|
|
74
|
+
x.config(time: 10, warmup: 2)
|
75
|
+
x.report("UNF NFKC with .downcase") do
|
76
|
+
UNF::Normalizer.normalize(test_strings.sample, :nfkc).downcase
|
77
|
+
end
|
78
|
+
|
79
|
+
x.report("UTF8Proc NFKC_CF") do
|
80
|
+
UTF8Proc.normalize(test_strings.sample, :nfkc_cf)
|
81
|
+
end
|
82
|
+
x.compare!
|
83
|
+
end
|
84
|
+
true
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
data/lib/utf8_proc/version.rb
CHANGED
data/utf8_proc.gemspec
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
# frozen_string_literal: true
|
3
|
+
# rubocop:disable BlockLength
|
3
4
|
lib = File.expand_path("../lib", __FILE__)
|
4
5
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
6
|
require "utf8_proc/version"
|
@@ -17,7 +18,7 @@ Gem::Specification.new do |spec|
|
|
17
18
|
spec.required_ruby_version = ">= 2.0"
|
18
19
|
|
19
20
|
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
20
|
-
f.match(%r{^(test|spec|features)/})
|
21
|
+
f.match(%r{^(bin|test|spec|features)/})
|
21
22
|
end
|
22
23
|
spec.files += ["vendor/libutf8proc/LICENSE.md",
|
23
24
|
"vendor/libutf8proc/utf8proc.c",
|
@@ -31,6 +32,8 @@ Gem::Specification.new do |spec|
|
|
31
32
|
spec.add_development_dependency "pry", "~> 0.10"
|
32
33
|
spec.add_development_dependency "minitest", "~> 5.10"
|
33
34
|
spec.add_development_dependency "rubocop", "~> 0.47"
|
35
|
+
spec.add_development_dependency "benchmark-ips"
|
36
|
+
spec.add_development_dependency "unf"
|
34
37
|
|
35
38
|
unless RUBY_ENGINE == "jruby"
|
36
39
|
spec.extensions = ["ext/utf8_proc/extconf.rb"]
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: utf8_proc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tim Bellefleur
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-03-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -80,6 +80,34 @@ dependencies:
|
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0.47'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: benchmark-ips
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: unf
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
83
111
|
- !ruby/object:Gem::Dependency
|
84
112
|
name: rake-compiler
|
85
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -113,12 +141,11 @@ files:
|
|
113
141
|
- LICENSE.txt
|
114
142
|
- README.md
|
115
143
|
- Rakefile
|
116
|
-
- bin/console
|
117
|
-
- bin/setup
|
118
144
|
- ext/utf8_proc/extconf.rb
|
119
145
|
- ext/utf8_proc/utf8_proc.c
|
120
146
|
- ext/utf8_proc/utf8_proc.h
|
121
147
|
- lib/utf8_proc.rb
|
148
|
+
- lib/utf8_proc/benchmark.rb
|
122
149
|
- lib/utf8_proc/core_ext/string.rb
|
123
150
|
- lib/utf8_proc/core_ext/string_jruby.rb
|
124
151
|
- lib/utf8_proc/jruby.rb
|
data/bin/console
DELETED
@@ -1,12 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
require "bundler/setup"
|
5
|
-
require "utf8_proc"
|
6
|
-
|
7
|
-
# You can add fixtures and/or initialization code here to make experimenting
|
8
|
-
# with your gem easier. You can also use a different console, if you like.
|
9
|
-
|
10
|
-
# (If you use this, don't forget to add pry to your Gemfile!)
|
11
|
-
require "pry"
|
12
|
-
Pry.start
|