[Libreoffice-commits] core.git: Branch 'libreoffice-6-4' - oox/CppunitTest_oox_vml.mk oox/Module_oox.mk oox/qa oox/source

Miklos Vajna (via logerrit) logerrit at kemper.freedesktop.org
Tue Dec 3 16:28:23 UTC 2019


 oox/CppunitTest_oox_vml.mk                  |   45 ++++++++++++++
 oox/Module_oox.mk                           |    1 
 oox/qa/unit/data/layout-flow-alt-alone.docx |binary
 oox/qa/unit/vml.cxx                         |   89 ++++++++++++++++++++++++++++
 oox/source/vml/vmlshape.cxx                 |   16 +++--
 5 files changed, 145 insertions(+), 6 deletions(-)

New commits:
commit a1989fc85da8ae15e9ebb227edb845572e679b2b
Author:     Miklos Vajna <vmiklos at collabora.com>
AuthorDate: Mon Dec 2 21:01:19 2019 +0100
Commit:     Miklos Vajna <vmiklos at collabora.com>
CommitDate: Tue Dec 3 17:27:22 2019 +0100

    tdf#128429 VML import: let mso-layout-flow-alt:bottom-to-top imply vertical
    
    Normally layout flow is set to vertical to denote TBRL, and then
    optionally there is a layout flow alt to denote BTLR, but the bugdoc
    shows that the first may be missing.
    
    So map to BTLR even in case only the alt layout flow is found in the
    file.
    
    (cherry picked from commit ca7004569b39721c3e7247551a43d544fd3204fe)
    
    Conflicts:
            oox/Module_oox.mk
    
    Change-Id: I06fce738fca9aedc0de90ccebda3a24e99425326
    Reviewed-on: https://gerrit.libreoffice.org/84317
    Tested-by: Jenkins
    Reviewed-by: Miklos Vajna <vmiklos at collabora.com>

diff --git a/oox/CppunitTest_oox_vml.mk b/oox/CppunitTest_oox_vml.mk
new file mode 100644
index 000000000000..aa12fa423d65
--- /dev/null
+++ b/oox/CppunitTest_oox_vml.mk
@@ -0,0 +1,45 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+#*************************************************************************
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+#*************************************************************************
+
+$(eval $(call gb_CppunitTest_CppunitTest,oox_vml))
+
+$(eval $(call gb_CppunitTest_use_externals,oox_vml,\
+	boost_headers \
+))
+
+$(eval $(call gb_CppunitTest_add_exception_objects,oox_vml, \
+    oox/qa/unit/vml \
+))
+
+$(eval $(call gb_CppunitTest_use_libraries,oox_vml, \
+    comphelper \
+    cppu \
+    oox \
+    sal \
+    test \
+    unotest \
+    utl \
+))
+
+$(eval $(call gb_CppunitTest_use_sdk_api,oox_vml))
+
+$(eval $(call gb_CppunitTest_use_ure,oox_vml))
+$(eval $(call gb_CppunitTest_use_vcl,oox_vml))
+
+$(eval $(call gb_CppunitTest_use_rdb,oox_vml,services))
+
+$(eval $(call gb_CppunitTest_use_custom_headers,oox_vml,\
+	officecfg/registry \
+))
+
+$(eval $(call gb_CppunitTest_use_configuration,oox_vml))
+
+# vim: set noet sw=4 ts=4:
diff --git a/oox/Module_oox.mk b/oox/Module_oox.mk
index 636f9f6ece99..6bcc596c14ab 100644
--- a/oox/Module_oox.mk
+++ b/oox/Module_oox.mk
@@ -26,6 +26,7 @@ $(eval $(call gb_Module_add_check_targets,oox,\
 	CppunitTest_oox_vba_encryption \
 	CppunitTest_oox_crypto \
 	CppunitTest_oox_mathml \
+	CppunitTest_oox_vml \
 ))
 
 # vim: set noet sw=4 ts=4:
