diff options
-rw-r--r-- | sw/qa/extras/rtfexport/data/tdf98806.rtf | 11 | ||||
-rw-r--r-- | sw/qa/extras/rtfexport/rtfexport.cxx | 8 | ||||
-rw-r--r-- | writerfilter/source/rtftok/rtfdocumentimpl.cxx | 14 |
3 files changed, 29 insertions, 4 deletions
diff --git a/sw/qa/extras/rtfexport/data/tdf98806.rtf b/sw/qa/extras/rtfexport/data/tdf98806.rtf new file mode 100644 index 000000000000..e356682b30a4 --- /dev/null +++ b/sw/qa/extras/rtfexport/data/tdf98806.rtf @@ -0,0 +1,11 @@ +{\rtf1 +\trowd\cellx4000\cellx8000\pard\plain\intbl +A1\cell AAA +{\*\bkmkstart bookmark} +BBB +{\*\bkmkend bookmark} +CCC\cell +\row +\pard\plain +\par +} diff --git a/sw/qa/extras/rtfexport/rtfexport.cxx b/sw/qa/extras/rtfexport/rtfexport.cxx index 08250349b44e..11b92e8c13af 100644 --- a/sw/qa/extras/rtfexport/rtfexport.cxx +++ b/sw/qa/extras/rtfexport/rtfexport.cxx @@ -983,6 +983,14 @@ DECLARE_RTFEXPORT_TEST(testTdf96175, "tdf96175.rtf") CPPUNIT_ASSERT_EQUAL(OUString("foobar"), getProperty<OUString>(xUserDefinedProperties, "Company")); } +DECLARE_RTFEXPORT_TEST(testTdf98806, "tdf98806.rtf") +{ + uno::Reference<text::XBookmarksSupplier> xBookmarksSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference<text::XTextContent> xBookmark(xBookmarksSupplier->getBookmarks()->getByName("bookmark"), uno::UNO_QUERY); + // This was empty, bookmark in table wasn't imported correctly. + CPPUNIT_ASSERT_EQUAL(OUString("BBB"), xBookmark->getAnchor()->getString()); +} + CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx index cc01274a68e8..bb1991d95d98 100644 --- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx +++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx @@ -156,7 +156,7 @@ static OString lcl_DTTM22OString(long lDTTM) return DateTimeToOString(msfilter::util::DTTM2DateTime(lDTTM)); } -static writerfilter::Reference<Properties>::Pointer_t lcl_getBookmarkProperties(int nPos, OUString& rString) +static RTFSprms lcl_getBookmarkProperties(int nPos, OUString& rString) { RTFSprms aAttributes; auto pPos = std::make_shared<RTFValue>(nPos); @@ -167,7 +167,7 @@ static writerfilter::Reference<Properties>::Pointer_t lcl_getBookmarkProperties( aAttributes.set(NS_ooxml::LN_CT_Bookmark_name, pString); } aAttributes.set(NS_ooxml::LN_CT_MarkupRangeBookmark_id, pPos); - return std::make_shared<RTFReferenceProperties>(aAttributes); + return aAttributes; } static const char* lcl_RtfToString(RTFKeyword nKeyword) @@ -5313,7 +5313,10 @@ RTFError RTFDocumentImpl::popState() OUString aStr = m_aStates.top().pDestinationText->makeStringAndClear(); int nPos = m_aBookmarks.size(); m_aBookmarks[aStr] = nPos; - Mapper().props(lcl_getBookmarkProperties(nPos, aStr)); + if (!m_aStates.top().pCurrentBuffer) + Mapper().props(std::make_shared<RTFReferenceProperties>(lcl_getBookmarkProperties(nPos, aStr))); + else + m_aStates.top().pCurrentBuffer->push_back(Buf_t(BUFFER_PROPS, std::make_shared<RTFValue>(lcl_getBookmarkProperties(nPos, aStr)), nullptr)); } break; case Destination::BOOKMARKEND: @@ -5321,7 +5324,10 @@ RTFError RTFDocumentImpl::popState() if (&m_aStates.top().aDestinationText != m_aStates.top().pDestinationText) break; // not for nested group OUString aStr = m_aStates.top().pDestinationText->makeStringAndClear(); - Mapper().props(lcl_getBookmarkProperties(m_aBookmarks[aStr], aStr)); + if (!m_aStates.top().pCurrentBuffer) + Mapper().props(std::make_shared<RTFReferenceProperties>(lcl_getBookmarkProperties(m_aBookmarks[aStr], aStr))); + else + m_aStates.top().pCurrentBuffer->push_back(Buf_t(BUFFER_PROPS, std::make_shared<RTFValue>(lcl_getBookmarkProperties(m_aBookmarks[aStr], aStr)), nullptr)); } break; case Destination::INDEXENTRY: |