sw/qa/extras/ooxmlexport/data/tdf106001-2.odt |binary
 sw/qa/extras/ooxmlexport/ooxmlexport9.cxx     |   10 ++++++++++
 sw/source/filter/ww8/docxattributeoutput.cxx  |    5 ++++-
 3 files changed, 14 insertions(+), 1 deletion(-)

New commits:
commit e35f5ceefd586f03ace4cb3909bf5dd46007f49b
Author: Aron Budea <aron.bu...@collabora.com>
Date:   Tue Feb 28 07:28:30 2017 +0100

    tdf#106001: Clamp CharScaleWidth outliers when exporting to DOCX
    
    Atribute is of type ST_TextScale, which has to be
    between 1 and 600.
    
    Change-Id: I9b9cddc47d194f1364d91675c9b825752b2f5e06
    Reviewed-on: https://gerrit.libreoffice.org/34713
    Tested-by: Jenkins <c...@libreoffice.org>
    Reviewed-by: Miklos Vajna <vmik...@collabora.co.uk>
    (cherry picked from commit a3a0eac099831de6fd7c53b66f85b964e41a5a13)
    Reviewed-on: https://gerrit.libreoffice.org/35335
    Reviewed-by: Khaled Hosny <khaledho...@eglug.org>

diff --git a/sw/qa/extras/ooxmlexport/data/tdf106001-2.odt 
b/sw/qa/extras/ooxmlexport/data/tdf106001-2.odt
new file mode 100644
index 000000000000..36d2650f4c18
Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf106001-2.odt 
differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport9.cxx 
b/sw/qa/extras/ooxmlexport/ooxmlexport9.cxx
index 001f5b026251..786074a40849 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport9.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport9.cxx
@@ -207,6 +207,16 @@ DECLARE_OOXMLEXPORT_TEST(testTdf106001, "tdf106001.docx")
     CPPUNIT_ASSERT_EQUAL( static_cast<sal_Int16>( 100 ), 
getProperty<sal_Int16>(getRun(getParagraph(1), 1), "CharScaleWidth" ));
 }
 
+DECLARE_OOXMLEXPORT_TEST(testTdf106001_2, "tdf106001-2.odt")
+{
+    // In test ODT CharScaleWidth = 900, this was not changed upon OOXML 
export to stay in [1..600], now it's clamped to 600
+    // Note: we disregard what's set in pPr / rPr and only care about r / rPr
+    xmlDocPtr pXmlDoc = parseExport("word/document.xml");
+    if (!pXmlDoc)
+        return;
+    assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:r/w:rPr/w:w","val","600");
+}
+
 DECLARE_OOXMLEXPORT_TEST(testTdf103931, "tdf103931.docx")
 {
     uno::Reference<text::XTextSectionsSupplier> 
xTextSectionsSupplier(mxComponent, uno::UNO_QUERY);
diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx 
b/sw/source/filter/ww8/docxattributeoutput.cxx
index 36872e7bc19f..1b6b786c8b7f 100644
--- a/sw/source/filter/ww8/docxattributeoutput.cxx
+++ b/sw/source/filter/ww8/docxattributeoutput.cxx
@@ -6563,8 +6563,11 @@ void DocxAttributeOutput::CharTwoLines( const 
SvxTwoLinesItem& rTwoLines )
 
 void DocxAttributeOutput::CharScaleWidth( const SvxCharScaleWidthItem& 
rScaleWidth )
 {
+    // Clamp CharScaleWidth to OOXML limits ([1..600])
+    const sal_Int16 nScaleWidth( std::max<sal_Int16>( 1,
+        std::min<sal_Int16>( rScaleWidth.GetValue(), 600 ) ) );
     m_pSerializer->singleElementNS( XML_w, XML_w,
-            FSNS( XML_w, XML_val ), OString::number( rScaleWidth.GetValue() 
).getStr(), FSEND );
+        FSNS( XML_w, XML_val ), OString::number( nScaleWidth ).getStr(), FSEND 
);
 }
 
 void DocxAttributeOutput::CharRelief( const SvxCharReliefItem& rRelief )
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to