ref: ac2b69008a453fb8da4116636da2587ceb03db63
parent: 746a147dbd5a08af94388941ee11c87a33f15cb4
	author: Ori Bernstein <ori@eigenstate.org>
	date: Mon Dec 16 13:28:14 EST 2013
	
Make strsplit() use strfind()
    This allows us to use any string as a delimiter.
--- a/libstd/strsplit.myr
+++ b/libstd/strsplit.myr
@@ -2,7 +2,9 @@
use "die.use"
use "extremum.use"
use "fmt.use"
+use "option.use"
use "slpush.use"
+use "strfind.use"
use "sys.use"
use "types.use"
@@ -11,20 +13,22 @@
;;
 const strsplit = {s, delim- var i
var last
var sp
sp = [][:]
last = 0
- assert(delim.len == 1, "FIXME: We should support strings as delimiters")
- for i = 0; i < s.len; i++
- if s[i] == delim[0]
- sp = slpush(sp, s[last:i])
- last = i + 1
+ while true
+ match strfind(s, delim)
+ | `Some i:
+ sp = slpush(sp, s[:i])
+ s = s[i + delim.len:]
+ | `None:
+ goto donesplit
;;
;;
- sp = slpush(sp, s[last:i])
+:donesplit
+ sp = slpush(sp, s[:])
-> sp
}
--- a/test/data/strfind-expected
+++ b/test/data/strfind-expected
@@ -1,4 +1,6 @@
No match
+No match
+No match
Found 0
Found 0
No match
--- a/test/data/strsplit-expected
+++ b/test/data/strsplit-expected
@@ -1,4 +1,13 @@
-a
-b
-c
-d
+"a"
+"b"
+"c"
+"d"
+"a"
+""
+"b"
+"c"
+""
+"d"
+"a--b"
+"b--c"
+"c-d--d"
--- a/test/strsplit.myr
+++ b/test/strsplit.myr
@@ -6,6 +6,16 @@
 	sp = std.strsplit("a,b,c,d", ",")for i = 0; i < sp.len; i++
-		std.put("%s\n", sp[i])+		std.put("\"%s\"\n", sp[i])+ ;;
+
+	sp = std.strsplit("a,,b,c,,d", ",")+ for i = 0; i < sp.len; i++
+		std.put("\"%s\"\n", sp[i])+ ;;
+
+	sp = std.strsplit("a--b---b--c---c-d--d", "---")+ for i = 0; i < sp.len; i++
+		std.put("\"%s\"\n", sp[i]);;
}
--
⑨