diff options
author | Miklos Vajna <vmiklos@collabora.co.uk> | 2016-03-31 08:37:43 +0200 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.co.uk> | 2016-03-31 08:38:05 +0200 |
commit | 3d922d7da4fa11b8c22bbdffd141fa1398b2fcd4 (patch) | |
tree | da22f6bb8fd88444c288f902ba7a7637721aa8e4 /writerfilter/source/rtftok/rtfdocumentimpl.cxx | |
parent | e944b64a3ec3b6dbe8d91638eb46478d6f88d8dc (diff) |
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.
Change-Id: I40eeb85b61d2ae9138cd666d4a6a3c08eda47da3
Diffstat (limited to 'writerfilter/source/rtftok/rtfdocumentimpl.cxx')
-rw-r--r-- | writerfilter/source/rtftok/rtfdocumentimpl.cxx | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx index d0631c59c310..06dc99a05283 100644 --- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx +++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx @@ -161,7 +161,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); @@ -172,7 +172,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) @@ -5357,7 +5357,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: @@ -5365,7 +5368,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: |