summaryrefslogtreecommitdiff
path: root/writerfilter/source
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2016-03-31 08:37:43 +0200
committerAndras Timar <andras.timar@collabora.com>2016-04-14 08:16:11 +0000
commit7dece94d6aa122d69e9740b93597d13347b5cb11 (patch)
treeec64510c86463c74985a707141812494111a7768 /writerfilter/source
parent168e55d3d05224c790824ec71677ff787371ad48 (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. (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 <ci@libreoffice.org> Reviewed-by: Andras Timar <andras.timar@collabora.com>
Diffstat (limited to 'writerfilter/source')
-rw-r--r--writerfilter/source/rtftok/rtfdocumentimpl.cxx14
1 files changed, 10 insertions, 4 deletions
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: