Browse Source

Lua: Provide a better working string.split implementation

Justin Donaldson 10 years ago
parent
commit
60fd364aab
1 changed files with 12 additions and 5 deletions
  1. 12 5
      std/lua/_std/String.hx

+ 12 - 5
std/lua/_std/String.hx

@@ -20,6 +20,10 @@
  * DEALINGS IN THE SOFTWARE.
  */
 
+import lua.Lua;
+import lua.Table;
+import lua.Boot;
+
 @:coreApi
 class String {
 	public var length(default,null) : Int;
@@ -47,9 +51,10 @@ class String {
 	public function indexOf( str : String, ?startIndex : Int ) : Int {
 		if (startIndex == null) startIndex = 1;
 		else startIndex += 1;
-		var r = lua.StringTools.find(this, str, startIndex, str.length, true);
+		var r = lua.StringTools.find(this, str, startIndex, true);
 		return untyped r && (r - 1) || (-1);
 	}
+
 	public function lastIndexOf( str : String, ?startIndex : Int ) : Int {
 		var i = 0;
 		var ret = -1;
@@ -60,12 +65,14 @@ class String {
 			ret = p;
 		}
 	}
+
 	public function split( delimiter : String ) : Array<String> {
-		var ret : Array<String> = [];
-		var qd =  lua.Boot.patternQuote(delimiter);
-		lua.StringTools.gsub(this, qd, function(c) ret.push(c));
-		return ret;
+		var captures = (delimiter != "" ) ?
+			  "(.-)(" + Boot.patternQuote(delimiter) + ")"
+			: "(.)";
+		return Boot.luaIteratorToArray(lua.StringTools.gmatch(this, captures));
 	}
+
 	public function toString() : String {
 		return this;
 	}