diff options
author | Michael Stahl <Michael.Stahl@cib.de> | 2019-10-02 18:49:47 +0200 |
---|---|---|
committer | Michael Stahl <michael.stahl@cib.de> | 2019-10-23 13:09:44 +0200 |
commit | ddd08c8996d444d7c0fe49d083c4f70f0a278d14 (patch) | |
tree | 2ca96838b5a93d6ee89c82ec29272531723dca02 | |
parent | 94e0b8407b02d76b27324b8b08012eb024aca9e9 (diff) |
writerfilter: add config to import all fields as generic, incl. commands
Change-Id: I02d178de3672200b69e60ba5841c993fa0d797f9
Reviewed-on: https://gerrit.libreoffice.org/80076
Tested-by: Jenkins
Reviewed-by: Michael Stahl <michael.stahl@cib.de>
4 files changed, 17 insertions, 3 deletions
diff --git a/officecfg/registry/schema/org/openoffice/Office/Common.xcs b/officecfg/registry/schema/org/openoffice/Office/Common.xcs index 5eeb6c570331..8f33efdb29cb 100644 --- a/officecfg/registry/schema/org/openoffice/Office/Common.xcs +++ b/officecfg/registry/schema/org/openoffice/Office/Common.xcs @@ -3870,6 +3870,12 @@ </info> <value>true</value> </prop> + <prop oor:name="ForceImportWWFieldsAsGenericFields" oor:type="xs:boolean" oor:nillable="false"> + <info> + <desc>Experimental: force all fields in RTF/DOCX to be imported as dumb generic enhanced fields.</desc> + </info> + <value>false</value> + </prop> <prop oor:name="CreateMSOLockFiles" oor:type="xs:boolean" oor:nillable="false"> <info> <desc>Specifies if LO should create MSO lock files next to the LO lock files diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx index cb46699fad95..5ad13d6145e5 100644 --- a/writerfilter/source/dmapper/DomainMapper.cxx +++ b/writerfilter/source/dmapper/DomainMapper.cxx @@ -3111,8 +3111,10 @@ void DomainMapper::lcl_text(const sal_uInt8 * data_, size_t len) m_pImpl->SetCustomFtnMark( false ); //otherwise ignore sText } - else if( m_pImpl->IsOpenFieldCommand() ) + else if (m_pImpl->IsOpenFieldCommand() && !m_pImpl->IsForceGenericFields()) + { m_pImpl->AppendFieldCommand(sText); + } 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*/ @@ -3380,8 +3382,10 @@ void DomainMapper::lcl_utext(const sal_uInt8 * data_, size_t len) pContext->GetFootnote()->setLabel( sText ); //otherwise ignore sText } - else if( m_pImpl->IsOpenFieldCommand() ) + else if (m_pImpl->IsOpenFieldCommand() && !m_pImpl->IsForceGenericFields()) + { m_pImpl->AppendFieldCommand(sText); + } 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*/ diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx index f23775bc8731..9df643e07f4f 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx @@ -193,6 +193,7 @@ DomainMapper_Impl::DomainMapper_Impl( m_xTextDocument( xModel, uno::UNO_QUERY ), m_xTextFactory( xModel, uno::UNO_QUERY ), m_xComponentContext( xContext ), + m_bForceGenericFields(!utl::ConfigManager::IsFuzzing() && officecfg::Office::Common::Filter::Microsoft::Import::ForceImportWWFieldsAsGenericFields::get(m_xComponentContext)), m_bSetUserFieldContent( false ), m_bSetCitation( false ), m_bSetDateValue( false ), @@ -4354,7 +4355,7 @@ void DomainMapper_Impl::CloseFieldCommand() FieldConversionMap_t::const_iterator const aIt = aFieldConversionMap.find(std::get<0>(field)); - if(aIt != aFieldConversionMap.end()) + if (aIt != aFieldConversionMap.end() && !m_bForceGenericFields) { pContext->SetFieldId(aIt->second.eFieldId); diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.hxx b/writerfilter/source/dmapper/DomainMapper_Impl.hxx index 6f5aaedd1fed..813d45bab770 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.hxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.hxx @@ -418,6 +418,7 @@ private: std::stack<AnchoredContext> m_aAnchoredStack; std::stack<HeaderFooterContext> m_aHeaderFooterStack; std::stack<FieldContextPtr> m_aFieldStack; + bool m_bForceGenericFields; bool m_bSetUserFieldContent; bool m_bSetCitation; bool m_bSetDateValue; @@ -1000,6 +1001,8 @@ public: bool IsDiscardHeaderFooter() const; + bool IsForceGenericFields() const { return m_bForceGenericFields; } + void SetParaAutoBefore(bool bParaAutoBefore) { m_bParaAutoBefore = bParaAutoBefore; } /// Forget about the previous paragraph, as it's not inside the same |