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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b0bcc124a9c3b7454adce5e3cbd9683bd23348df
4
- data.tar.gz: 5f02f3653af737024f76ac89a4bbcd46fe1edc8a
3
+ metadata.gz: ef828b3bc3e2413f1ef0df107c8924eaa84cac4a
4
+ data.tar.gz: c4fe505d4cdb442a921df2bc3bd2d1bd0a08d08b
5
5
  SHA512:
6
- metadata.gz: 556039eb22e607c1189a8ddd5b2ea3c9e248039403a6b1d08267002d01c979ce79e51c31aa96608e7c4c5b2a6b3872edc15adb0911846e49a9c40c86c29072fc
7
- data.tar.gz: 2954531729a7da56ce6b035e1e7ce185da96accfdeea1e16f99fe2f53ee27ed1e14855f0d338a69105d0e1e606ef0fc8c92bf052d7c7b98cc4ad296b7d6a4a08
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 it to be between the same speed (best-case) and ~2x slower (worst-case), averaging about ~1.2x slower on complex Unicode strings. The speed difference is more equal in NFC/NFD modes where mostly or already-normalized strings are used.
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
 
@@ -15,6 +15,10 @@ unless have_library("utf8proc")
15
15
  $CFLAGS << " -I#{libutf8proc_dir}"
16
16
  end
17
17
 
18
- $CFLAGS << " -std=c99 -Wno-declaration-after-statement"
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")
@@ -9,104 +9,136 @@ static ID NFKC;
9
9
  static ID NFKD;
10
10
  static ID NFKC_CF;
11
11
 
12
- static inline void checkStrEncoding(VALUE *string) {
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 != enc_utf8 && enc != enc_usascii) {
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
- static inline VALUE normInternal(VALUE string, utf8proc_option_t options) {
21
- checkStrEncoding(&string);
22
- utf8proc_uint8_t *retval;
23
- utf8proc_ssize_t retlen;
24
- retlen = utf8proc_map(
25
- (unsigned char *) StringValuePtr(string), RSTRING_LEN(string), &retval, options
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
- VALUE new_str;
29
- new_str = rb_enc_str_new((char *) retval, retlen, rb_utf8_encoding());
30
- free(retval);
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 toNFC(self, string);
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 toNFC(self, string);
101
- }else if(s_form == NFD) {
102
- return toNFD(self, string);
103
- }else if(s_form == NFKC) {
104
- return toNFKC(self, string);
105
- }else if(s_form == NFKD) {
106
- return toNFKD(self, string);
107
- }else if(s_form == NFKC_CF) {
108
- return toNFKC_CF(self, string);
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 StoNFC(string);
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 StoNFC(string);
128
- }else if(s_form == NFD) {
129
- return StoNFD(string);
130
- }else if(s_form == NFKC) {
131
- return StoNFKC(string);
132
- }else if(s_form == NFKD) {
133
- return StoNFKD(string);
134
- }else if(s_form == NFKC_CF) {
135
- return StoNFKC_CF(string);
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]");
@@ -1,9 +1,12 @@
1
- #ifndef ICU_TEST_H
2
- #define ICU_TEST_H 1
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
- #endif /* ICU_TEST_H */
10
+ extern void Init_utf8_proc(void);
11
+
12
+ #endif /* UTF8_PROC_H */
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
  require "utf8_proc/version"
3
+ require "utf8_proc/benchmark"
3
4
 
4
5
  module UTF8Proc
5
6
  if RUBY_ENGINE == "jruby"
@@ -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
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module UTF8Proc
3
- VERSION = "0.4.1".freeze
3
+ VERSION = "0.5.2".freeze
4
4
  end
@@ -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.1
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-02-24 00:00:00.000000000 Z
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
@@ -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
data/bin/setup DELETED
@@ -1,8 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
- IFS=$'\n\t'
4
- set -vx
5
-
6
- bundle install
7
-
8
- # Do any other automated setup that you need to do here