sw/qa/extras/ww8export/data/tdf142840.odt |binary
 sw/qa/extras/ww8export/ww8export3.cxx     |   17 +++++++++++++++++
 sw/source/filter/ww8/wrtw8nds.cxx         |    7 +++++--
 3 files changed, 22 insertions(+), 2 deletions(-)

New commits:
commit d45315c8eb91862958b29ead09cec58e03a80096
Author:     Vasily Melenchuk <vasily.melenc...@cib.de>
AuthorDate: Fri Apr 29 11:10:48 2022 +0300
Commit:     Thorsten Behrens <thorsten.behr...@allotropia.de>
CommitDate: Thu May 12 03:27:45 2022 +0200

    tdf#142840: doc export: use BookmarkToWord() for hyperlinks
    
    Inernal hyperlinks to bookmarks should not contain spaces. This
    is not required for RTF or DOC: MS Word is okay with spaces there
    (unlike in DOCX). But since we are replacing spaces in bookmark
    names we should do this also in links to these bookmarks.
    
    Change-Id: I7a3e530817572ed53032c2be1ad96f8e8498bac3
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/133590
    Tested-by: Jenkins
    Reviewed-by: Thorsten Behrens <thorsten.behr...@allotropia.de>

diff --git a/sw/qa/extras/ww8export/data/tdf142840.odt 
b/sw/qa/extras/ww8export/data/tdf142840.odt
new file mode 100644
index 000000000000..27af4cdb5e6a
Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf142840.odt differ
diff --git a/sw/qa/extras/ww8export/ww8export3.cxx 
b/sw/qa/extras/ww8export/ww8export3.cxx
index 4e6cfd65924a..067d3486ec00 100644
--- a/sw/qa/extras/ww8export/ww8export3.cxx
+++ b/sw/qa/extras/ww8export/ww8export3.cxx
@@ -1082,6 +1082,23 @@ CPPUNIT_TEST_FIXTURE(Test, testClearingBreak)
     verify();
 }
 
+DECLARE_WW8EXPORT_TEST(testTdf142840, "tdf142840.odt")
+{
+    CPPUNIT_ASSERT_EQUAL(1, getPages());
+
+    uno::Reference<text::XBookmarksSupplier> xBookmarksSupplier(mxComponent, 
uno::UNO_QUERY);
+    uno::Reference<container::XIndexAccess> 
xBookmarksByIdx(xBookmarksSupplier->getBookmarks(), uno::UNO_QUERY);
+    uno::Reference<container::XNameAccess> xBookmarksByName = 
xBookmarksSupplier->getBookmarks();
+
+    // Ensure space are replaced by underscore in bookmark name (it was 
working before, but ensure this)
+    CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(1), 
xBookmarksByIdx->getCount());
+    CPPUNIT_ASSERT(xBookmarksByName->hasByName("Chapter_1"));
+    CPPUNIT_ASSERT(!xBookmarksByName->hasByName("Chapter 1"));
+
+    // And hyperlink is referring bookmark with underscore also (this was 
broken)
+    CPPUNIT_ASSERT_EQUAL(OUString("#Chapter_1"), 
getProperty<OUString>(getRun(getParagraph(1), 1), "HyperLinkURL"));
+}
+
 CPPUNIT_PLUGIN_IMPLEMENT();
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/source/filter/ww8/wrtw8nds.cxx 
b/sw/source/filter/ww8/wrtw8nds.cxx
index 5da3ca9fbee5..63786a219948 100644
--- a/sw/source/filter/ww8/wrtw8nds.cxx
+++ b/sw/source/filter/ww8/wrtw8nds.cxx
@@ -1019,8 +1019,11 @@ bool WW8AttributeOutput::AnalyzeURL( const OUString& 
rUrl, const OUString& rTarg
     if ( !sURL.isEmpty() )
         sURL = URIHelper::simpleNormalizedMakeRelative( 
m_rWW8Export.GetWriter().GetBaseURL(), sURL );
 
-    if ( bBookMarkOnly )
-        sURL = FieldString( ww::eHYPERLINK );
+    if (bBookMarkOnly)
+    {
+        sURL = FieldString(ww::eHYPERLINK);
+        *pMark = BookmarkToWord(*pMark);
+    }
     else
         sURL = FieldString( ww::eHYPERLINK ) + "\"" + sURL + "\"";
 

Reply via email to