From efbee12c641e5cc92ed535f6d80ad5cf6637ae0e Mon Sep 17 00:00:00 2001 From: david Date: Fri, 30 Jan 2004 07:42:03 +0000 Subject: [PATCH] 2003/11/22 07:48:52 darcs-hash:20040130074203-0c9ea-359caceab2f75db12ffa206afd078d153486694f.gz --- src/org/xwt/Template.java | 22 +++++++++++++++------- src/org/xwt/util/XML.java | 22 ++++++++++++---------- 2 files changed, 27 insertions(+), 17 deletions(-) diff --git a/src/org/xwt/Template.java b/src/org/xwt/Template.java index a4cf686..2921cde 100644 --- a/src/org/xwt/Template.java +++ b/src/org/xwt/Template.java @@ -58,7 +58,8 @@ public class Template { r = r.addExtension(".xwt"); if (r.t != null) return r.t; r.t = new Template(r); - new TemplateHelper().parseit(r.getInputStream(), r.t); + try { new TemplateHelper().parseit(r.getInputStream(), r.t); } + catch (FileNotFoundException e) { Log.log(Template.class, "template not found: "+r); } return r.t; } catch (Exception e) { if (Log.on) Log.log(r.t == null ? "null" : r.t.fileName, e); @@ -212,16 +213,23 @@ public class Template { private void processBodyElement(XML.Element c) { Hash h = new Hash(c.len * 2, 3); + + // WARNING: c.keys.length != c.len; USE c.len for(int i=0; i i; i++) if (n.equals(current.keys[i])) throw new WFCException( - "attribute name '"+n+"' may not appear more than once in the same element tag", getLine(), getCol() - ); - // find attribute uri if (p == null) { - u = current.uri; + for (Element e = current; e != null && u == null; e = e.prev) { u = e.uri; } } else { - for (Element e = current; e != null && u == null; e = e.prev) { - u = (String)e.urimap.get(p); - } + for (Element e = current; e != null && u == null; e = e.prev) { u = (String)e.urimap.get(p); } if (u == null) current.addError(new NCException("undefined attribute prefix '"+current.prefix+"'", getLine(), getCol())); } + // check to see if attribute is a repeat + for (int i=0; current.len > i; i++) if (n.equals(current.keys[i]) && u.equals(current.uris[i])) throw new WFCException( + "attribute name '"+n+"' may not appear more than once in the same element tag", getLine(), getCol() + ); + // add attribute to the attribute arrays if (current.len == current.keys.length) current.morekeys(); current.keys[current.len] = n; @@ -851,7 +849,11 @@ public abstract class XML /** empty out the arrays */ void clear() { - for (int i=0; len > i; i++) { keys[i] = null; vals[i] = null; uris[i] = null; }; len = 0; + if (keys.length != vals.length || vals.length != uris.length) { + keys = new String[10]; vals = new String[10]; uris = new String[10]; + } else { + for (int i=0; keys.length > i; i++) { keys[i] = null; vals[i] = null; uris[i] = null; }; len = 0; + } errors = new XMLException[] {}; } -- 1.7.10.4