writerfilter/source/dmapper/DomainMapper.cxx | 4 ++-- writerfilter/source/dmapper/DomainMapper_Impl.cxx | 21 +++++++++++++++++---- writerfilter/source/dmapper/DomainMapper_Impl.hxx | 7 ++++++- 3 files changed, 25 insertions(+), 7 deletions(-)
New commits: commit 9a32be03681a595ce075e6fc6d6c60494a70a2fb Author: Michael Stahl <mst...@redhat.com> Date: Sun Mar 2 00:32:17 2014 +0100 fdo#47811: RTF import: fix Database field content 1. the Database field master does not have a "Content" property 2. SetFieldContent was called once for every chunk of text in the field result, always overwriting the previous value; accumulate the text. Change-Id: I63cfda19e2e416c52d100d9071796305a5d813c6 (cherry picked from commit e24ae38c8ef233e4b44840058e35959194724743) Reviewed-on: https://gerrit.libreoffice.org/8442 Reviewed-by: Miklos Vajna <vmik...@collabora.co.uk> Tested-by: Miklos Vajna <vmik...@collabora.co.uk> diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx index 4b6ed8e..2532942 100644 --- a/writerfilter/source/dmapper/DomainMapper.cxx +++ b/writerfilter/source/dmapper/DomainMapper.cxx @@ -3827,7 +3827,7 @@ void DomainMapper::lcl_text(const sal_uInt8 * data_, size_t len) else if( m_pImpl->IsOpenField() && m_pImpl->IsFieldResultAsString()) /*depending on the success of the field insert operation this result will be set at the field or directly inserted into the text*/ - m_pImpl->SetFieldResult( sText ); + m_pImpl->AppendFieldResult(sText); else { if (pContext == 0) @@ -3930,7 +3930,7 @@ void DomainMapper::lcl_utext(const sal_uInt8 * data_, size_t len) else if( m_pImpl->IsOpenField() && m_pImpl->IsFieldResultAsString()) /*depending on the success of the field insert operation this result will be set at the field or directly inserted into the text*/ - m_pImpl->SetFieldResult( sText ); + m_pImpl->AppendFieldResult(sText); else { if (pContext == 0) diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx index c7302cf..8822882 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx @@ -3304,7 +3304,6 @@ void DomainMapper_Impl::CloseFieldCommand() // uno::makeAny( pContext->GetCommand().copy( nIndex + 1 ))); uno::Reference< text::XDependentTextField > xDependentField( xFieldInterface, uno::UNO_QUERY_THROW ); xDependentField->attachTextFieldMaster( xMaster ); - m_bSetUserFieldContent = true; } break; case FIELD_MERGEREC : break; @@ -3538,8 +3537,18 @@ bool DomainMapper_Impl::IsFieldResultAsString() return bRet; } +void DomainMapper_Impl::AppendFieldResult(OUString const& rString) +{ + assert(!m_aFieldStack.empty()); + FieldContextPtr pContext = m_aFieldStack.top(); + SAL_WARN_IF(!pContext.get(), "writerfilter.dmapper", "no field context"); + if (pContext.get()) + { + pContext->AppendResult(rString); + } +} -void DomainMapper_Impl::SetFieldResult( OUString& rResult ) +void DomainMapper_Impl::SetFieldResult(OUString const& rResult) { #ifdef DEBUG_DOMAINMAPPER dmapper_logger->startElement("setFieldResult"); @@ -3595,9 +3604,10 @@ void DomainMapper_Impl::SetFieldResult( OUString& rResult ) } } } - catch( const uno::Exception& ) + catch (const uno::Exception& e) { - + SAL_WARN("writerfilter.dmapper", + "DomainMapper_Impl::SetFieldResult: exception: " << e.Message); } } } @@ -3641,6 +3651,9 @@ void DomainMapper_Impl::PopFieldContext() if( !pContext->IsCommandCompleted() ) CloseFieldCommand(); + if (!pContext->GetResult().isEmpty()) + SetFieldResult(pContext->GetResult()); + //insert the field, TC or TOC uno::Reference< text::XTextAppend > xTextAppend; if (!m_aTextAppendStack.empty()) diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.hxx b/writerfilter/source/dmapper/DomainMapper_Impl.hxx index 4686baa..6792be2 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.hxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.hxx @@ -124,6 +124,7 @@ class FieldContext ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > m_xStartRange; OUString m_sCommand; + OUString m_sResult; ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextField > m_xTextField; ::com::sun::star::uno::Reference< ::com::sun::star::text::XFormField > m_xFormField; @@ -142,6 +143,9 @@ public: void AppendCommand(const OUString& rPart); const OUString& GetCommand() const {return m_sCommand; } + void AppendResult(OUString const& rResult) { m_sResult += rResult; } + const OUString& GetResult() const { return m_sResult; } + void SetCommandCompleted() { m_bFieldCommandCompleted = true; } bool IsCommandCompleted() const { return m_bFieldCommandCompleted; } @@ -597,8 +601,9 @@ public: void CloseFieldCommand(); //the _current_ fields require a string type result while TOCs accept richt results bool IsFieldResultAsString(); + void AppendFieldResult(OUString const& rResult); //apply the result text to the related field - void SetFieldResult( OUString& rResult ); + void SetFieldResult(OUString const& rResult); // set FFData of top field context void SetFieldFFData( FFDataHandler::Pointer_t pFFDataHandler ); //the end of field is reached (0x15 appeared) - the command might still be open _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits