[macruby-changes] [3719] MacRuby/branches/icu/string.c
source_changes at macosforge.org
source_changes at macosforge.org
Tue Mar 9 17:28:53 PST 2010
Revision: 3719
http://trac.macosforge.org/projects/ruby/changeset/3719
Author: lsansonetti at apple.com
Date: 2010-03-09 17:28:51 -0800 (Tue, 09 Mar 2010)
Log Message:
-----------
implemented awk style #split
Modified Paths:
--------------
MacRuby/branches/icu/string.c
Modified: MacRuby/branches/icu/string.c
===================================================================
--- MacRuby/branches/icu/string.c 2010-03-10 00:43:25 UTC (rev 3718)
+++ MacRuby/branches/icu/string.c 2010-03-10 01:28:51 UTC (rev 3719)
@@ -1242,13 +1242,6 @@
}
}
-static VALUE
-str_trim(VALUE str)
-{
- // TODO
- return str;
-}
-
//----------------------------------------------
// Functions called by MacRuby
@@ -2708,6 +2701,8 @@
* "1,2,,3,4,,".split(',', -4) #=> ["1", "2", "", "3", "4", "", ""]
*/
+static VALUE str_strip(VALUE str, int direction);
+
static VALUE
rstr_split(VALUE str, SEL sel, int argc, VALUE *argv)
{
@@ -2729,6 +2724,10 @@
}
VALUE result = rb_ary_new();
+ if (len == 0) {
+ return result;
+ }
+
bool awk_split = false, spat_string = false;
long spat_len = 0;
if (NIL_P(spat)) {
@@ -2774,17 +2773,37 @@
if (pos == -1) {
break;
}
- VALUE substr = rstr_substr(str, beg, pos - beg);
- if (!awk_split || rb_str_chars_len(str_trim(substr)) > 0) {
- rb_ary_push(result, substr);
- }
+ rb_ary_push(result, rstr_substr(str, beg, pos - beg));
beg = pos + 1;
}
while (limit == Qnil || --lim > 1);
}
}
else {
- abort(); // TODO
+ UChar *chars = NULL;
+ long chars_len = 0;
+ bool need_free = false;
+
+ rb_str_get_uchars(str, &chars, &chars_len, &need_free);
+
+ for (long i = 0; i < chars_len; i++) {
+ UChar c = chars[i];
+ if (c == ' ' || c == '\t' || c == '\n') {
+ VALUE substr = rstr_substr(str, beg, i - beg);
+ str_strip(substr, 0);
+ if (rb_str_chars_len(substr) > 0) {
+ rb_ary_push(result, substr);
+ }
+ beg = i + 1;
+ }
+ if (limit != Qnil && --lim <= 0) {
+ break;
+ }
+ }
+
+ if (need_free) {
+ free(chars);
+ }
}
}
else {
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20100309/6f30f7b0/attachment.html>
More information about the macruby-changes
mailing list