private StringBuffer content = null; ///< during XML parsing, this holds partially-read character data; null otherwise
private int content_start = 0; ///< line number of the first line of <tt>content</tt>
private int startLine = -1; ///< the line number that this element starts on
- private final Res r; ///< the resource we came from
+ private final Stream r; ///< the resource we came from
// Static data/methods ///////////////////////////////////////////////////////////////////
- public static Template getTemplate(Res r) throws JSExn {
+ public static Template getTemplate(Stream r) throws JSExn {
try {
r = r.addExtension(".xwt");
if (r.t != null) return r.t;
}
}
- public static Res resolveStringToResource(String str, XWT xwt, boolean permitAbsolute) throws JSExn {
+ public static Stream resolveStringToResource(String str, XWT xwt, boolean permitAbsolute) throws JSExn {
// URL
if (str.indexOf("://") != -1) {
- if (permitAbsolute) return (Res)xwt.url2res(str);
+ if (permitAbsolute) return (Stream)xwt.url2res(str);
throw new JSExn("absolute URL " + str + " not permitted here");
}
// root-relative
- Res ret = xwt.rr;
+ Stream ret = xwt.rr;
while(str.indexOf('.') != -1) {
String path = str.substring(0, str.indexOf('.'));
str = str.substring(str.indexOf('.') + 1);
- ret = (Res)ret.get(path);
+ ret = (Stream)ret.get(path);
}
- ret = (Res)ret.get(str);
+ ret = (Stream)ret.get(str);
return ret;
}
// Methods to apply templates ////////////////////////////////////////////////////////
- private Template(Res r) {
+ private Template(Stream r) {
this.r = r;
String f = r.toString();
if (f != null && !f.equals(""))
case "boolean": objects.setElementAt(content.getBuf()[0] == '1' ? Boolean.TRUE : Boolean.FALSE, objects.size() - 1);
case "string": objects.setElementAt(new String(content.getBuf(), 0, content.size()), objects.size() - 1);
case "double": objects.setElementAt(new Double(new String(content.getBuf(), 0, content.size())), objects.size() - 1);
- case "base64": objects.setElementAt(new Res.ByteArray(Base64.decode(new String(content.getBuf(), 0, content.size())),
+ case "base64": objects.setElementAt(new Stream.ByteArray(Base64.decode(new String(content.getBuf(), 0, content.size())),
null), objects.size() - 1);
case "name": objects.addElement(new String(content.getBuf(), 0, content.size()));
case "value": if ("".equals(objects.lastElement()))
sb.append(((Boolean)o).booleanValue() ? "1" : "0");
sb.append("</boolean></value>\n");
- } else if (o instanceof Res) {
+ } else if (o instanceof Stream) {
try {
sb.append(" <value><base64>\n");
- InputStream is = ((Res)o).getInputStream();
+ InputStream is = ((Stream)o).getInputStream();
byte[] buf = new byte[54];
while(true) {
int numread = is.read(buf, 0, 54);
/** Singleton class that provides all functionality in the xwt.* namespace */
public final class XWT extends JS {
- public final Res rr;
- public XWT(Res rr) { this.rr = rr; }
+ public final Stream rr;
+ public XWT(Stream rr) { this.rr = rr; }
private Cache subCache = new Cache(20);
private Sub getSub(String s) {
if (a instanceof Box) throw new JSExn("can't graft onto Boxes");
if (a instanceof String) throw new JSExn("can't graft onto Strings");
if (a instanceof Number) throw new JSExn("can't graft onto Numbers");
- if (a instanceof Res) return new Res.Graft((Res)a, b, c);
+ if (a instanceof Stream) return new Stream.Graft((Stream)a, b, c);
// FEATURE: grafting onto JS
throw new JSExn("cannot graft onto "+a.getClass());
//#end
case 1:
//#switch(name)
case "ui.browser": Platform.newBrowserWindow((String)a); return null;
- case "clone": return new XWT((Res)a);
- case "stream.unzip": return new Res.Zip((Res)a);
- case "stream.uncab": return new Res.Cab((Res)a);
- case "stream.cache": try { return new Res.CachedRes((Res)a, "resources", true); }
- catch (Res.NotCacheableException e) { throw new JSExn("this resource cannot be cached"); }
+ case "clone": return new XWT((Stream)a);
+ case "stream.unzip": return new Stream.Zip((Stream)a);
+ case "stream.uncab": return new Stream.Cab((Stream)a);
+ case "stream.cache": try { return new Stream.CachedStream((Stream)a, "resources", true); }
+ catch (Stream.NotCacheableException e) { throw new JSExn("this resource cannot be cached"); }
case "stream.url": return url2res((String)a);
case "thread.sleep": sleep(JS.toInt(a)); return null;
case "log.debug": JS.log(this, a== null ? "**null**" : a.toString()); return null;
break;
case 2:
//#switch(name)
- case "stream.watch": return new Res.ProgressWatcher((Res)a, (JSFunction)b);
+ case "stream.watch": return new Stream.ProgressWatcher((Stream)a, (JSFunction)b);
case "apply":
- if (b instanceof Res) Template.getTemplate((Res)b).apply((Box)a, XWT.this);
+ if (b instanceof Stream) Template.getTemplate((Stream)b).apply((Box)a, XWT.this);
else {
JS to = (JS)a, from = (JS)b; Object k;
for (Enumeration e = from.keys(); e.hasMoreElements();) {
throw new JSExn("invalid number of arguments for xwt object method "+name+"()");
}
- public Res url2res(String url) throws JSExn {
- if (url.startsWith("http://")) return new Res.HTTP(url);
- else if (url.startsWith("https://")) return new Res.HTTP(url);
- else if (url.startsWith("data:")) return new Res.ByteArray(Base64.decode(url.substring(5)), null);
- else if (url.startsWith("utf8:")) return new Res.ByteArray(url.substring(5).getBytes(), null);
+ public Stream url2res(String url) throws JSExn {
+ if (url.startsWith("http://")) return new Stream.HTTP(url);
+ else if (url.startsWith("https://")) return new Stream.HTTP(url);
+ else if (url.startsWith("data:")) return new Stream.ByteArray(Base64.decode(url.substring(5)), null);
+ else if (url.startsWith("utf8:")) return new Stream.ByteArray(url.substring(5).getBytes(), null);
else throw new JSExn("invalid resource specifier " + url);
// FIXME support file:// via dialog boxes
}