sw/qa/extras/rtfexport/data/tdf98806.rtf | 11 +++++++++++ sw/qa/extras/rtfexport/rtfexport.cxx | 8 ++++++++ writerfilter/source/rtftok/rtfdocumentimpl.cxx | 14 ++++++++++---- 3 files changed, 29 insertions(+), 4 deletions(-)
New commits: commit 7dece94d6aa122d69e9740b93597d13347b5cb11 Author: Miklos Vajna <vmik...@collabora.co.uk> Date: Thu Mar 31 08:37:43 2016 +0200 tdf#98806 RTF import: handle bookmarks in table text Mapper().props() was called directly, so all bookmarks pointed to the start of the A1 cell instead of the correct text range. (cherry picked from commit 3d922d7da4fa11b8c22bbdffd141fa1398b2fcd4) Conflicts: sw/qa/extras/rtfexport/rtfexport.cxx Change-Id: I40eeb85b61d2ae9138cd666d4a6a3c08eda47da3 Reviewed-on: https://gerrit.libreoffice.org/23913 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Andras Timar <andras.ti...@collabora.com> diff --git a/sw/qa/extras/rtfexport/data/tdf98806.rtf b/sw/qa/extras/rtfexport/data/tdf98806.rtf new file mode 100644 index 0000000..e356682 --- /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 0825034..11b92e8 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 cc01274..bb1991d 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: _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits