Bug 478883 - gendrop drop in table is causing generated file to be in
error
Change-Id: If489f630dcd02da2fe89ea815b17414e7e88f0d7
Signed-off-by: Antonio Campesino <antonio.campesino.robles@ericsson.com>
diff --git a/plugins/org.eclipse.gendoc.documents/src/org/eclipse/gendoc/documents/IDocumentService.java b/plugins/org.eclipse.gendoc.documents/src/org/eclipse/gendoc/documents/IDocumentService.java
index 5ff814e..070544b 100644
--- a/plugins/org.eclipse.gendoc.documents/src/org/eclipse/gendoc/documents/IDocumentService.java
+++ b/plugins/org.eclipse.gendoc.documents/src/org/eclipse/gendoc/documents/IDocumentService.java
@@ -9,7 +9,8 @@
*
* Contributors:
* Caroline Bourdeu d'Aguerre (Atos Origin) caroline.bourdeudaguerre@atosorigin.com - Initial API and implementation
- *
+ * Antonio Campesino Robles (Ericsson) - Bug 478883
+ *
*****************************************************************************/
package org.eclipse.gendoc.documents;
@@ -92,6 +93,8 @@
boolean isRow(String label);
+ boolean isCell(String label);
+
String getListLabel();
String getListId(Node n);
diff --git a/plugins/org.eclipse.gendoc.services.docx/src/org/eclipse/gendoc/services/docx/DOCXDocumentService.java b/plugins/org.eclipse.gendoc.services.docx/src/org/eclipse/gendoc/services/docx/DOCXDocumentService.java
index 0893b13..6251310 100644
--- a/plugins/org.eclipse.gendoc.services.docx/src/org/eclipse/gendoc/services/docx/DOCXDocumentService.java
+++ b/plugins/org.eclipse.gendoc.services.docx/src/org/eclipse/gendoc/services/docx/DOCXDocumentService.java
@@ -9,6 +9,7 @@
*
* Contributors:
* Anne Haugommard (Atos Origin) anne.haugommard@atosorigin.com - Initial API and implementation
+ * Antonio Campesino Robles (Ericsson) - Bug 478883
*
*****************************************************************************/
package org.eclipse.gendoc.services.docx;
@@ -108,6 +109,11 @@
return "w:tr".equals(label);
}
+ public boolean isCell(String label)
+ {
+ return "w:tc".equals(label);
+ }
+
public String getTextStyle()
{
return "w:t";
diff --git a/plugins/org.eclipse.gendoc.services.odt/src/org/eclipse/gendoc/services/odt/ODTDocumentService.java b/plugins/org.eclipse.gendoc.services.odt/src/org/eclipse/gendoc/services/odt/ODTDocumentService.java
index 06c8ed2..6579ec3 100644
--- a/plugins/org.eclipse.gendoc.services.odt/src/org/eclipse/gendoc/services/odt/ODTDocumentService.java
+++ b/plugins/org.eclipse.gendoc.services.odt/src/org/eclipse/gendoc/services/odt/ODTDocumentService.java
@@ -9,7 +9,8 @@
*
* Contributors:
* Anne Haugommard (Atos Origin) anne.haugommard@atosorigin.com - Initial API and implementation
- *
+ * Antonio Campesino Robles (Ericsson) - Bug 478883
+ *
*****************************************************************************/
package org.eclipse.gendoc.services.odt;
@@ -101,6 +102,11 @@
return "table:table-row".equals(label);
}
+ public boolean isCell(String label)
+ {
+ return "table:table-cell".equals(label);
+ }
+
public String getTextStyle()
{
return "(text:p|text:h|text:span)";
diff --git a/plugins/org.eclipse.gendoc.services.pptx/src/org/eclipse/gendoc/services/pptx/PPTXDocumentService.java b/plugins/org.eclipse.gendoc.services.pptx/src/org/eclipse/gendoc/services/pptx/PPTXDocumentService.java
index e7b1541..35e8e44 100644
--- a/plugins/org.eclipse.gendoc.services.pptx/src/org/eclipse/gendoc/services/pptx/PPTXDocumentService.java
+++ b/plugins/org.eclipse.gendoc.services.pptx/src/org/eclipse/gendoc/services/pptx/PPTXDocumentService.java
@@ -8,7 +8,8 @@
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
- * Antonio Campesino (Ericsson) antonio.campesino.robles@ericsson.com - Initial API and implementation
+ * Antonio Campesino (Ericsson) antonio.campesino.robles@ericsson.com - Initial API and implementation,
+ * Bug 478883
*
*****************************************************************************/
package org.eclipse.gendoc.services.pptx;
@@ -184,6 +185,10 @@
return false;
}
+ @Override
+ public boolean isCell(String label) {
+ return false;
+ }
// TODO: The nobr tag can not use pattern matching as the pptx format use <t> tags with
// xml:space="preserve" or by default preserve blanks.
diff --git a/plugins/org.eclipse.gendoc.services.xlsx/src/org/eclipse/gendoc/services/xlsx/XLSXDocumentService.java b/plugins/org.eclipse.gendoc.services.xlsx/src/org/eclipse/gendoc/services/xlsx/XLSXDocumentService.java
index a197ba4..a1bc9a6 100644
--- a/plugins/org.eclipse.gendoc.services.xlsx/src/org/eclipse/gendoc/services/xlsx/XLSXDocumentService.java
+++ b/plugins/org.eclipse.gendoc.services.xlsx/src/org/eclipse/gendoc/services/xlsx/XLSXDocumentService.java
@@ -8,7 +8,8 @@
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
- * Antonio Campesino (Ericsson) antonio.campesino.robles@ericsson.com - Initial API and implementation
+ * Antonio Campesino (Ericsson) antonio.campesino.robles@ericsson.com - Initial API and implementation,
+ * Bug 478883
*
*****************************************************************************/
package org.eclipse.gendoc.services.xlsx;
@@ -192,6 +193,10 @@
return false;
}
+ @Override
+ public boolean isCell(String label) {
+ return false;
+ }
// TODO: The nobr tag can not use pattern matching as the xlsx format use <t> tags with
// xml:space="preserve" or by default preserve blanks.
diff --git a/plugins/org.eclipse.gendoc.tags.handlers/src/org/eclipse/gendoc/tags/handlers/impl/post/DropTagProcess.java b/plugins/org.eclipse.gendoc.tags.handlers/src/org/eclipse/gendoc/tags/handlers/impl/post/DropTagProcess.java
index 29f69a8..518d0aa 100644
--- a/plugins/org.eclipse.gendoc.tags.handlers/src/org/eclipse/gendoc/tags/handlers/impl/post/DropTagProcess.java
+++ b/plugins/org.eclipse.gendoc.tags.handlers/src/org/eclipse/gendoc/tags/handlers/impl/post/DropTagProcess.java
@@ -9,6 +9,7 @@
*
* Contributors:
* Kris Robertson (Atos Origin) kris.robertson@atosorigin.com - Initial API and implementation
+ * Antonio Campesino Robles (Ericsson) - Bug 478883
*
*****************************************************************************/
package org.eclipse.gendoc.tags.handlers.impl.post;
@@ -18,6 +19,7 @@
import org.eclipse.gendoc.document.parser.documents.Document;
import org.eclipse.gendoc.document.parser.documents.Document.PROPERTY;
+import org.eclipse.gendoc.document.parser.documents.helper.XMLHelper;
import org.eclipse.gendoc.documents.IDocumentService;
import org.eclipse.gendoc.process.AbstractStepProcess;
import org.eclipse.gendoc.services.GendocServices;
@@ -54,9 +56,52 @@
if (documentService.isPara(currentNode.getNodeName())) {
String text = (String)document.get(PROPERTY.text);
if (text != null && DROP_TAG_PATTERN.matcher(text).find()) {
+ Node parent = currentNode.getParentNode();
+ if (parent != null && documentService.isCell(parent.getNodeName()) && !hasSiblingParas(currentNode)) {
+ // Avoid remove the only paragraph inside the cell. We just clean it up.
+ cleanTextNodes(document, currentNode);
+ document.getXMLParser().setCurrentNode(currentNode);
+ return;
+ }
nodesToRemove.add(currentNode);
}
}
}
+
+ private boolean hasSiblingParas(Node n) {
+ Node sib = n.getPreviousSibling();
+ while (sib != null) {
+ if (documentService.isPara(sib.getNodeName()))
+ return true;
+ sib = sib.getPreviousSibling();
+ }
+
+ sib = n.getNextSibling();
+ while (sib != null) {
+ if (documentService.isPara(sib.getNodeName()))
+ return true;
+ sib = sib.getNextSibling();
+ }
+ return false;
+ }
+ private void cleanTextNodes(Document doc, Node para) {
+ String text = (String)doc.get(PROPERTY.text);
+ if (!doc.next())
+ return;
+ Node n = doc.getXMLParser().getCurrentNode();
+
+ while (XMLHelper.isAncestor(n, para)) {
+ String value = n.getNodeValue();
+ if (value != null && text.startsWith(value)) {
+ text = text.substring(value.length());
+ n.setNodeValue("");
+ }
+ if (!doc.next())
+ return;
+ n = doc.getXMLParser().getCurrentNode();
+ }
+
+ }
+
}