writerfilter/source/rtftok/rtfdocumentimpl.cxx | 15 +++++++++++++++ writerfilter/source/rtftok/rtfdocumentimpl.hxx | 2 ++ 2 files changed, 17 insertions(+)
New commits: commit e08ab74b918be1473d91ed234ee7870cab137c7e Author: Miklos Vajna <vmik...@suse.cz> Date: Mon Jun 11 12:17:10 2012 +0200 fdo#49659 handle RTF import of tables at the very end of the document If the documents ends with a table, both Word/Writer produces a non-table empty paragraph after that table. However, it's valid not to emit that empty paragraph, so handle the situation in the importer. Change-Id: I8ea163f2de62954f3891f8f48e81d89f6e29ce6f diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx index c2c1b60..caff491 100644 --- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx +++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx @@ -249,6 +249,7 @@ RTFDocumentImpl::RTFDocumentImpl(uno::Reference<uno::XComponentContext> const& x m_bNeedPap(true), m_bNeedCr(false), m_bNeedPar(true), + m_bNeedFinalPar(false), m_aListTableSprms(), m_aSettingsTableAttributes(), m_aSettingsTableSprms(), @@ -481,6 +482,12 @@ void RTFDocumentImpl::sectBreak(bool bFinal = false) // If there is no paragraph in this section, then insert a dummy one, as required by Writer if (m_bNeedPar) dispatchSymbol(RTF_PAR); + // It's allowed to not have a non-table paragraph at the end of an RTF doc, add it now if required. + if (m_bNeedFinalPar && bFinal) + { + dispatchFlag(RTF_PARD); + dispatchSymbol(RTF_PAR); + } while (m_nHeaderFooterPositions.size()) { std::pair<Id, sal_uInt32> aPair = m_nHeaderFooterPositions.front(); @@ -1437,6 +1444,7 @@ int RTFDocumentImpl::dispatchSymbol(RTFKeyword nKeyword) m_bNeedPap = true; if (!m_aStates.top().aFrame.inFrame()) m_bNeedPar = false; + m_bNeedFinalPar = false; } break; case RTF_SECT: @@ -1541,6 +1549,7 @@ int RTFDocumentImpl::dispatchSymbol(RTFKeyword nKeyword) tableBreak(); m_bNeedPap = true; + m_bNeedFinalPar = true; m_aTableBuffer.clear(); m_aStates.top().nCells = 0; m_aStates.top().aTableCellsSprms.clear(); diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.hxx b/writerfilter/source/rtftok/rtfdocumentimpl.hxx index 93ed15d..9bb994d 100644 --- a/writerfilter/source/rtftok/rtfdocumentimpl.hxx +++ b/writerfilter/source/rtftok/rtfdocumentimpl.hxx @@ -444,6 +444,8 @@ namespace writerfilter { /// If we need to emit a CR at the end of substream. bool m_bNeedCr; bool m_bNeedPar; + /// If set, an empty paragraph will be added at the end of the document. + bool m_bNeedFinalPar; /// The list table and list override table combined. RTFSprms m_aListTableSprms; /// The settings table attributes. commit c5c3ce5e625a31d78a21fbbc339ee30ba99f3044 Author: Miklos Vajna <vmik...@suse.cz> Date: Mon Jun 11 11:19:19 2012 +0200 fdo#49659 fix RTF import of pictures with inner groups One would think that with {\pict{\foo1}}, the inner group has no effect in the outer group, but this turns out to be valid, so we should handle it as well. Change-Id: I64b933ad1cd5946f22d27669e9240d9e1875bde3 diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx index b2a6962..c2c1b60 100644 --- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx +++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx @@ -620,6 +620,10 @@ int RTFDocumentImpl::resolvePict(bool bInline) else pStream = m_pBinaryData.get(); + if (!pStream->Tell()) + // No destination text? Then we'll get it later. + return 0; + // Store, and get its URL. pStream->Seek(0); uno::Reference<io::XInputStream> xInputStream(new utl::OInputStreamWrapper(pStream)); @@ -3529,6 +3533,8 @@ int RTFDocumentImpl::popState() if (aState.nFieldStatus == FIELD_INSTRUCTION) singleChar(0x15); } + else if (m_aStates.size() && m_aStates.top().nDestinationState == DESTINATION_PICT) + m_aStates.top().aPicture = aState.aPicture; else if (bPopShapeProperties) { m_aStates.top().aShape = aShape; _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits