From: Mathieu Baudier Date: Fri, 15 Jan 2021 09:29:16 +0000 (+0100) Subject: Improve DocBook support. X-Git-Tag: argeo-suite-2.1.18~37 X-Git-Url: https://git.argeo.org/?p=gpl%2Fargeo-suite.git;a=commitdiff_plain;h=9dd16d64cc4ea274c33a4c1acaa289c46bf5251f Improve DocBook support. --- diff --git a/publishing/org.argeo.publishing.ui/src/org/argeo/docbook/ui/CustomDbkEditor.java b/publishing/org.argeo.publishing.ui/src/org/argeo/docbook/ui/CustomDbkEditor.java new file mode 100644 index 0000000..801cd1c --- /dev/null +++ b/publishing/org.argeo.publishing.ui/src/org/argeo/docbook/ui/CustomDbkEditor.java @@ -0,0 +1,24 @@ +package org.argeo.docbook.ui; + +import javax.jcr.Node; + +import org.argeo.cms.ui.CmsEditable; +import org.argeo.cms.ui.viewers.Section; +import org.eclipse.swt.widgets.Composite; + +/** + * Manages hardcoded sections as an arbitrary hierarchy under the main section, + * which contains no text and no title. + */ +public class CustomDbkEditor extends AbstractDbkViewer { + private static final long serialVersionUID = 656302500183820802L; + + protected CustomDbkEditor(Composite parent, int style, Node textNode, CmsEditable cmsEditable) { + this(new Section(parent, style, textNode), style, cmsEditable); + } + + protected CustomDbkEditor(Section parent, int style, CmsEditable cmsEditable) { + super(parent, style, cmsEditable); + } + +} 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..51af55e 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 @@ -5,8 +5,10 @@ import javax.jcr.Node; import javax.jcr.Property; import javax.jcr.RepositoryException; -import org.argeo.cms.CmsException; 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 { @@ -20,13 +22,13 @@ public class DbkTextInterpreter implements TextInterpreter { 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 +36,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 +46,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); } } @@ -55,20 +57,20 @@ public class DbkTextInterpreter implements TextInterpreter { 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(); + 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", ""); 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); } } diff --git a/publishing/org.argeo.publishing.ui/src/org/argeo/docbook/ui/DbkUtils.java b/publishing/org.argeo.publishing.ui/src/org/argeo/docbook/ui/DbkUtils.java new file mode 100644 index 0000000..b53c305 --- /dev/null +++ b/publishing/org.argeo.publishing.ui/src/org/argeo/docbook/ui/DbkUtils.java @@ -0,0 +1,16 @@ +package org.argeo.docbook.ui; + +import javax.jcr.Node; + +import org.argeo.jcr.JcrxApi; + +/** Utilities around DocBook. */ +public class DbkUtils { + public static String getTitle(Node node) { + return JcrxApi.getXmlValue(node, DocBookTypes.TITLE); + } + + /** Singleton. */ + private DbkUtils() { + } +} diff --git a/publishing/org.argeo.publishing.ui/src/org/argeo/docbook/ui/DocBookNames.java b/publishing/org.argeo.publishing.ui/src/org/argeo/docbook/ui/DocBookNames.java index b24061c..c7848d1 100644 --- a/publishing/org.argeo.publishing.ui/src/org/argeo/docbook/ui/DocBookNames.java +++ b/publishing/org.argeo.publishing.ui/src/org/argeo/docbook/ui/DocBookNames.java @@ -9,9 +9,8 @@ public interface DocBookNames { public final static String DBK_MEDIAOBJECT = "dbk:mediaobject"; // ATTRIBUTES - // TODO centralise - public final static String JCR_XMLTEXT = "jcr:xmltext"; - public final static String JCR_XMLCHARACTERS = "jcr:xmlcharacters"; +// public final static String JCR_XMLTEXT = "jcr:xmltext"; +// public final static String JCR_XMLCHARACTERS = "jcr:xmlcharacters"; public final static String DBK_ROLE = "dbk:role"; } diff --git a/publishing/org.argeo.publishing.ui/src/org/argeo/docbook/ui/DocBookTypes.java b/publishing/org.argeo.publishing.ui/src/org/argeo/docbook/ui/DocBookTypes.java index d1910b1..03721b2 100644 --- a/publishing/org.argeo.publishing.ui/src/org/argeo/docbook/ui/DocBookTypes.java +++ b/publishing/org.argeo.publishing.ui/src/org/argeo/docbook/ui/DocBookTypes.java @@ -3,9 +3,10 @@ package org.argeo.docbook.ui; public interface DocBookTypes { public final static String BOOK = "dbk:book"; public final static String ARTICLE = "dbk:article"; + public final static String TITLE = "dbk:title"; public final static String SECTION = "dbk:section"; public final static String PARA = "dbk:para"; - public final static String XMLTEXT = "dbk:xmltext"; +// public final static String XMLTEXT = "dbk:xmltext"; public final static String MEDIAOBJECT = "dbk:mediaobject"; public final static String IMAGEOBJECT = "dbk:imageobject"; diff --git a/publishing/org.argeo.publishing.ui/src/org/argeo/docbook/ui/DocumentTextEditor.java b/publishing/org.argeo.publishing.ui/src/org/argeo/docbook/ui/DocumentTextEditor.java index 7bb5132..aeafcd3 100644 --- a/publishing/org.argeo.publishing.ui/src/org/argeo/docbook/ui/DocumentTextEditor.java +++ b/publishing/org.argeo.publishing.ui/src/org/argeo/docbook/ui/DocumentTextEditor.java @@ -7,6 +7,8 @@ import javax.jcr.RepositoryException; import org.argeo.cms.text.TextSection; import org.argeo.cms.ui.CmsEditable; import org.argeo.cms.ui.util.CmsUiUtils; +import org.argeo.jcr.Jcr; +import org.argeo.jcr.JcrxType; import org.eclipse.swt.widgets.Composite; /** Text editor where sections and subsections can be managed by the user. */ @@ -22,9 +24,8 @@ public class DocumentTextEditor extends AbstractDbkViewer { @Override protected void initModel(Node textNode) throws RepositoryException { if (isFlat()) { - textNode.addNode(DocBookNames.DBK_PARA, DocBookTypes.PARA) - .addNode(DocBookNames.JCR_XMLTEXT, DocBookTypes.XMLTEXT) - .setProperty(DocBookNames.JCR_XMLCHARACTERS, "Hello World!"); + textNode.addNode(DocBookNames.DBK_PARA, DocBookTypes.PARA).addNode(Jcr.JCR_XMLTEXT, JcrxType.JCRX_XMLTEXT) + .setProperty(Jcr.JCR_XMLCHARACTERS, ""); } // else // textNode.setProperty(DocBookNames.DBK_TITLE, textNode.getName()); diff --git a/publishing/org.argeo.publishing.ui/src/org/argeo/docbook/ui/docbook.cnd b/publishing/org.argeo.publishing.ui/src/org/argeo/docbook/ui/docbook.cnd index f22288d..0398c25 100644 --- a/publishing/org.argeo.publishing.ui/src/org/argeo/docbook/ui/docbook.cnd +++ b/publishing/org.argeo.publishing.ui/src/org/argeo/docbook/ui/docbook.cnd @@ -22,7 +22,7 @@ mixin mixin + dbk:phrase (dbk:phrase) = dbk:phrase * + dbk:replaceable (dbk:replaceable) = dbk:replaceable * - + jcr:xmltext (dbk:xmltext) = dbk:xmltext * + + jcr:xmltext (jcrx:xmltext) = jcrx:xmltext * [argeodbk:markupInlines] mixin @@ -106,7 +106,7 @@ orderable [dbk:alt] > argeodbk:base + dbk:inlinemediaobject (dbk:inlinemediaobject) = dbk:inlinemediaobject * - + jcr:xmltext (dbk:xmltext) = dbk:xmltext * + + jcr:xmltext (jcrx:xmltext) = jcrx:xmltext * [dbk:anchor] > argeodbk:base @@ -158,7 +158,7 @@ orderable + dbk:annotation (dbk:annotation) = dbk:annotation * + dbk:mediaobject (dbk:mediaobject) = dbk:mediaobject * + dbk:remark (dbk:remark) = dbk:remark * - + jcr:xmltext (dbk:xmltext) = dbk:xmltext * + + jcr:xmltext (jcrx:xmltext) = jcrx:xmltext * - dbk:class (String) - dbk:lang (String) - dbk:onclick (String) @@ -519,9 +519,6 @@ orderable + dbk:info (dbk:info) = dbk:info + dbk:videodata (dbk:videodata) = dbk:videodata -[dbk:xmltext] > nt:base - - jcr:xmlcharacters (String) - [dbk:xref] > argeodbk:base, argeodbk:linkingAttributes - dbk:endterm (Reference) - dbk:xrefstyle (String)