[Libreoffice-commits] core.git: sw/qa writerfilter/source

Justin Luth (via logerrit) logerrit at kemper.freedesktop.org
Tue Aug 13 04:35:40 UTC 2019


 sw/qa/extras/ooxmlexport/ooxmlexport4.cxx         |   14 ++++++-
 writerfilter/source/dmapper/DomainMapper_Impl.cxx |   39 +++++++++++++---------
 2 files changed, 35 insertions(+), 18 deletions(-)

New commits:
commit 75b10a6c36267c30ae01c850b2a2f9ee99b74e43
Author:     Justin Luth <justin.luth at collabora.com>
AuthorDate: Wed Aug 7 15:51:07 2019 +0300
Commit:     Justin Luth <justin_luth at sil.org>
CommitDate: Tue Aug 13 06:35:03 2019 +0200

    tdf#114854 writerfilter: EditEng URLs import different from SW URLs
    
    The only example I found was comments (aka annotations/postits).
    No other unit tests had a URL in a draw component.
    
    Change-Id: Iad5c285090d646c495cd2a7b19e076d9e50fb58d
    Reviewed-on: https://gerrit.libreoffice.org/77108
    Tested-by: Jenkins
    Reviewed-by: Justin Luth <justin_luth at sil.org>

diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport4.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport4.cxx
index 140c90723a1a..ddc71edc6861 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport4.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport4.cxx
@@ -14,6 +14,7 @@
 #include <com/sun/star/drawing/FillStyle.hpp>
 #include <com/sun/star/drawing/XControlShape.hpp>
 #include <com/sun/star/text/RelOrientation.hpp>
+#include <com/sun/star/text/XTextField.hpp>
 #include <com/sun/star/text/XTextTable.hpp>
 #include <com/sun/star/text/XTextViewCursorSupplier.hpp>
 #include <com/sun/star/text/XTextColumns.hpp>
@@ -811,9 +812,16 @@ DECLARE_OOXMLEXPORT_TEST(testParagraphWithComments, "paragraphWithComments.docx"
 
 DECLARE_OOXMLEXPORT_TEST(testTdf104707_urlComment, "tdf104707_urlComment.odt")
 {
-    xmlDocPtr pXmlComm = parseExport("word/comments.xml");
-    CPPUNIT_ASSERT(pXmlComm);
-    CPPUNIT_ASSERT_EQUAL( OUString("https://bugs.documentfoundation.org/show_bug.cgi?id=104707"), getXPathContent(pXmlComm,"/w:comments/w:comment/w:p/w:hyperlink/w:r/w:t") );
+    uno::Reference<text::XTextFieldsSupplier> xTextFieldsSupplier(mxComponent, uno::UNO_QUERY);
+    uno::Reference<container::XEnumerationAccess> xFieldsAccess(xTextFieldsSupplier->getTextFields());
+    uno::Reference<container::XEnumeration> xFields(xFieldsAccess->createEnumeration());
+    auto aField1 = xFields->nextElement();
+    // the comment/annotation/postit text
+    auto xText = getProperty< uno::Reference<text::XText> >(aField1, "TextRange");
+    // the hyperlink within the comment text
+    auto xURLField = getProperty< uno::Reference<text::XTextField> >(xText, "TextField");
+    auto aURL = getProperty< OUString >(xURLField, "URL");
+    CPPUNIT_ASSERT_EQUAL(OUString("https://bugs.documentfoundation.org/show_bug.cgi?id=104707"), aURL);
 }
 
 DECLARE_OOXMLEXPORT_TEST(testOLEObjectinHeader, "2129393649.docx")
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index e077d2bed52f..7e4728af2bac 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -71,6 +71,8 @@
 #include <com/sun/star/text/XTextColumns.hpp>
 #include <com/sun/star/awt/CharSet.hpp>
 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <editeng/flditem.hxx>
+#include <editeng/unotext.hxx>
 #include <o3tl/temporary.hxx>
 #include <oox/mathml/import.hxx>
 #include <rtl/uri.hxx>
@@ -5247,24 +5249,31 @@ void DomainMapper_Impl::PopFieldContext()
                         {
                             xCrsr->gotoEnd( true );
 
-                            uno::Reference< beans::XPropertySet > xCrsrProperties( xCrsr, uno::UNO_QUERY_THROW );
-                            xCrsrProperties->setPropertyValue(getPropertyName(PROP_HYPER_LINK_U_R_L), uno::
-                                                              makeAny(pContext->GetHyperlinkURL()));
-
-                            if (!pContext->GetHyperlinkTarget().isEmpty())
-                                xCrsrProperties->setPropertyValue("HyperLinkTarget", uno::makeAny(pContext->GetHyperlinkTarget()));
-
-                            if (m_bStartTOC) {
-                                OUString sDisplayName("Index Link");
-                                xCrsrProperties->setPropertyValue("VisitedCharStyleName",uno::makeAny(sDisplayName));
-                                xCrsrProperties->setPropertyValue("UnvisitedCharStyleName",uno::makeAny(sDisplayName));
-                            }
+                            // Draw components (like comments) need hyperlinks set differently
+                            SvxUnoTextRangeBase* pDrawText = dynamic_cast<SvxUnoTextRangeBase*>(xCrsr.get());
+                            if ( pDrawText )
+                                pDrawText->attachField( std::make_unique<SvxURLField>(pContext->GetHyperlinkURL(), xCrsr->getString(), SvxURLFormat::AppDefault) );
                             else
                             {
-                                if (!pContext->GetHyperlinkStyle().isEmpty())
+                                uno::Reference< beans::XPropertySet > xCrsrProperties( xCrsr, uno::UNO_QUERY_THROW );
+                                xCrsrProperties->setPropertyValue(getPropertyName(PROP_HYPER_LINK_U_R_L), uno::
+                                                                  makeAny(pContext->GetHyperlinkURL()));
+
+                                if (!pContext->GetHyperlinkTarget().isEmpty())
+                                    xCrsrProperties->setPropertyValue("HyperLinkTarget", uno::makeAny(pContext->GetHyperlinkTarget()));
+
+                                if (m_bStartTOC) {
+                                    OUString sDisplayName("Index Link");
+                                    xCrsrProperties->setPropertyValue("VisitedCharStyleName",uno::makeAny(sDisplayName));
+                                    xCrsrProperties->setPropertyValue("UnvisitedCharStyleName",uno::makeAny(sDisplayName));
+                                }
+                                else
                                 {
-                                    xCrsrProperties->setPropertyValue("VisitedCharStyleName", uno::makeAny(pContext->GetHyperlinkStyle()));
-                                    xCrsrProperties->setPropertyValue("UnvisitedCharStyleName", uno::makeAny(pContext->GetHyperlinkStyle()));
+                                    if (!pContext->GetHyperlinkStyle().isEmpty())
+                                    {
+                                        xCrsrProperties->setPropertyValue("VisitedCharStyleName", uno::makeAny(pContext->GetHyperlinkStyle()));
+                                        xCrsrProperties->setPropertyValue("UnvisitedCharStyleName", uno::makeAny(pContext->GetHyperlinkStyle()));
+                                    }
                                 }
                             }
                         }


More information about the Libreoffice-commits mailing list