X-Git-Url: http://dolda2000.com/gitweb/?p=jsvc.git;a=blobdiff_plain;f=src%2Fdolda%2Fjsvc%2Fnext%2FDocBuffer.java;h=b2d1f0a15a7972f2b4d31ee76a966a8275f12a69;hp=432d8171ba7491844c1d855d004fc70454c0bd42;hb=6e40b32ee7b4e65f600f6aeb25838d6d40e76838;hpb=3de0fa23dedbf36f814f1293e59aa8b8c4eef8a4 diff --git a/src/dolda/jsvc/next/DocBuffer.java b/src/dolda/jsvc/next/DocBuffer.java index 432d817..b2d1f0a 100644 --- a/src/dolda/jsvc/next/DocBuffer.java +++ b/src/dolda/jsvc/next/DocBuffer.java @@ -19,7 +19,8 @@ public class DocBuffer { private Node findcursor(Node c, String name) { if(c instanceof Element) { Element el = (Element)c; - if(el.getNamespaceURI().equals(ns) && el.getTagName().equals("cursor") && el.getAttributeNS(ns, "name").equals(name)) + String ns = el.getNamespaceURI(); + if((ns != null) && ns.equals(DocBuffer.ns) && el.getTagName().equals("cursor") && el.getAttributeNS(null, "name").equals(name)) return(c); } for(Node n = c.getFirstChild(); n != null; n = n.getNextSibling()) { @@ -45,12 +46,12 @@ public class DocBuffer { Node c = cursor(cursor); if(c == null) throw(new RuntimeException("No such cursor: `" + cursor + "'")); - c.getParentNode().insertBefore(c, doc.importNode(n, true)); + c.getParentNode().insertBefore(doc.importNode(n, true), c); } public Element makecursor(String name) { Element el = doc.createElementNS(ns, "cursor"); - Attr a = doc.createAttributeNS(ns, "name"); + Attr a = doc.createAttributeNS(null, "name"); a.setValue(name); el.setAttributeNodeNS(a); return(el); @@ -70,4 +71,30 @@ public class DocBuffer { public Text text(String text) { return(doc.createTextNode(text)); } + + public void finalise() { + Node n = doc; + while(true) { + Node nx; + if(n.getFirstChild() != null) { + nx = n.getFirstChild(); + } else if(n.getNextSibling() != null) { + nx = n.getNextSibling(); + } else { + for(nx = n.getParentNode(); nx != null; nx = nx.getParentNode()) { + if(nx.getNextSibling() != null) { + nx = nx.getNextSibling(); + break; + } + } + } + String ns = n.getNamespaceURI(); + if((ns != null) && ns.equals(DocBuffer.ns)) + n.getParentNode().removeChild(n); + if(nx == null) + break; + else + n = nx; + } + } }