tdf#142235 PPTX export: fix styles with placeholders

inserting icons and alignment.

Regression from commit b6b02e0b4c9d739836e1f61a886ea45b01e6696e
(tdf#111903 tdf#137152 PPTX export: fix placeholders).

Note: in the unit test document, check fixed vertical position
of the second text boxes of Slide 2–4.

Change-Id: I3c649db69f94a2e9f49ae7aa11d9cd9d9f6d80d7
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/116828
Tested-by: László Németh <nemeth@numbertext.org>
Reviewed-by: László Németh <nemeth@numbertext.org>
diff --git a/oox/source/export/drawingml.cxx b/oox/source/export/drawingml.cxx
index 455e501..140445a 100644
--- a/oox/source/export/drawingml.cxx
+++ b/oox/source/export/drawingml.cxx
@@ -3081,8 +3081,7 @@ void DrawingML::WriteText(const Reference<XInterface>& rXIface, bool bBodyPr, bo
    const char* sVerticalAlignment = nullptr;
    if (GetProperty(rXPropSet, "TextVerticalAdjust"))
        mAny >>= eVerticalAlignment;
    if( eVerticalAlignment != TextVerticalAdjust_TOP )
        sVerticalAlignment = GetTextVerticalAdjust(eVerticalAlignment);
    sVerticalAlignment = GetTextVerticalAdjust(eVerticalAlignment);

    const char* sWritingMode = nullptr;
    bool bVertical = false;
diff --git a/sd/qa/unit/data/odp/placeholder-box-textalignment.odp b/sd/qa/unit/data/odp/placeholder-box-textalignment.odp
new file mode 100644
index 0000000..df33291
--- /dev/null
+++ b/sd/qa/unit/data/odp/placeholder-box-textalignment.odp
Binary files differ
diff --git a/sd/qa/unit/export-tests-ooxml3.cxx b/sd/qa/unit/export-tests-ooxml3.cxx
index fb2db18..6632934 100644
--- a/sd/qa/unit/export-tests-ooxml3.cxx
+++ b/sd/qa/unit/export-tests-ooxml3.cxx
@@ -116,6 +116,7 @@ public:
    void testTdf125560_textDeflate();
    void testTdf125560_textInflateTop();
    void testTdf96061_textHighlight();
    void testTdf142235_TestPlaceholderTextAlignment();

    CPPUNIT_TEST_SUITE(SdOOXMLExportTest3);

@@ -184,6 +185,7 @@ public:
    CPPUNIT_TEST(testTdf125560_textDeflate);
    CPPUNIT_TEST(testTdf125560_textInflateTop);
    CPPUNIT_TEST(testTdf96061_textHighlight);
    CPPUNIT_TEST(testTdf142235_TestPlaceholderTextAlignment);
    CPPUNIT_TEST_SUITE_END();

    virtual void registerNamespaces(xmlXPathContextPtr& pXmlXPathCtx) override
@@ -1688,6 +1690,24 @@ void SdOOXMLExportTest3::testTdf125560_textInflateTop()
                "type", "mso-spt164");
}

void SdOOXMLExportTest3::testTdf142235_TestPlaceholderTextAlignment()
{
    auto xDocShRef = loadURL(
        m_directories.getURLFromSrc(u"sd/qa/unit/data/odp/placeholder-box-textalignment.odp"), ODP);

    utl::TempFile tmpfile;
    xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tmpfile);
    xDocShRef->DoClose();

    xmlDocUniquePtr pXml1 = parseExport(tmpfile, "ppt/slides/slide2.xml");
    xmlDocUniquePtr pXml2 = parseExport(tmpfile, "ppt/slides/slide3.xml");

    // Without the fix in place many of these asserts failed, because alignment was bad.

    assertXPath(pXml1, "/p:sld/p:cSld/p:spTree/p:sp[2]/p:txBody/a:bodyPr", "anchor", "t");
    assertXPath(pXml2, "/p:sld/p:cSld/p:spTree/p:sp[2]/p:txBody/a:bodyPr", "anchor", "t");
}

void SdOOXMLExportTest3::testTdf96061_textHighlight()
{
    ::sd::DrawDocShellRef xDocShRef
diff --git a/sd/source/filter/eppt/pptx-epptooxml.cxx b/sd/source/filter/eppt/pptx-epptooxml.cxx
index d26cf6b..ac7449f 100644
--- a/sd/source/filter/eppt/pptx-epptooxml.cxx
+++ b/sd/source/filter/eppt/pptx-epptooxml.cxx
@@ -1568,14 +1568,25 @@ ShapeExport& PowerPointShapeExport::WritePlaceholderShape(const Reference< XShap
    SAL_INFO("sd.eppt", "write placeholder " << pType);
    if (bUsePlaceholderIndex)
    {
        mpFS->singleElementNS(
            XML_p, XML_ph, XML_type, pType, XML_idx,
            OString::number(
                static_cast<PowerPointExport*>(GetFB())->CreateNewPlaceholderIndex(xShape)));
        if ((mePageType == PageType::LAYOUT || mePageType == PageType::NORMAL)
            && ePlaceholder == Outliner)
            mpFS->singleElementNS(
                XML_p, XML_ph, XML_idx,
                OString::number(
                    static_cast<PowerPointExport*>(GetFB())->CreateNewPlaceholderIndex(xShape)));
        else
            mpFS->singleElementNS(
                XML_p, XML_ph, XML_type, pType, XML_idx,
                OString::number(
                    static_cast<PowerPointExport*>(GetFB())->CreateNewPlaceholderIndex(xShape)));
    }
    else
    {
        mpFS->singleElementNS(XML_p, XML_ph, XML_type, pType);
        if ((mePageType == PageType::LAYOUT || mePageType == PageType::NORMAL)
            && ePlaceholder == Outliner)
            mpFS->singleElementNS(XML_p, XML_ph);
        else
            mpFS->singleElementNS(XML_p, XML_ph, XML_type, pType);
    }
    mpFS->endElementNS(XML_p, XML_nvPr);
    mpFS->endElementNS(XML_p, XML_nvSpPr);