summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sw/qa/extras/ooxmlexport/data/tdf106001-2.odtbin0 -> 8159 bytes
-rw-r--r--sw/qa/extras/ooxmlexport/ooxmlexport9.cxx10
-rw-r--r--sw/source/filter/ww8/docxattributeoutput.cxx5
3 files changed, 14 insertions, 1 deletions
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
--- /dev/null
+++ b/sw/qa/extras/ooxmlexport/data/tdf106001-2.odt
Binary files 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 )