- }
- JS.Callable callback = args.elementAt(args.length() - 1) instanceof JS.Callable ?
- (JS.Callable)args.elementAt(args.length() - 1) : null;
- Template.retheme(callback);
- return null;
- }});
-
- super.put("println", new JS.Callable() { public Object call(JS.Array args) throws JS.Exn {
- if (args.length() != 1) return null;
- if (Log.on) Log.logJS(this, (args.elementAt(0) == null ? "**null**" : args.elementAt(0).toString()));
- return null;
- }});
-
- super.put("date", new JS.Callable() { public Object call(JS.Array args) throws JS.Exn {
- Log.log(XWT.class, "date not implemented");
- //throw new Error("not implemented");
- return null;
- }});
-
- super.put("regexp", new JS.Callable() { public Object call(JS.Array args) throws JS.Exn {
- //throw new Error("not implemented");
- Log.log(XWT.class, "regexp not implemented");
- return null;
- }});
-
- super.put("listfonts", new JS.Callable() { public Object call(JS.Array args) throws JS.Exn {
- Object[] fonts = Platform.listFonts();
- JS.Array ret = new JS.Array();
- for(int i=0; i<fonts.length; i++) ret.addElement(fonts[i]);
- return ret;
- }});
-
- super.put("xmlrpc", new JS.Callable() { public Object call(JS.Array args) throws JS.Exn {
- if (args.length() != 1 || args.elementAt(0) == null) return null;
- return new XMLRPC(args.elementAt(0).toString(), "");
- }});
-
- super.put("soap", new JS.Callable() { public Object call(JS.Array args) throws JS.Exn {
- if (args.length() == 1 && args.elementAt(0) != null) return new SOAP(args.elementAt(0).toString(), "", null, null);
- else if (args.length() == 2 && args.elementAt(0) != null && args.elementAt(1) != null)
- return new SOAP(args.elementAt(0).toString(), "", args.elementAt(1).toString(), null);
- else if (args.length() == 3 && args.elementAt(0) != null && args.elementAt(1) != null && args.elementAt(2) != null)
- return new SOAP(args.elementAt(0).toString(), "", args.elementAt(1).toString(), args.elementAt(2).toString());
- else return null;
- }});
-
- super.put("textwidth", new JS.Callable() { public Object call(JS.Array args) throws JS.Exn {
- if (args.length() < 1 || args.length() > 2) return null;
- if (args.elementAt(0) == null || (args.length() == 2 && args.elementAt(1) == null)) return null;
- String font = args.length() == 1 ? Platform.getDefaultFont() : args.elementAt(0).toString();
- String text = args.length() == 1 ? args.elementAt(0).toString() : args.elementAt(1).toString();
- XWF xwf = XWF.getXWF(font);
- if (xwf == null) return new Integer(Platform.stringWidth(font, text));
- else return new Integer(xwf.stringWidth(text));
- }});
-
- super.put("textheight", new JS.Callable() { public Object call(JS.Array args) throws JS.Exn {
- if (args.length() > 1) return null;
- if (args.length() == 1 && args.elementAt(0) == null) return null;
- String font = args.length() == 0 || args.elementAt(0) == null ? Platform.getDefaultFont() : args.elementAt(0).toString();
- XWF xwf = XWF.getXWF(font);
- if (xwf == null) return new Integer(Platform.getMaxAscent(font) + Platform.getMaxDescent(font));
- else return new Integer(xwf.getMaxAscent() + xwf.getMaxDescent());
- }});
-
- super.put("newBox", new JS.Callable() { public Object call(JS.Array args) throws JS.Exn {
- if (args.length() > 0) Log.log(XWT.class, "DEPRECATED: xwt.newBox() with multiple arguments is deprecated; use xwt.newBox().apply()");
- JS.Callable callback = null;
- for(int i=1; i<args.length(); i++)
- if (args.elementAt(i) instanceof JS.Callable && callback == null)
- callback = (JS.Callable)args.elementAt(i);
- Box ret = new Box(args.length() == 0 || args.elementAt(0) == null ? "box" : args.elementAt(0).toString(),
- Template.defaultImportList, callback);
- for(int i=1; i<args.length(); i++)
- if (args.elementAt(i) instanceof Box)
- ret.super.put(ret.numChildren(), (Box)args.elementAt(i));
- for(int i=1; i<args.length(); i++)
- if (args.elementAt(i) instanceof JS && !(args.elementAt(i) instanceof Box) && !(args.elementAt(i) instanceof JS.Callable)) {
- JS s = (JS)args.elementAt(i);
- Object[] keys = s.keys();
- for(int j=0; j<keys.length; j++) ret.super.put(keys[j].toString(), s.get(keys[j].toString()));
- }
- return ret;
- }});
+ case "thread.sleep": sleep(JS.toInt(a)); return null;
+ case "regexp": return new JSRegexp(a, null);
+ case "net.rpc.xml": return new XMLRPC((String)a, "");
+ case "crypto.rsa": /* FEATURE */ return null;
+ case "crypto.md5": /* FEATURE */ return null;
+ case "crypto.sha1": /* FEATURE */ return null;
+ case "crypto.rc4": /* FEATURE */ return null;
+ case "stream.parse.html": throw new JSExn("not implemented yet"); //return null;
+ case "stream.parse.xml": new XMLHelper((JS)b).doParse((JS)a); return null;
+ // FIXME backgrounding
+ case "stream.parse.utf8": try { return new String(InputStreamToByteArray.convert(Stream.getInputStream(a))); }
+ catch (Exception e) { Log.warn(this, e); }
+ //#end
+ break;
+ case 2:
+ //#switch(name)
+ case "stream.watch": return new Stream.ProgressWatcher((Stream)a, (JS)b);
+ case "regexp": return new JSRegexp(a, b);
+ //#end
+ break;
+ }
+ } catch (RuntimeException e) {
+ // FIXME: maybe JSExn should take a second argument, Exception
+ Log.warn(this, "xwt."+name+"() threw: " + e);
+ throw new JSExn("invalid argument for xwt object method "+name+"()");
+ }