From c506c65648f99b43640aeee784e6246bdece8552 Mon Sep 17 00:00:00 2001 From: László Németh Date: Mon, 3 Feb 2020 13:54:57 +0100 Subject: tdf#108272 DOCX table-only header: fix SAX parser error MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Floating tables in table-only headers are imported as non-floating ones after a SAX parser error. Now we import them as non-floating ones from the beginning to avoid of the parser error. Change-Id: I0a816a7af642f402a25ed53d9766b1e8b82db789 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/87874 Tested-by: Jenkins Reviewed-by: László Németh (cherry picked from commit 213d6390a2cc59d174173f4359c161625a9c4bdc) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/88085 Tested-by: Jenkins CollaboraOffice Reviewed-by: Miklos Vajna --- writerfilter/source/dmapper/DomainMapper_Impl.cxx | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'writerfilter/source/dmapper/DomainMapper_Impl.cxx') diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx index 81f518af9c29..ccea424aa3b8 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx @@ -1627,6 +1627,11 @@ void DomainMapper_Impl::appendTextPortion( const OUString& rString, const Proper if (m_aTextAppendStack.empty()) return; + + // not a table-only header, don't avoid of floating tables + if (m_eInHeaderFooterImport == HeaderFooterImportState::header && !IsInShape() && hasTableManager() && !getTableManager().isInCell()) + getTableManager().setIsUnfloatTable(false); + // Before placing call to processDeferredCharacterProperties(), TopContextType should be CONTEXT_CHARACTER // processDeferredCharacterProperties() invokes only if character inserted if( pPropertyMap == m_pTopContext && !deferredCharacterProperties.empty() && (GetTopContextType() == CONTEXT_CHARACTER) ) @@ -1968,6 +1973,10 @@ void DomainMapper_Impl::PushPageHeaderFooter(bool bHeader, SectionPropertyMap::P m_eInHeaderFooterImport = bHeader ? HeaderFooterImportState::header : HeaderFooterImportState::footer; + // ignore in table-only header, that table is imported as non-floating one + if (bHeader && hasTableManager()) + getTableManager().setIsUnfloatTable(true); + //get the section context PropertyMapPtr pContext = DomainMapper_Impl::GetTopContextOfType(CONTEXT_SECTION); //ask for the header/footer name of the given type @@ -2486,7 +2495,7 @@ void DomainMapper_Impl::PushShapeContext( const uno::Reference< drawing::XShape uno::makeAny( true ) ); } m_bParaChanged = true; - getTableManager().setIsInShape(true); + getTableManager().setIsUnfloatTable(true); } catch ( const uno::Exception& e ) { -- cgit v1.2.3