X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.app.swt%2Fsrc%2Forg%2Fargeo%2Fapp%2Fswt%2Fdocbook%2FDbkTextInterpreter.java;h=1eff7a4edc80bbf5b3b220f87562c5f5591610df;hb=f1b87af2e0de38f1f49ab8fe68f9988018914811;hp=2fac3bbf09f226deafb549de7f21ce1c5da71f5c;hpb=3304f8934e1dc5846fc6214997bc54faaa93bb39;p=gpl%2Fargeo-suite.git diff --git a/org.argeo.app.swt/src/org/argeo/app/swt/docbook/DbkTextInterpreter.java b/org.argeo.app.swt/src/org/argeo/app/swt/docbook/DbkTextInterpreter.java index 2fac3bb..1eff7a4 100644 --- a/org.argeo.app.swt/src/org/argeo/app/swt/docbook/DbkTextInterpreter.java +++ b/org.argeo.app.swt/src/org/argeo/app/swt/docbook/DbkTextInterpreter.java @@ -9,16 +9,20 @@ import java.io.StringReader; import java.io.StringWriter; import java.util.List; -import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.Result; import javax.xml.transform.Source; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMResult; import javax.xml.transform.stream.StreamResult; import org.apache.commons.io.IOUtils; import org.argeo.api.acr.Content; import org.argeo.app.docbook.DbkType; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.w3c.dom.Text; /** Based on HTML with a few Wiki-like shortcuts. */ public class DbkTextInterpreter implements TextInterpreter { @@ -95,15 +99,12 @@ public class DbkTextInterpreter implements TextInterpreter { @Override public String raw(Content node) { if (isDbk(node, para) || isDbk(node, title)) { - Source source = node.adapt(Source.class); - - StringWriter stringWriter = new StringWriter(); - Result result = new StreamResult(stringWriter); - - try { + try (StringWriter stringWriter = new StringWriter()) { + Source source = node.adapt(Source.class); + Result result = new StreamResult(stringWriter); transformerFactory.newTransformer().transform(source, result); return stringWriter.toString(); - } catch (TransformerException e) { + } catch (TransformerException | IOException e) { throw new RuntimeException("Could not convert " + node + " to XML", e); } @@ -168,6 +169,27 @@ public class DbkTextInterpreter implements TextInterpreter { // } private void readAsSimpleHtml(Content node, StringBuilder sb) { + DOMResult result = new DOMResult(); + try { + Source source = node.adapt(Source.class); + transformerFactory.newTransformer().transform(source, result); + } catch (TransformerException e) { + throw new RuntimeException("Could not convert " + node + " to XML", e); + } + + NodeList nl = result.getNode().getChildNodes(); + for (int i = 0; i < nl.getLength(); i++) { + Node n = nl.item(i); +// if (n instanceof Text) { +// Text text = (Text) n; +// sb.append(text.getTextContent()); +// } else + if (n instanceof Element) { + Element elem = (Element) n; + sb.append(elem.getTextContent()); + } + } + // NodeIterator nit = node.getNodes(); // while (nit.hasNext()) { // Node child = nit.nextNode();