[macruby-changes] [245] MacRuby/trunk/string.c

source_changes at macosforge.org source_changes at macosforge.org
Mon Jun 2 18:06:17 PDT 2008


Revision: 245
          http://trac.macosforge.org/projects/ruby/changeset/245
Author:   lsansonetti at apple.com
Date:     2008-06-02 18:06:16 -0700 (Mon, 02 Jun 2008)

Log Message:
-----------
introduce String#transform, to apply ICU transformations to a given string

Modified Paths:
--------------
    MacRuby/trunk/string.c

Modified: MacRuby/trunk/string.c
===================================================================
--- MacRuby/trunk/string.c	2008-06-02 23:49:01 UTC (rev 244)
+++ MacRuby/trunk/string.c	2008-06-03 01:06:16 UTC (rev 245)
@@ -8079,6 +8079,37 @@
 #endif
 }
 
+#if WITH_OBJC
+static VALUE
+rb_str_transform_bang(VALUE str, VALUE transform_name)
+{
+    CFRange range;
+
+    rb_str_modify(str);
+    StringValue(transform_name);
+    
+    range = CFRangeMake(0, RSTRING_CLEN(str));
+
+    if (!CFStringTransform((CFMutableStringRef)str, 
+	&range,
+	(CFStringRef)transform_name,
+       	false))
+	rb_raise(rb_eRuntimeError, "cannot apply transformation `%s' to `%s'",
+		RSTRING_CPTR(transform_name), RSTRING_CPTR(str));
+
+    return range.length == kCFNotFound ? Qnil : str;
+}
+
+static VALUE
+rb_str_transform(VALUE str, VALUE transform_name)
+{
+    str = rb_str_dup(str);
+    rb_str_transform_bang(str, transform_name);
+    return str;
+}
+
+#endif
+
 /**********************************************************************
  * Document-class: Symbol
  *
@@ -8630,6 +8661,11 @@
     rb_define_method(rb_cString, "valid_encoding?", rb_str_valid_encoding_p, 0);
     rb_define_method(rb_cString, "ascii_only?", rb_str_is_ascii_only_p, 0);
 
+#if WITH_OBJC
+    rb_define_method(rb_cString, "transform", rb_str_transform, 1);
+    rb_define_method(rb_cString, "transform!", rb_str_transform_bang, 1);
+#endif
+
     id_to_s = rb_intern("to_s");
 
     rb_fs = Qnil;

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/macruby-changes/attachments/20080602/b944b5f0/attachment-0001.htm 


More information about the macruby-changes mailing list