sw/qa/extras/odfexport/data/section-columns-separator.fodt | 24 ++++++++ sw/qa/extras/odfexport/odfexport2.cxx | 35 +++++++++++++ xmloff/source/text/XMLTextColumnsExport.cxx | 13 ++-- 3 files changed, 66 insertions(+), 6 deletions(-)
New commits: commit a92df2a6771af8cb510e30d9d011325807f79edd Author: Mike Kaganski <[email protected]> AuthorDate: Sat Aug 6 16:50:47 2022 +0300 Commit: Xisco Fauli <[email protected]> CommitDate: Mon Aug 8 11:06:24 2022 +0200 tdf#150235: use correct types in XMLTextColumnsExport The types for the properties are defined in css::text::TextColumns servise. But before commit 95ebd24a629b4c8cd62cc20c0701683512cc8fa0 Author Mike Kaganski <[email protected]> Date Thu May 27 13:00:10 2021 +0300 editengine-columns: ODF support [API CHANGE] the implementation of the service (SwXTextColumns) used smaller types for some properties. The export code (XMLTextColumnsExport::exportXML) mathced those implementation types. The mentioned commit changed the implementation to use proper types; but the export code wasn't corrected. This fixes the export code. Change-Id: I95838dec382edc61bb2e5b39177bf57a7d79e0bf Reviewed-on: https://gerrit.libreoffice.org/c/core/+/137900 Tested-by: Jenkins Reviewed-by: Mike Kaganski <[email protected]> (cherry picked from commit f1f6c82e613ace836aa78a822688721fb7fb5e80) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/137820 Reviewed-by: Xisco Fauli <[email protected]> diff --git a/sw/qa/extras/odfexport/data/section-columns-separator.fodt b/sw/qa/extras/odfexport/data/section-columns-separator.fodt new file mode 100644 index 000000000000..b9c97eb9e38e --- /dev/null +++ b/sw/qa/extras/odfexport/data/section-columns-separator.fodt @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<office:document xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" office:version="1.3" office:mimetype="application/vnd.oasis.opendocument.text"> + <office:automatic-styles> + <style:style style:name="Sect1" style:family="section"> + <style:section-properties text:dont-balance-text-columns="false" style:editable="false"> + <style:columns fo:column-count="2" fo:column-gap="0.6cm"> + <style:column-sep style:width="0.009cm" style:color="#99AABB" style:height="50%" style:style="dotted" style:vertical-align="bottom"/> + <style:column style:rel-width="32767*" fo:start-indent="0cm" fo:end-indent="0.248cm"/> + <style:column style:rel-width="32768*" fo:start-indent="0.248cm" fo:end-indent="0cm"/> + </style:columns> + </style:section-properties> + </style:style> + </office:automatic-styles> + <office:body> + <office:text> + <text:section text:style-name="Sect1" text:name="Section1"> + <text:p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum consequat mi quis pretium semper. Proin luctus orci ac neque venenatis, quis commodo dolor posuere. Curabitur dignissim sapien quis cursus egestas. Donec blandit auctor arcu, nec pellentesque eros molestie eget. In consectetur aliquam hendrerit. Sed cursus mauris vitae ligula pellentesque, non pellentesque urna aliquet. Fusce placerat mauris enim, nec rutrum purus semper vel. Praesent tincidunt neque eu pellentesque pharetra. Fusce pellentesque est orci.</text:p> + <text:p>Integer sodales tincidunt tristique. Sed a metus posuere, adipiscing nunc et, viverra odio. Donec auctor molestie sem, sit amet tristique lectus hendrerit sed. Cras sodales nisl sed orci mattis iaculis. Nunc eget dolor accumsan, pharetra risus a, vestibulum mauris. Nunc vulputate lobortis mollis. Vivamus nec tellus faucibus, tempor magna nec, facilisis felis. Donec commodo enim a vehicula pellentesque. Nullam vehicula vestibulum est vel ultricies.</text:p> + <text:p>Aliquam velit massa, laoreet vel leo nec, volutpat facilisis eros. Donec consequat arcu ut diam tempor luctus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Praesent vitae lacus vel leo sodales pharetra a a nibh. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nam luctus tempus nibh, fringilla dictum augue consectetur eget. Curabitur at ante sit amet tortor pharetra molestie eu nec ante. Mauris tincidunt, nibh eu sollicitudin molestie, dolor sapien congue tortor, a pulvinar sapien turpis sed ante. Donec nec est elementum, euismod nulla in, mollis nunc.</text:p> + </text:section> + </office:text> + </office:body> +</office:document> \ No newline at end of file diff --git a/sw/qa/extras/odfexport/odfexport2.cxx b/sw/qa/extras/odfexport/odfexport2.cxx index dc4762314c32..2ced17e903de 100644 --- a/sw/qa/extras/odfexport/odfexport2.cxx +++ b/sw/qa/extras/odfexport/odfexport2.cxx @@ -9,6 +9,9 @@ #include <swmodeltestbase.hxx> +#include <com/sun/star/style/VerticalAlignment.hpp> +#include <com/sun/star/text/ColumnSeparatorStyle.hpp> +#include <com/sun/star/text/XTextColumns.hpp> #include <com/sun/star/text/XTextTable.hpp> #include <com/sun/star/text/XTextTablesSupplier.hpp> #include <unotools/localedatawrapper.hxx> @@ -228,6 +231,38 @@ CPPUNIT_TEST_FIXTURE(Test, tdf120972) "char", cDecimal); } +DECLARE_ODFEXPORT_TEST(testSectionColumnSeparator, "section-columns-separator.fodt") +{ + // tdf#150235: due to wrong types used in column export, 'style:height' and 'style:style' + // attributes were exported incorrectly for 'style:column-sep' element + auto xSection = getProperty<uno::Reference<uno::XInterface>>(getParagraph(1), "TextSection"); + auto xColumns = getProperty<uno::Reference<text::XTextColumns>>(xSection, "TextColumns"); + CPPUNIT_ASSERT(xColumns); + CPPUNIT_ASSERT_EQUAL(sal_Int16(2), xColumns->getColumnCount()); + + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 50 + // - Actual : 100 + CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(50), + getProperty<sal_Int32>(xColumns, "SeparatorLineRelativeHeight")); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 2 + // - Actual : 0 + CPPUNIT_ASSERT_EQUAL(css::text::ColumnSeparatorStyle::DOTTED, + getProperty<sal_Int16>(xColumns, "SeparatorLineStyle")); + + // Check the rest of the properties, too + CPPUNIT_ASSERT_EQUAL(true, getProperty<bool>(xColumns, "IsAutomatic")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(600), getProperty<sal_Int32>(xColumns, "AutomaticDistance")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(9), getProperty<sal_Int32>(xColumns, "SeparatorLineWidth")); + CPPUNIT_ASSERT_EQUAL(Color(0x99, 0xAA, 0xBB), + getProperty<Color>(xColumns, "SeparatorLineColor")); + CPPUNIT_ASSERT_EQUAL( + css::style::VerticalAlignment_BOTTOM, + getProperty<css::style::VerticalAlignment>(xColumns, "SeparatorLineVerticalAlignment")); + CPPUNIT_ASSERT_EQUAL(true, getProperty<bool>(xColumns, "SeparatorLineIsOn")); +} + CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/xmloff/source/text/XMLTextColumnsExport.cxx b/xmloff/source/text/XMLTextColumnsExport.cxx index 017045d5f635..ec80f2ed90cc 100644 --- a/xmloff/source/text/XMLTextColumnsExport.cxx +++ b/xmloff/source/text/XMLTextColumnsExport.cxx @@ -24,6 +24,7 @@ #include <com/sun/star/text/XTextColumns.hpp> +#include <com/sun/star/text/ColumnSeparatorStyle.hpp> #include <com/sun/star/text/TextColumn.hpp> #include <com/sun/star/style/VerticalAlignment.hpp> #include <com/sun/star/beans/XPropertySet.hpp> @@ -117,7 +118,7 @@ void XMLTextColumnsExport::exportXML( const Any& rAny ) // style:height aAny = xPropSet->getPropertyValue( gsSeparatorLineRelativeHeight ); - sal_Int8 nHeight = 0; + sal_Int32 nHeight = 0; aAny >>= nHeight; ::sax::Converter::convertPercent( sValue, nHeight ); GetExport().AddAttribute( XML_NAMESPACE_STYLE, XML_HEIGHT, @@ -125,16 +126,16 @@ void XMLTextColumnsExport::exportXML( const Any& rAny ) // style::style aAny = xPropSet->getPropertyValue( gsSeparatorLineStyle ); - sal_Int8 nStyle = 0; + sal_Int16 nStyle = css::text::ColumnSeparatorStyle::NONE; aAny >>= nStyle; enum XMLTokenEnum eStr = XML_TOKEN_INVALID; switch ( nStyle ) { - case 0: eStr = XML_NONE; break; - case 1: eStr = XML_SOLID; break; - case 2: eStr = XML_DOTTED; break; - case 3: eStr = XML_DASHED; break; + case css::text::ColumnSeparatorStyle::NONE: eStr = XML_NONE; break; + case css::text::ColumnSeparatorStyle::SOLID: eStr = XML_SOLID; break; + case css::text::ColumnSeparatorStyle::DOTTED: eStr = XML_DOTTED; break; + case css::text::ColumnSeparatorStyle::DASHED: eStr = XML_DASHED; break; default: break; }
