writerfilter/source/rtftok/rtfdocumentimpl.cxx | 53 ++++++++++++++++++++----- writerfilter/source/rtftok/rtfdocumentimpl.hxx | 1 2 files changed, 45 insertions(+), 9 deletions(-)
New commits: commit 80bab876c3efce923b98caac2a6373e666664761 Author: Miklos Vajna <vmik...@frugalware.org> Date: Tue Dec 20 12:37:21 2011 +0100 fdo#42109 fix RTF import of fields inside tables (cherry picked from commit 133f4d750a46dc67797d2f23f25a1bb39620d59f) diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx index 4c8648e..aef9966 100644 --- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx +++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx @@ -935,6 +935,11 @@ void RTFDocumentImpl::replayBuffer(RTFBuffer_t& rBuffer) } else if (aPair.first == BUFFER_STARTRUN) Mapper().startCharacterGroup(); + else if (aPair.first == BUFFER_TEXT) + { + sal_uInt8 nValue = aPair.second->getInt(); + Mapper().text(&nValue, 1); + } else if (aPair.first == BUFFER_UTEXT) { OUString aString(aPair.second->getString()); @@ -1002,9 +1007,19 @@ int RTFDocumentImpl::dispatchDestination(RTFKeyword nKeyword) else { sal_uInt8 sFieldStart[] = { 0x13 }; - Mapper().startCharacterGroup(); - Mapper().text(sFieldStart, 1); - Mapper().endCharacterGroup(); + if (!m_pCurrentBuffer) + { + Mapper().startCharacterGroup(); + Mapper().text(sFieldStart, 1); + Mapper().endCharacterGroup(); + } + else + { + m_pCurrentBuffer->push_back(make_pair(BUFFER_STARTRUN, RTFValue::Pointer_t())); + RTFValue::Pointer_t pValue(new RTFValue(*sFieldStart)); + m_pCurrentBuffer->push_back(make_pair(BUFFER_TEXT, pValue)); + m_pCurrentBuffer->push_back(make_pair(BUFFER_ENDRUN, RTFValue::Pointer_t())); + } } m_aStates.top().nDestinationState = DESTINATION_FIELDINSTRUCTION; } @@ -2792,9 +2807,19 @@ int RTFDocumentImpl::popState() if (!m_bEq) { sal_uInt8 sFieldSep[] = { 0x14 }; - Mapper().startCharacterGroup(); - Mapper().text(sFieldSep, 1); - Mapper().endCharacterGroup(); + if (!m_pCurrentBuffer) + { + Mapper().startCharacterGroup(); + Mapper().text(sFieldSep, 1); + Mapper().endCharacterGroup(); + } + else + { + m_pCurrentBuffer->push_back(make_pair(BUFFER_STARTRUN, RTFValue::Pointer_t())); + RTFValue::Pointer_t pValue(new RTFValue(*sFieldSep)); + m_pCurrentBuffer->push_back(make_pair(BUFFER_TEXT, pValue)); + m_pCurrentBuffer->push_back(make_pair(BUFFER_ENDRUN, RTFValue::Pointer_t())); + } } } else if (m_aStates.top().nDestinationState == DESTINATION_FIELDRESULT) @@ -2802,9 +2827,19 @@ int RTFDocumentImpl::popState() if (!m_bEq) { sal_uInt8 sFieldEnd[] = { 0x15 }; - Mapper().startCharacterGroup(); - Mapper().text(sFieldEnd, 1); - Mapper().endCharacterGroup(); + if (!m_pCurrentBuffer) + { + Mapper().startCharacterGroup(); + Mapper().text(sFieldEnd, 1); + Mapper().endCharacterGroup(); + } + else + { + m_pCurrentBuffer->push_back(make_pair(BUFFER_STARTRUN, RTFValue::Pointer_t())); + RTFValue::Pointer_t pValue(new RTFValue(*sFieldEnd)); + m_pCurrentBuffer->push_back(make_pair(BUFFER_TEXT, pValue)); + m_pCurrentBuffer->push_back(make_pair(BUFFER_ENDRUN, RTFValue::Pointer_t())); + } } else m_bEq = false; diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.hxx b/writerfilter/source/rtftok/rtfdocumentimpl.hxx index 4370d9a..8013677 100644 --- a/writerfilter/source/rtftok/rtfdocumentimpl.hxx +++ b/writerfilter/source/rtftok/rtfdocumentimpl.hxx @@ -135,6 +135,7 @@ namespace writerfilter { BUFFER_PROPS, BUFFER_CELLEND, BUFFER_STARTRUN, + BUFFER_TEXT, BUFFER_UTEXT, BUFFER_ENDRUN, BUFFER_PAR _______________________________________________ Libreoffice-commits mailing list Libreoffice-commits@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits