X-Git-Url: https://git.argeo.org/?p=gpl%2Fargeo-suite.git;a=blobdiff_plain;f=publishing%2Forg.argeo.publishing.ui%2Fsrc%2Forg%2Fargeo%2Fdocbook%2Fui%2FDbkTextInterpreter.java;h=f5ab9975dcf2b59433f61eed1b6dd9350762756a;hp=f13826bd693f1d66aff097f78e7923db1b79aa7c;hb=4bd6cf0556f597ee73c8f13df45019ccf9e418a6;hpb=147ada7da5bf6292569f17a53a77fca04c97f707 diff --git a/publishing/org.argeo.publishing.ui/src/org/argeo/docbook/ui/DbkTextInterpreter.java b/publishing/org.argeo.publishing.ui/src/org/argeo/docbook/ui/DbkTextInterpreter.java index f13826b..f5ab997 100644 --- a/publishing/org.argeo.publishing.ui/src/org/argeo/docbook/ui/DbkTextInterpreter.java +++ b/publishing/org.argeo.publishing.ui/src/org/argeo/docbook/ui/DbkTextInterpreter.java @@ -1,12 +1,23 @@ package org.argeo.docbook.ui; +import static org.argeo.docbook.DbkUtils.isDbk; +import static org.argeo.docbook.DocBookType.para; +import static org.argeo.docbook.DocBookType.title; + +import java.io.IOException; +import java.io.StringReader; +import java.util.List; + import javax.jcr.Item; import javax.jcr.Node; import javax.jcr.Property; import javax.jcr.RepositoryException; -import org.argeo.cms.CmsException; +import org.apache.commons.io.IOUtils; import org.argeo.cms.text.TextInterpreter; +import org.argeo.jcr.Jcr; +import org.argeo.jcr.JcrException; +import org.argeo.jcr.JcrxType; /** Based on HTML with a few Wiki-like shortcuts. */ public class DbkTextInterpreter implements TextInterpreter { @@ -16,17 +27,17 @@ public class DbkTextInterpreter implements TextInterpreter { try { if (item instanceof Node) { Node node = (Node) item; - if (node.isNodeType(DocBookTypes.PARA)) { + if (isDbk(node, para) || isDbk(node, title)) { String raw = convertToStorage(node, content); validateBeforeStoring(raw); Node jcrText; - if (!node.hasNode(DocBookNames.JCR_XMLTEXT)) - jcrText = node.addNode(DocBookNames.JCR_XMLTEXT, DocBookTypes.XMLTEXT); + if (!node.hasNode(Jcr.JCR_XMLTEXT)) + jcrText = node.addNode(Jcr.JCR_XMLTEXT, JcrxType.JCRX_XMLTEXT); else - jcrText = node.getNode(DocBookNames.JCR_XMLTEXT); - jcrText.setProperty(DocBookNames.JCR_XMLCHARACTERS, raw); + jcrText = node.getNode(Jcr.JCR_XMLTEXT); + jcrText.setProperty(Jcr.JCR_XMLCHARACTERS, raw); } else { - throw new CmsException("Don't know how to interpret " + node); + throw new IllegalArgumentException("Don't know how to interpret " + node); } } else {// property Property property = (Property) item; @@ -34,7 +45,7 @@ public class DbkTextInterpreter implements TextInterpreter { } // item.getSession().save(); } catch (RepositoryException e) { - throw new CmsException("Cannot set content on " + item, e); + throw new JcrException("Cannot set content on " + item, e); } } @@ -44,7 +55,7 @@ public class DbkTextInterpreter implements TextInterpreter { String raw = raw(item); return convertFromStorage(item, raw); } catch (RepositoryException e) { - throw new CmsException("Cannot get " + item + " for edit", e); + throw new JcrException("Cannot get " + item + " for edit", e); } } @@ -54,22 +65,56 @@ public class DbkTextInterpreter implements TextInterpreter { item.getSession().refresh(true); if (item instanceof Node) { Node node = (Node) item; - if (node.isNodeType(DocBookTypes.PARA)) { - Node jcrText = node.getNode(DocBookNames.JCR_XMLTEXT); - String txt = jcrText.getProperty(DocBookNames.JCR_XMLCHARACTERS).getString(); + if (isDbk(node, para) || isDbk(node, title)) { + Node jcrText = node.getNode(Jcr.JCR_XMLTEXT); + String txt = jcrText.getProperty(Jcr.JCR_XMLCHARACTERS).getString(); // TODO make it more robust - txt = txt.replace("\n", "").replace("\t", ""); + // txt = txt.replace("\n", "").replace("\t", ""); + txt = txt.replace("\t", " "); return txt; } else { - throw new CmsException("Don't know how to interpret " + node); + throw new IllegalArgumentException("Don't know how to interpret " + node); } } else {// property Property property = (Property) item; return property.getString(); } } catch (RepositoryException e) { - throw new CmsException("Cannot get " + item + " content", e); + throw new JcrException("Cannot get " + item + " content", e); + } + } + + final static int BR_LENGTH = "
".length(); + + public String readSimpleHtml(Item item) { + String raw = raw(item); +// raw = "" + raw + ""; + if (raw.length() == 0) + return raw; + try (StringReader reader = new StringReader(raw)) { + List lines = IOUtils.readLines(reader); + if (lines.size() == 1) + return lines.get(0); + StringBuilder sb = new StringBuilder(raw.length() + lines.size() * BR_LENGTH); + for (int i = 0; i < lines.size(); i++) { + if (i != 0) + sb.append("
"); + sb.append(lines.get(i)); + } + return sb.toString(); + } catch (IOException e) { + throw new RuntimeException(e); } +// String[] lines = raw.split("[\r\n]+"); +// if (lines.length == 1) +// return lines[0]; +// StringBuilder sb = new StringBuilder(raw.length() + lines.length * BR_LENGTH); +// for (int i = 0; i < lines.length; i++) { +// if (i != 0) +// sb.append("
"); +// sb.append(lines[i]); +// } +// return sb.toString(); } // EXTENSIBILITY