Browse Source

Lua : String fixes

This adds the lastIndexOf method, and straightens up the lua "string"
extern.
Justin Donaldson 10 years ago
parent
commit
21974abfe8
2 changed files with 15 additions and 3 deletions
  1. 5 1
      std/lua/StringTools.hx
  2. 10 2
      std/lua/_std/String.hx

+ 5 - 1
std/lua/StringTools.hx

@@ -1,4 +1,8 @@
 package lua;
+/**
+  These are all externs for the base Lua "string" class.  Note that all
+  relevant indexes are "1" based.
+ **/
 @:native("_G.string") 
 extern class StringTools {
 	public static function len(str:String) : Int;
@@ -8,6 +12,6 @@ extern class StringTools {
 	public static function byte(str:String, index:Int) : Int;
 
 	@:overload(function(pos:Int):String{})
-	public static function substr(str:String, pos:Int, len:Int) : String;
 	//TODO: The rest
 }
+

+ 10 - 2
std/lua/_std/String.hx

@@ -35,7 +35,13 @@ extern class String {
 		return lua.StringTools.find(this, str, startIndex, str.length, true);
 	}
 	inline function lastIndexOf( str : String, ?startIndex : Int ) : Int {
-		return 0;
+		var i = 0;
+		var ret = 0;
+		while(i != null){
+			i = this.indexOf(str, i);
+			if (i != null) ret = i;
+		}
+		return ret-1;
 	}
 	inline function split( delimiter : String ) : Array<String> {
 		return [];
@@ -61,8 +67,10 @@ extern class String {
 	}
 
 	inline function substr( pos : Int, ?len : Int ) : String {
-		return lua.StringTools.substr(this, pos, len);
+		if (len == null || len > pos + this.length) len = this.length;
+		return lua.StringTools.sub(this, pos + 1, pos+len + 1);
 	}
 
 	static function fromCharCode( code : Int ) : String;
 }
+