diff options
Diffstat (limited to 'writerfilter')
-rw-r--r-- | writerfilter/source/dmapper/DomainMapper.cxx | 6 | ||||
-rw-r--r-- | writerfilter/source/dmapper/DomainMapper_Impl.cxx | 9 | ||||
-rw-r--r-- | writerfilter/source/dmapper/DomainMapper_Impl.hxx | 9 | ||||
-rw-r--r-- | writerfilter/source/ooxml/OOXMLFastContextHandler.cxx | 10 | ||||
-rw-r--r-- | writerfilter/source/ooxml/model.xml | 1 |
5 files changed, 34 insertions, 1 deletions
diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx index 4d0d7217cb2a..03d1c852f92a 100644 --- a/writerfilter/source/dmapper/DomainMapper.cxx +++ b/writerfilter/source/dmapper/DomainMapper.cxx @@ -3332,6 +3332,12 @@ void DomainMapper::sprmWithProps( Sprm& rSprm, PropertyMapPtr rContext, SprmType } } break; + case NS_ooxml::LN_tblStart: + m_pImpl->m_nTableDepth++; + break; + case NS_ooxml::LN_tblEnd: + m_pImpl->m_nTableDepth--; + break; default: { #ifdef DEBUG_DOMAINMAPPER diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx index 8f1af5aff78d..07654c6f80a1 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx @@ -193,7 +193,9 @@ DomainMapper_Impl::DomainMapper_Impl( m_bSdt(false), m_xInsertTextRange(xInsertTextRange), m_bIsNewDoc(bIsNewDoc), - m_pSdtHelper(0) + m_pSdtHelper(0), + m_nTableDepth(0) + { appendTableManager( ); GetBodyText(); @@ -632,6 +634,11 @@ void DomainMapper_Impl::deferBreak( BreakType deferredBreakType) m_bIsColumnBreakDeferred = true; break; case PAGE_BREAK: + // See SwWW8ImplReader::HandlePageBreakChar(), page break should be + // ignored inside tables. + if (m_nTableDepth > 0) + return; + m_bIsPageBreakDeferred = true; break; default: diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.hxx b/writerfilter/source/dmapper/DomainMapper_Impl.hxx index e2a43b631f31..ccca0dcdd58d 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.hxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.hxx @@ -683,6 +683,15 @@ public: /// Document background color, applied to every page style. boost::optional<sal_Int32> m_oBackgroundColor; + + /** + * This contains the raw table depth. m_nTableDepth > 0 is the same as + * getTableManager().isInTable(), unless we're in the first paragraph of a + * table, or first paragraph after a table, as the table manager is only + * updated once we ended the paragraph (and know if the para has the + * PFInTable SPRM or not). + */ + sal_Int32 m_nTableDepth; }; } //namespace dmapper } //namespace writerfilter diff --git a/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx b/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx index d4068560a9f9..4d4ac65e2632 100644 --- a/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx +++ b/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx @@ -1943,6 +1943,16 @@ void OOXMLFastContextHandlerTextTable::lcl_endFastElement { endAction(Element); + boost::shared_ptr<OOXMLPropertySet> pProps( new OOXMLPropertySetImpl ); + { + OOXMLValue::Pointer_t pVal + (new OOXMLIntegerValue(mnTableDepth)); + OOXMLProperty::Pointer_t pProp + (new OOXMLPropertyImpl(NS_ooxml::LN_tblEnd, pVal, OOXMLPropertyImpl::SPRM)); + pProps->add(pProp); + } + mpParserState->setCharacterProperties(pProps); + mnTableDepth--; mpParserState->endTable(); } diff --git a/writerfilter/source/ooxml/model.xml b/writerfilter/source/ooxml/model.xml index 6f27ef66e844..ff1d618fa5ee 100644 --- a/writerfilter/source/ooxml/model.xml +++ b/writerfilter/source/ooxml/model.xml @@ -38,6 +38,7 @@ <token tokenid="ooxml:trackchange"/> <token tokenid="ooxml:object"/> <token tokenid="ooxml:tblStart"/> + <token tokenid="ooxml:tblEnd"/> <token tokenid="ooxml:ffdata"/> <token tokenid="ooxml:starmath"/> <namespace name="dml-stylesheet" url="http://schemas.openxmlformats.org/drawingml/2006/main" file="dml-stylesheet.rng"> |