Improve DocBook support.
authorMathieu Baudier <mbaudier@argeo.org>
Fri, 15 Jan 2021 09:29:16 +0000 (10:29 +0100)
committerMathieu Baudier <mbaudier@argeo.org>
Fri, 15 Jan 2021 09:29:16 +0000 (10:29 +0100)
publishing/org.argeo.publishing.ui/src/org/argeo/docbook/ui/CustomDbkEditor.java [new file with mode: 0644]
publishing/org.argeo.publishing.ui/src/org/argeo/docbook/ui/DbkTextInterpreter.java
publishing/org.argeo.publishing.ui/src/org/argeo/docbook/ui/DbkUtils.java [new file with mode: 0644]
publishing/org.argeo.publishing.ui/src/org/argeo/docbook/ui/DocBookNames.java
publishing/org.argeo.publishing.ui/src/org/argeo/docbook/ui/DocBookTypes.java
publishing/org.argeo.publishing.ui/src/org/argeo/docbook/ui/DocumentTextEditor.java
publishing/org.argeo.publishing.ui/src/org/argeo/docbook/ui/docbook.cnd

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 (file)
index 0000000..801cd1c
--- /dev/null
@@ -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);
+       }
+
+}
index f13826bd693f1d66aff097f78e7923db1b79aa7c..51af55e46f02544b1f983515330a914dc57c3ac3 100644 (file)
@@ -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 (file)
index 0000000..b53c305
--- /dev/null
@@ -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() {
+       }
+}
index b24061c156afc5c017a88e66ec162c47859eef7c..c7848d102a8345cd9ce29116cd63c7e9c1390f4c 100644 (file)
@@ -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";
 }
index d1910b1fdf7ba254718b4b6141a76d24fe414c36..03721b23085f13fa3af9f776e57c4535168caba4 100644 (file)
@@ -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";
index 7bb5132e35bff8b00da88815240edc7536781df3..aeafcd3466557014c529d84fd8a6494c51cdf1e8 100644 (file)
@@ -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());
index f22288def1de4a757143a8c03ac195901edc5b0b..0398c2596575ef089dcc78dfce31f7bfefd67114 100644 (file)
@@ -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)