summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Kaganski <mike.kaganski@collabora.com>2020-08-05 11:16:32 +0300
committerXisco Fauli <xiscofauli@libreoffice.org>2020-08-07 00:23:52 +0200
commit378537536a135a80d97752368a032814b81cabca (patch)
treef1d583ece498acf85f4f187d9e6b7bc7ae3fc6b3
parent5bdb43c5bcb3ec5111d42ae17f257563242aea04 (diff)
tdf#124470: Split export of table autostyles out from collection phase
This allows to call collectAutoStyles where required (e.g. when enumerating used fonts), without side effect of writing table styles XML inside the call, out of place. Change-Id: Ida05e373eb8502590c43e2b0e85c3b0c1107c551 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/100153 Tested-by: Jenkins Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com> (cherry picked from commit 35021cd56b3b4e38035804087f215c80085564be) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/100221 Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
-rw-r--r--include/xmloff/txtparae.hxx2
-rw-r--r--sw/qa/extras/odfexport/data/tdf124470TableAndEmbeddedUsedFonts.odtbin0 -> 10880 bytes
-rw-r--r--sw/qa/extras/odfexport/odfexport.cxx18
-rw-r--r--sw/source/filter/xml/xmltble.cxx9
-rw-r--r--sw/source/filter/xml/xmltexte.hxx6
-rw-r--r--xmloff/source/text/txtparae.cxx4
6 files changed, 38 insertions, 1 deletions
diff --git a/include/xmloff/txtparae.hxx b/include/xmloff/txtparae.hxx
index 80131b11e9f7..44c15512cd70 100644
--- a/include/xmloff/txtparae.hxx
+++ b/include/xmloff/txtparae.hxx
@@ -365,6 +365,8 @@ protected:
const css::uno::Reference< css::beans::XPropertySet> & i_xPortion,
bool i_bAutoStyles, bool i_isProgress, bool & rPrevCharIsSpace);
+ virtual void exportTableAutoStyles();
+
public:
XMLTextParagraphExport(
diff --git a/sw/qa/extras/odfexport/data/tdf124470TableAndEmbeddedUsedFonts.odt b/sw/qa/extras/odfexport/data/tdf124470TableAndEmbeddedUsedFonts.odt
new file mode 100644
index 000000000000..21969e9e5485
--- /dev/null
+++ b/sw/qa/extras/odfexport/data/tdf124470TableAndEmbeddedUsedFonts.odt
Binary files differ
diff --git a/sw/qa/extras/odfexport/odfexport.cxx b/sw/qa/extras/odfexport/odfexport.cxx
index 540e6359dd1f..d41ce2037d5e 100644
--- a/sw/qa/extras/odfexport/odfexport.cxx
+++ b/sw/qa/extras/odfexport/odfexport.cxx
@@ -2520,5 +2520,23 @@ DECLARE_ODFEXPORT_TEST(testPageContentBottom, "page-content-bottom.odt")
CPPUNIT_ASSERT_EQUAL(nExpected, getProperty<sal_Int16>(xShape, "VertOrientRelation"));
}
+DECLARE_ODFEXPORT_TEST(tdf124470, "tdf124470TableAndEmbeddedUsedFonts.odt")
+{
+ // Table styles were exported out of place, inside font-face-decls.
+ // Without the fix in place, this will fail already in ODF validation:
+ // "content.xml[2,2150]: Error: tag name "style:style" is not allowed. Possible tag names are: <font-face>"
+
+ CPPUNIT_ASSERT_EQUAL(1, getPages());
+
+ xmlDocUniquePtr pXmlDoc = parseExport("content.xml");
+ if (!pXmlDoc)
+ return;
+
+ assertXPath(pXmlDoc, "/office:document-content/office:font-face-decls/style:style", 0);
+ assertXPath(pXmlDoc, "/office:document-content/office:automatic-styles/style:style[@style:family='table']", 1);
+ assertXPath(pXmlDoc, "/office:document-content/office:automatic-styles/style:style[@style:family='table-column']", 2);
+ assertXPath(pXmlDoc, "/office:document-content/office:automatic-styles/style:style[@style:family='paragraph']", 1);
+}
+
CPPUNIT_PLUGIN_IMPLEMENT();
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/source/filter/xml/xmltble.cxx b/sw/source/filter/xml/xmltble.cxx
index 3febc00ae82e..0d91074bd91b 100644
--- a/sw/source/filter/xml/xmltble.cxx
+++ b/sw/source/filter/xml/xmltble.cxx
@@ -1156,6 +1156,13 @@ void SwXMLExport::ExportTable( const SwTableNode& rTableNd )
}
}
+void SwXMLTextParagraphExport::exportTableAutoStyles() {
+ for (const auto* pTableNode : maTableNodes)
+ {
+ static_cast<SwXMLExport&>(GetExport()).ExportTableAutoStyles(*pTableNode);
+ }
+}
+
void SwXMLTextParagraphExport::exportTable(
const Reference < XTextContent > & rTextContent,
bool bAutoStyles, bool _bProgress )
@@ -1193,7 +1200,7 @@ void SwXMLTextParagraphExport::exportTable(
// ALL flags are set at the same time.
const bool bExportStyles = bool( GetExport().getExportFlags() & SvXMLExportFlags::STYLES );
if ( bExportStyles || !pFormat->GetDoc()->IsInHeaderFooter( aIdx ) )
- static_cast<SwXMLExport&>(GetExport()).ExportTableAutoStyles( *pTableNd );
+ maTableNodes.push_back(pTableNd);
}
else
{
diff --git a/sw/source/filter/xml/xmltexte.hxx b/sw/source/filter/xml/xmltexte.hxx
index e7ec5a991d3e..3fc9530e6303 100644
--- a/sw/source/filter/xml/xmltexte.hxx
+++ b/sw/source/filter/xml/xmltexte.hxx
@@ -28,6 +28,7 @@
class SwXMLExport;
class SvXMLAutoStylePoolP;
class SwNoTextNode;
+class SwTableNode;
namespace com::sun::star::style { class XStyle; }
class SwXMLTextParagraphExport : public XMLTextParagraphExport
@@ -36,6 +37,9 @@ class SwXMLTextParagraphExport : public XMLTextParagraphExport
const SvGlobalName aPluginClassId;
const SvGlobalName aIFrameClassId;
+ // Collected autostyles for use in exportTextAutoStyles
+ std::vector<const SwTableNode*> maTableNodes;
+
static SwNoTextNode *GetNoTextNode(
const css::uno::Reference < css::beans::XPropertySet >& rPropSet );
@@ -50,6 +54,8 @@ protected:
const css::uno::Reference< css::text::XTextContent > & rTextContent,
bool bAutoStyles, bool bProgress ) override;
+ virtual void exportTableAutoStyles() override;
+
public:
SwXMLTextParagraphExport(
SwXMLExport& rExp,
diff --git a/xmloff/source/text/txtparae.cxx b/xmloff/source/text/txtparae.cxx
index 26ff035a488b..d0c067ac7ed3 100644
--- a/xmloff/source/text/txtparae.cxx
+++ b/xmloff/source/text/txtparae.cxx
@@ -3692,8 +3692,12 @@ void XMLTextParagraphExport::recordTrackedChangesNoXText()
pRedlineExport->SetCurrentXText();
}
+void XMLTextParagraphExport::exportTableAutoStyles() {}
+
void XMLTextParagraphExport::exportTextAutoStyles()
{
+ exportTableAutoStyles();
+
GetAutoStylePool().exportXML( XmlStyleFamily::TEXT_PARAGRAPH );
GetAutoStylePool().exportXML( XmlStyleFamily::TEXT_TEXT );