2003/07/28 23:17:00
[org.ibex.core.git] / src / org / xwt / js / Internal.java
index 93aae21..cf19716 100644 (file)
@@ -24,7 +24,7 @@ class Internal {
         } else if(o instanceof Boolean) {
             // No methods for Booleans
         }
-        s = o.toString();
+        s = JS.toString(o);
         int slength = s.length();
         if(method.equals("substring")) {
             int a = alength >= 1 ? JS.toInt(args.elementAt(0)) : 0;
@@ -36,6 +36,16 @@ class Internal {
             if(a > b) { int tmp = a; a = b; b = tmp; }
             return s.substring(a,b);
         }
+        if(method.equals("substr")) {
+            int start = alength >= 1 ? JS.toInt(args.elementAt(0)) : 0;
+            int len = alength >= 2 ? JS.toInt(args.elementAt(1)) : Integer.MAX_VALUE;
+            if(start < 0) start = slength + start;
+            if(start < 0) start = 0;
+            if(len < 0) len = 0;
+            if(len > slength - start) len = slength - start;
+            if(len <= 0) return "";
+            return s.substring(start,start+len);
+        }
         if(method.equals("charAt")) {
             int p = alength >= 1 ? JS.toInt(args.elementAt(0)) : 0;
             if(p < 0 || p >= slength) return "";
@@ -86,7 +96,7 @@ class Internal {
         }
         if(method.equals("split")){
             return Regexp.stringSplit(s,args);
-        }
+        } 
         if(method.equals("toLowerCase")) return s.toLowerCase();
         if(method.equals("toUpperCase")) return s.toUpperCase();
         if(method.equals("toString")) return s;
@@ -112,7 +122,7 @@ class Internal {
             if(key.equals("substring") || key.equals("charAt") || key.equals("charCodeAt") || key.equals("concat") ||
                 key.equals("indexOf") || key.equals("lastIndexOf") || key.equals("match") || key.equals("replace") ||
                 key.equals("seatch") || key.equals("slice") || key.equals("split") || key.equals("toLowerCase") ||
-                key.equals("toUpperCase") || key.equals("toString")
+                key.equals("toUpperCase") || key.equals("toString") || key.equals("substr")
             )
                 returnCallable = true;
         }