From 4cbc41bc4eaa822829e68c1ee11eafe834bb7da7 Mon Sep 17 00:00:00 2001 From: Miklos Vajna Date: Fri, 6 Sep 2013 15:57:03 +0200 Subject: [PATCH] bnc#779642 VML import: handle drawinglayer rectangle char spacing Change-Id: I79fa72c9235682030d23a03fdb0c7c40370c4a8a --- include/oox/vml/vmltextbox.hxx | 1 + oox/source/vml/vmltextbox.cxx | 10 ++++++++++ oox/source/vml/vmltextboxcontext.cxx | 10 ++++++++++ .../extras/ooxmlimport/data/groupshape-sdt.docx | Bin 0 -> 10742 bytes sw/qa/extras/ooxmlimport/ooxmlimport.cxx | 16 ++++++++++++++++ 5 files changed, 37 insertions(+) create mode 100755 sw/qa/extras/ooxmlimport/data/groupshape-sdt.docx diff --git a/include/oox/vml/vmltextbox.hxx b/include/oox/vml/vmltextbox.hxx index fc97dc78413b..d31bb3b1f269 100644 --- a/include/oox/vml/vmltextbox.hxx +++ b/include/oox/vml/vmltextbox.hxx @@ -54,6 +54,7 @@ struct OOX_DLLPUBLIC TextFontModel OptValue< bool > mobBold; OptValue< bool > mobItalic; OptValue< bool > mobStrikeout; + OptValue monSpacing; explicit TextFontModel(); }; diff --git a/oox/source/vml/vmltextbox.cxx b/oox/source/vml/vmltextbox.cxx index 553b6f05a34c..fbd821727883 100644 --- a/oox/source/vml/vmltextbox.cxx +++ b/oox/source/vml/vmltextbox.cxx @@ -20,6 +20,7 @@ #include "oox/vml/vmltextbox.hxx" #include +#include #include #include #include @@ -92,6 +93,15 @@ void TextBox::convert(uno::Reference xShape) const aPropertyValue.Value = uno::makeAny(double(rFont.monSize.get()) / 2.); aPropVec.push_back(aPropertyValue); } + if (rFont.monSpacing.has()) + { + aPropertyValue.Name = "CharKerning"; + // Value is not converted to mm100: SvxKerningItem::PutValue() gets + // called with nMemberId = 0, so no mm100 -> twips conversion will + // be done there. + aPropertyValue.Value = uno::makeAny(sal_Int16(rFont.monSpacing.get())); + aPropVec.push_back(aPropertyValue); + } if (rParagraph.moParaAdjust.has()) { style::ParagraphAdjust eAdjust = style::ParagraphAdjust_LEFT; diff --git a/oox/source/vml/vmltextboxcontext.cxx b/oox/source/vml/vmltextboxcontext.cxx index 2720450698a2..5c7e2f751ffb 100644 --- a/oox/source/vml/vmltextboxcontext.cxx +++ b/oox/source/vml/vmltextboxcontext.cxx @@ -132,6 +132,16 @@ void TextPortionContext::onStartElement(const AttributeList& rAttribs) case OOX_TOKEN(doc, color): maFont.moColor = rAttribs.getString( OOX_TOKEN(doc, val) ); break; + case OOX_TOKEN(doc, spacing): + maFont.monSpacing = rAttribs.getInteger(OOX_TOKEN(doc, val)); + break; + case OOX_TOKEN(doc, r): + case OOX_TOKEN(doc, rPr): + case OOX_TOKEN(doc, t): + break; + default: + SAL_INFO("oox", "unhandled: 0x" << std::hex<< getCurrentElement()); + break; } } diff --git a/sw/qa/extras/ooxmlimport/data/groupshape-sdt.docx b/sw/qa/extras/ooxmlimport/data/groupshape-sdt.docx new file mode 100755 index 0000000000000000000000000000000000000000..072984779d72fc2372718cb87e7571c9459d3aba GIT binary patch literal 10742 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 literal 0 HcmV?d00001 diff --git a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx index 08b2bfcba189..b933e856b58d 100644 --- a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx +++ b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx @@ -132,6 +132,7 @@ public: void testTablePagebreak(); void testFdo68607(); void testVmlTextVerticalAdjust(); + void testGroupshapeSdt(); CPPUNIT_TEST_SUITE(Test); #if !defined(MACOSX) && !defined(WNT) @@ -230,6 +231,7 @@ void Test::run() {"table-pagebreak.docx", &Test::testTablePagebreak}, {"fdo68607.docx", &Test::testFdo68607}, {"vml-text-vertical-adjust.docx", &Test::testVmlTextVerticalAdjust}, + {"groupshape-sdt.docx", &Test::testGroupshapeSdt}, }; header(); for (unsigned int i = 0; i < SAL_N_ELEMENTS(aMethods); ++i) @@ -1551,6 +1553,20 @@ void Test::testVmlTextVerticalAdjust() CPPUNIT_ASSERT_EQUAL(drawing::TextVerticalAdjust_TOP, getProperty(xShape, "TextVerticalAdjust")); } +void Test::testGroupshapeSdt() +{ + // All problems here are due to the groupshape: we have a drawinglayer rectangle, not a writer textframe. + uno::Reference xOuterGroupShape(getShape(1), uno::UNO_QUERY); + uno::Reference xInnerGroupShape(xOuterGroupShape->getByIndex(0), uno::UNO_QUERY); + uno::Reference xShape(xInnerGroupShape->getByIndex(0), uno::UNO_QUERY); + // Border distances were not implemented, this was 0. + CPPUNIT_ASSERT_EQUAL(sal_Int32(1905), getProperty(xShape, "TextUpperDistance")); + // Sdt field result wasn't imported, this was "". + CPPUNIT_ASSERT_EQUAL(OUString("placeholder text"), xShape->getString()); + // w:spacing was ignored in oox, this was 0. + CPPUNIT_ASSERT_EQUAL(sal_Int32(20), getProperty(getRun(getParagraphOfText(1, xShape->getText()), 1), "CharKerning")); +} + CPPUNIT_TEST_SUITE_REGISTRATION(Test); CPPUNIT_PLUGIN_IMPLEMENT();