2003/07/28 23:17:00
authorbrian <brian@xwt.org>
Fri, 30 Jan 2004 07:04:12 +0000 (07:04 +0000)
committerbrian <brian@xwt.org>
Fri, 30 Jan 2004 07:04:12 +0000 (07:04 +0000)
darcs-hash:20040130070412-aa32f-9164d5345f54841cff4bc0c5ce7738fdc26fa830.gz

src/org/xwt/XWT.java
src/org/xwt/js/GlobalScopeImpl.java
src/org/xwt/js/Internal.java

index d7fccf4..6055a2d 100644 (file)
@@ -373,6 +373,8 @@ public final class XWT extends JS.Obj {
             put("decodeURIComponent",gs.get("decodeURIComponent"));
             put("encodeURI",gs.get("encodeURI"));
             put("encodeURIComponent",gs.get("encodeURIComponent"));
+            put("escape",gs.get("escape"));
+            put("unescape",gs.get("unescape"));
             put("fromCharCode",gs.get("stringFromCharCode"));
             setSeal(true);
         }
index 899b672..5d46c83 100644 (file)
@@ -38,6 +38,12 @@ class GlobalScopeImpl extends JS.Scope {
         } else if(method.equals("encodeURIComponent")) {
             if(checkOnly) return Boolean.TRUE;
             return encodeURIComponent(args);
+        } else if(method.equals("escape")) {
+            if(checkOnly) return Boolean.TRUE;
+            return escape(args);
+        } else if(method.equals("unescape")) {
+            if(checkOnly) return Boolean.TRUE;
+            return unescape(args);
         } else if(method.equals("stringFromCharCode")) {
             if(checkOnly) return Boolean.TRUE;
             return stringFromCharCode(args);
@@ -126,4 +132,10 @@ class GlobalScopeImpl extends JS.Scope {
     private Object encodeURIComponent(JS.Array args) {
         throw new JS.Exn("encodeURIComponent is unimplemented");
     }
+    private Object escape(JS.Array args) {
+        throw new JS.Exn("escape is unimplemented");
+    }
+    private Object unescape(JS.Array args) {
+        throw new JS.Exn("unescape is unimplemented");
+    }
 }
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;
         }