From 6600648d5611097d28af98add9f40d0273030e16 Mon Sep 17 00:00:00 2001 From: brian Date: Fri, 30 Jan 2004 07:04:12 +0000 Subject: [PATCH] 2003/07/28 23:17:00 darcs-hash:20040130070412-aa32f-9164d5345f54841cff4bc0c5ce7738fdc26fa830.gz --- src/org/xwt/XWT.java | 2 ++ src/org/xwt/js/GlobalScopeImpl.java | 12 ++++++++++++ src/org/xwt/js/Internal.java | 16 +++++++++++++--- 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/src/org/xwt/XWT.java b/src/org/xwt/XWT.java index d7fccf4..6055a2d 100644 --- a/src/org/xwt/XWT.java +++ b/src/org/xwt/XWT.java @@ -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); } diff --git a/src/org/xwt/js/GlobalScopeImpl.java b/src/org/xwt/js/GlobalScopeImpl.java index 899b672..5d46c83 100644 --- a/src/org/xwt/js/GlobalScopeImpl.java +++ b/src/org/xwt/js/GlobalScopeImpl.java @@ -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"); + } } diff --git a/src/org/xwt/js/Internal.java b/src/org/xwt/js/Internal.java index 93aae21..cf19716 100644 --- a/src/org/xwt/js/Internal.java +++ b/src/org/xwt/js/Internal.java @@ -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; } -- 1.7.10.4