X-Git-Url: http://git.megacz.com/?p=org.ibex.xt-crawshaw.git;a=blobdiff_plain;f=src%2Fjava%2Forg%2Fibex%2Fxt%2FTemplate.java;fp=src%2Fjava%2Forg%2Fibex%2Fxt%2FTemplate.java;h=4ab16d65dba427acd0a2eef04b15bbeac4129a8f;hp=ac29e8f4dc6230c357b966612ae74b528677956a;hb=d1d2ce9951e43cd3e9253cf4f4b92dc2338b057d;hpb=59e1d7b4bf7843e12351004b64d6667abefd04c7 diff --git a/src/java/org/ibex/xt/Template.java b/src/java/org/ibex/xt/Template.java index ac29e8f..4ab16d6 100644 --- a/src/java/org/ibex/xt/Template.java +++ b/src/java/org/ibex/xt/Template.java @@ -41,7 +41,9 @@ public class Template extends JSElement { //throw new JSElement.Exn("Unknown XT library: "+uri); } else if (uri.startsWith("local:")) { - Template t = parse(s.getLocalPath() + uri.substring(6), s); + // merge a new template into this tree + String path = uri.substring(6) + e.getLocalName() + ".xt"; + Template t = parse(s.getLocalPath() + path, s); List c = e.getChildren(); if (c.size() > 0) { @@ -55,8 +57,15 @@ public class Template extends JSElement { e.getChildren().clear(); } - // merge original attributes with replacement template - e = new JSElement.Merge(t, e); + XML.Element merged = new JSElement.Merge(t, e); + + // remap the parent of the original element + if (e.getParent() != null) { + List ch = e.getParent().getChildren(); + ch.set(ch.indexOf(e), merged); + } + + return wrap(merged, s); } XML.Attributes a = e.getAttributes(); @@ -78,12 +87,14 @@ public class Template extends JSElement { } /** Returns the first Template.Children child found. */ - private static Template.Children findPlaceholder(XML.Element e) { - if (e instanceof Template.Children) return (Template.Children)e; + private static XML.Element findPlaceholder(XML.Element e) { + if ("http://xt.ibex.org/".equals(e.getUri()) && "children".equals(e.getLocalName())) + return e; + List c = e.getChildren(); for (int i=0; i < c.size(); i++) { if (!(c.get(i) instanceof XML.Element)) continue; - Template.Children ret = findPlaceholder((XML.Element)c.get(i)); + XML.Element ret = findPlaceholder((XML.Element)c.get(i)); if (ret != null) return ret; } return null;