summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/unicode_normalize.rb12
-rw-r--r--lib/unicode_normalize/normalize.rb4
-rw-r--r--string.c24
3 files changed, 23 insertions, 17 deletions
diff --git a/lib/unicode_normalize.rb b/lib/unicode_normalize.rb
index 3f359a0ff3..ef3f2ba6f1 100644
--- a/lib/unicode_normalize.rb
+++ b/lib/unicode_normalize.rb
@@ -7,18 +7,6 @@
# additions to class String for Unicode normalization
#++
class String
-
- # :call-seq:
- # str.unicode_normalize!(form=:nfc)
- #
- # Destructive version of String#unicode_normalize, doing Unicode
- # normalization in place.
- #
- def unicode_normalize!(form = :nfc)
- require 'unicode_normalize/normalize.rb'
- unicode_normalize! form
- end
-
# :call-seq:
# str.unicode_normalized?(form=:nfc)
#
diff --git a/lib/unicode_normalize/normalize.rb b/lib/unicode_normalize/normalize.rb
index 8bfbbfeea5..4302c6a975 100644
--- a/lib/unicode_normalize/normalize.rb
+++ b/lib/unicode_normalize/normalize.rb
@@ -160,10 +160,6 @@ module UnicodeNormalize # :nodoc:
end # module
class String # :nodoc:
- def unicode_normalize!(form = :nfc)
- replace(UnicodeNormalize.normalize(self, form))
- end
-
def unicode_normalized?(form = :nfc)
UnicodeNormalize.normalized?(self, form)
end
diff --git a/string.c b/string.c
index 6b8f2eaf6f..0d8b62780b 100644
--- a/string.c
+++ b/string.c
@@ -9615,7 +9615,6 @@ rb_str_unicode_normalize(int argc, VALUE *argv, VALUE str)
rb_require("unicode_normalize/normalize.rb");
UnicodeNormalizeRequired = 1;
}
- /* return rb_funcall2(str, id_unicode_normalize, argc, argv); */
if (argc==0)
return rb_funcall(mUnicodeNormalize, id_normalize, 1, str);
else if (argc==1)
@@ -9624,6 +9623,28 @@ rb_str_unicode_normalize(int argc, VALUE *argv, VALUE str)
rb_raise(rb_eArgError, "too many arguments to unicode_normalize");
}
+/*
+ * call-seq:
+ * str.unicode_normalize!(form=:nfc)
+ *
+ * Destructive version of String#unicode_normalize, doing Unicode
+ * normalization in place.
+ */
+static VALUE
+rb_str_unicode_normalize_bang(int argc, VALUE *argv, VALUE str)
+{
+ if (!UnicodeNormalizeRequired) {
+ rb_require("unicode_normalize/normalize.rb");
+ UnicodeNormalizeRequired = 1;
+ }
+ if (argc==0)
+ return rb_str_replace(str, rb_funcall(mUnicodeNormalize, id_normalize, 1, str));
+ else if (argc==1)
+ return rb_str_replace(str, rb_funcall(mUnicodeNormalize, id_normalize, 2, str, argv[0]));
+ else
+ rb_raise(rb_eArgError, "too many arguments to unicode_normalize!");
+}
+
/**********************************************************************
* Document-class: Symbol
*
@@ -10277,6 +10298,7 @@ Init_String(void)
id_normalize = rb_intern("normalize");
rb_define_method(rb_cString, "unicode_normalize", rb_str_unicode_normalize, -1);
+ rb_define_method(rb_cString, "unicode_normalize!", rb_str_unicode_normalize_bang, -1);
rb_fs = Qnil;
rb_define_hooked_variable("$;", &rb_fs, 0, rb_fs_setter);