diff --git a/oox/qa/unit/data/layout-flow-alt-alone.docx b/oox/qa/unit/data/layout-flow-alt-alone.docx
new file mode 100644
index 000000000000..59c2db23d588
Binary files /dev/null and b/oox/qa/unit/data/layout-flow-alt-alone.docx differ
diff --git a/oox/qa/unit/vml.cxx b/oox/qa/unit/vml.cxx
new file mode 100644
index 000000000000..ad4e9e229739
--- /dev/null
+++ b/oox/qa/unit/vml.cxx
@@ -0,0 +1,89 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <test/bootstrapfixture.hxx>
+#include <unotest/macros_test.hxx>
+
+#include <com/sun/star/beans/XPropertySet.hpp>
+#include <com/sun/star/drawing/XDrawPagesSupplier.hpp>
+#include <com/sun/star/embed/XStorage.hpp>
+#include <com/sun/star/frame/Desktop.hpp>
+#include <com/sun/star/frame/XStorable.hpp>
+#include <com/sun/star/text/WritingMode2.hpp>
+
+#include <comphelper/embeddedobjectcontainer.hxx>
+#include <comphelper/processfactory.hxx>
+#include <comphelper/propertyvalue.hxx>
+#include <comphelper/scopeguard.hxx>
+#include <comphelper/storagehelper.hxx>
+#include <unotools/mediadescriptor.hxx>
+#include <unotools/tempfile.hxx>
+
+using namespace ::com::sun::star;
+
+char const DATA_DIRECTORY[] = "/oox/qa/unit/data/";
+
+/// oox vml tests.
+class OoxVmlTest : public test::BootstrapFixture, public unotest::MacrosTest
+{
+private:
+    uno::Reference<uno::XComponentContext> mxComponentContext;
+    uno::Reference<lang::XComponent> mxComponent;
+
+public:
+    void setUp() override;
+    void tearDown() override;
+    uno::Reference<lang::XComponent>& getComponent() { return mxComponent; }
+    void load(const OUString& rURL);
+};
+
+void OoxVmlTest::setUp()
+{
+    test::BootstrapFixture::setUp();
+
+    mxComponentContext.set(comphelper::getComponentContext(getMultiServiceFactory()));
+    mxDesktop.set(frame::Desktop::create(mxComponentContext));
+}
+
+void OoxVmlTest::tearDown()
+{
+    if (mxComponent.is())
+        mxComponent->dispose();
+
+    test::BootstrapFixture::tearDown();
+}
+
+void OoxVmlTest::load(const OUString& rFileName)
+{
+    OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + rFileName;
+    mxComponent = loadFromDesktop(aURL);
+}
+
+CPPUNIT_TEST_FIXTURE(OoxVmlTest, testLayoutFlowAltAlone)
+{
+    // mso-layout-flow-alt:bottom-to-top without a matching layout-flow:vertical.
+    load("layout-flow-alt-alone.docx");
+
+    uno::Reference<drawing::XDrawPagesSupplier> xDrawPagesSupplier(getComponent(), uno::UNO_QUERY);
+    uno::Reference<drawing::XDrawPage> xDrawPage(xDrawPagesSupplier->getDrawPages()->getByIndex(0),
+                                                 uno::UNO_QUERY);
+    uno::Reference<beans::XPropertySet> xShape(xDrawPage->getByIndex(0), uno::UNO_QUERY);
+    sal_Int16 nWritingMode = 0;
+    xShape->getPropertyValue("WritingMode") >>= nWritingMode;
+
+    // Without the accompanying fix in place, this test would have failed with:
+    // - Expected: 5 [ BTLR ]
+    // - Actual  : 4 [ PAGE ]
+    // i.e. in case layout-flow:vertical was missing, the text was not vertical.
+    CPPUNIT_ASSERT_EQUAL(text::WritingMode2::BT_LR, nWritingMode);
+}
+
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/oox/source/vml/vmlshape.cxx b/oox/source/vml/vmlshape.cxx
index e27700fec895..1078fd330a64 100644
--- a/oox/source/vml/vmlshape.cxx
+++ b/oox/source/vml/vmlshape.cxx
@@ -728,13 +728,17 @@ Reference< XShape > SimpleShape::implConvertAndInsert( const Reference< XShapes
             PropertySet( xShape ).setAnyProperty( PROP_BottomBorderDistance, makeAny( sal_Int32( getTextBox()->borderDistanceBottom )));
         }
 
-        if (getTextBox()->maLayoutFlow == "vertical")
+        sal_Int16 nWritingMode = text::WritingMode2::LR_TB;
+        if (getTextBox()->maLayoutFlow == "vertical" && maTypeModel.maLayoutFlowAlt.isEmpty())
+        {
+            nWritingMode = text::WritingMode2::TB_RL;
+        }
+        else if (maTypeModel.maLayoutFlowAlt == "bottom-to-top")
+        {
+            nWritingMode = text::WritingMode2::BT_LR;
+        }
+        if (nWritingMode != text::WritingMode2::LR_TB)
         {
-            sal_Int16 nWritingMode = text::WritingMode2::TB_RL;
-            if (maTypeModel.maLayoutFlowAlt == "bottom-to-top")
-            {
-                nWritingMode = text::WritingMode2::BT_LR;
-            }
             PropertySet(xShape).setAnyProperty(PROP_WritingMode, uno::makeAny(nWritingMode));
         }
     }


More information about the Libreoffice-commits mailing list