writerfilter/source/dmapper/DomainMapper_Impl.cxx | 32 +++++++++------------- writerfilter/source/dmapper/DomainMapper_Impl.hxx | 28 ++++++++++--------- 2 files changed, 29 insertions(+), 31 deletions(-)
New commits: commit 992f7114ab8645fb5b7a22b5f974a95fe7be7712 Author: Michael Stahl <michael.st...@allotropia.de> AuthorDate: Wed Jan 31 15:37:03 2024 +0100 Commit: Michael Stahl <michael.st...@allotropia.de> CommitDate: Thu Feb 1 09:34:55 2024 +0100 writerfilter: replace members w/ SubstreamContext::eSubstreamType This should not change any behaviour. Change-Id: Ic970f0e1b6401119d875c9e811589b9c210e0c34 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/162842 Tested-by: Jenkins Reviewed-by: Michael Stahl <michael.st...@allotropia.de> diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx index 08e81899b94f..633296ce69e1 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx @@ -356,10 +356,7 @@ DomainMapper_Impl::DomainMapper_Impl( m_bInStyleSheetImport( false ), m_bInNumberingImport(false), m_bInAnyTableImport( false ), - m_eInHeaderFooterImport( HeaderFooterImportState::none ), m_bDiscardHeaderFooter( false ), - m_bInFootOrEndnote(false), - m_bInFootnote(false), m_bHasFootnoteStyle(false), m_bCheckFootnoteStyle(false), m_eSkipFootnoteState(SkipFootnoteSeparator::OFF), @@ -380,7 +377,6 @@ DomainMapper_Impl::DomainMapper_Impl( m_bIsPreviousParagraphFramed( false ), m_bIsLastParaInSection( false ), m_bIsLastSectionGroup( false ), - m_bIsInComments( false ), m_bParaSectpr( false ), m_bUsingEnhancedFields( false ), m_bSdt(false), @@ -959,7 +955,7 @@ bool DomainMapper_Impl::GetIsFirstParagraphInSection( bool bAfterRedline ) const // and none of them should be considered the first para in section. return ( bAfterRedline ? m_bIsFirstParaInSectionAfterRedline : m_bIsFirstParaInSection ) && !IsInShape() - && !m_bIsInComments + && !IsInComments() && !IsInFootOrEndnote(); } @@ -2611,7 +2607,7 @@ void DomainMapper_Impl::finishParagraph( const PropertyMapPtr& pPropertyMap, con { uno::Reference<text::XTextCursor> xCursor; if (m_StreamStateStack.top().bParaHadField - && !m_bIsInComments && !m_xTOCMarkerCursor.is()) + && !IsInComments() && !m_xTOCMarkerCursor.is()) { // Workaround to make sure char props of the field are not lost. // Not relevant for editeng-based comments. @@ -2840,7 +2836,7 @@ void DomainMapper_Impl::finishParagraph( const PropertyMapPtr& pPropertyMap, con css::uno::Reference<css::beans::XPropertySet> xParaProps(xTextRange, uno::UNO_QUERY); // table style precedence and not hidden shapes anchored to hidden empty table paragraphs - if (xParaProps && !m_bIsInComments + if (xParaProps && !IsInComments() && (0 < m_StreamStateStack.top().nTableDepth || !m_aAnchoredObjectAnchors.empty())) { @@ -2992,7 +2988,7 @@ void DomainMapper_Impl::finishParagraph( const PropertyMapPtr& pPropertyMap, con m_previousRedline.clear(); m_bParaChanged = false; - if (m_bIsInComments && pParaContext) + if (IsInComments() && pParaContext) { if (const OUString sParaId = pParaContext->props().GetParaId(); !sParaId.isEmpty()) { @@ -3021,7 +3017,7 @@ void DomainMapper_Impl::finishParagraph( const PropertyMapPtr& pPropertyMap, con // and in text boxes anchored to the first paragraph of table cells if (0 < m_StreamStateStack.top().nTableDepth && m_StreamStateStack.top().nTableDepth == m_nTableCellDepth - && !IsInShape() && !m_bIsInComments) + && !IsInShape() && !IsInComments()) { m_StreamStateStack.top().bFirstParagraphInCell = false; } @@ -3195,7 +3191,7 @@ void DomainMapper_Impl::applyToggleAttributes(const PropertyMapPtr& pPropertyMap { applyToggleAttributes(pPropertyMap); // If we are in comments, then disable CharGrabBag, comment text doesn't support that. - uno::Sequence< beans::PropertyValue > aValues = pPropertyMap->GetPropertyValues(/*bCharGrabBag=*/!m_bIsInComments); + uno::Sequence<beans::PropertyValue> aValues = pPropertyMap->GetPropertyValues(/*bCharGrabBag=*/!IsInComments()); if (IsInTOC() || m_bStartIndex || m_bStartBibliography) for( auto& rValue : asNonConstRange(aValues) ) @@ -3796,7 +3792,7 @@ void DomainMapper_Impl::PushPageHeaderFooter(PagePartType ePagePartType, PageTyp const PropertyIds ePropTextRight = bHeader ? PROP_HEADER_TEXT: PROP_FOOTER_TEXT; m_bDiscardHeaderFooter = true; - m_eInHeaderFooterImport = bHeader ? HeaderFooterImportState::header : HeaderFooterImportState::footer; + m_StreamStateStack.top().eSubstreamType = bHeader ? SubstreamType::Header : SubstreamType::Footer; //get the section context SectionPropertyMap* pSectionContext = GetSectionContext();; @@ -3945,14 +3941,12 @@ void DomainMapper_Impl::PopPageHeaderFooter(PagePartType ePagePartType, PageType } m_bDiscardHeaderFooter = false; } - m_eInHeaderFooterImport = HeaderFooterImportState::none; } void DomainMapper_Impl::PushFootOrEndnote( bool bIsFootnote ) { - SAL_WARN_IF(m_bInFootOrEndnote, "writerfilter.dmapper", "PushFootOrEndnote() is called from another foot or endnote"); - m_bInFootOrEndnote = true; - m_bInFootnote = bIsFootnote; + SAL_WARN_IF(m_StreamStateStack.top().eSubstreamType != SubstreamType::Body, "writerfilter.dmapper", "PushFootOrEndnote() is called from another foot or endnote"); + m_StreamStateStack.top().eSubstreamType = bIsFootnote ? SubstreamType::Footnote : SubstreamType::Endnote; m_bCheckFirstFootnoteTab = true; try { @@ -4218,7 +4212,7 @@ void DomainMapper_Impl::PushAnnotation() { try { - m_bIsInComments = true; + m_StreamStateStack.top().eSubstreamType = SubstreamType::Annotation; if (!GetTextFactory().is()) return; m_xAnnotationField.set( GetTextFactory()->createInstance( "com.sun.star.text.TextField.Annotation" ), @@ -4480,7 +4474,6 @@ void DomainMapper_Impl::PopFootOrEndnote() } m_aRedlines.pop(); m_eSkipFootnoteState = SkipFootnoteSeparator::OFF; - m_bInFootOrEndnote = m_bInFootnote = false; m_pFootnoteContext = nullptr; } @@ -4488,7 +4481,6 @@ void DomainMapper_Impl::PopAnnotation() { RemoveLastParagraph(); - m_bIsInComments = false; m_aTextAppendStack.pop(); try @@ -9779,8 +9771,12 @@ void DomainMapper_Impl::substream(Id rName, case NS_ooxml::LN_annotation : PushAnnotation(); break; + default: + assert(false); // unexpected? } + assert(m_StreamStateStack.top().eSubstreamType != SubstreamType::Body); + try { ref->resolve(m_rDMapper); diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.hxx b/writerfilter/source/dmapper/DomainMapper_Impl.hxx index 1250cf97307b..7d3c27ae2fce 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.hxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.hxx @@ -163,6 +163,16 @@ enum StoredRedlines NONE }; +enum class SubstreamType +{ + Body, + Header, + Footer, + Footnote, + Endnote, + Annotation, +}; + /** * Storage for state that is relevant outside a header/footer, but not inside it. * @@ -174,6 +184,7 @@ enum StoredRedlines */ struct SubstreamContext { + SubstreamType eSubstreamType = SubstreamType::Body; bool bTextInserted = false; /** * This contains the raw table depth. nTableDepth > 0 is the same as @@ -565,15 +576,7 @@ private: bool m_bInStyleSheetImport; //in import of fonts, styles, lists or lfos bool m_bInNumberingImport; //in import of numbering (i.e. numbering.xml) bool m_bInAnyTableImport; //in import of fonts, styles, lists or lfos - enum class HeaderFooterImportState - { - none, - header, - footer, - } m_eInHeaderFooterImport; bool m_bDiscardHeaderFooter; - bool m_bInFootOrEndnote; - bool m_bInFootnote; PropertyMapPtr m_pFootnoteContext; bool m_bHasFootnoteStyle; bool m_bCheckFootnoteStyle; @@ -621,7 +624,6 @@ private: bool m_bIsPreviousParagraphFramed; bool m_bIsLastParaInSection; bool m_bIsLastSectionGroup; - bool m_bIsInComments; /// If the current paragraph contains section property definitions. bool m_bParaSectpr; bool m_bUsingEnhancedFields; @@ -891,7 +893,7 @@ public: css::uno::Reference<css::drawing::XShape> PopPendingShape(); void PopPageHeaderFooter(PagePartType ePagePartType, PageType eType); - bool IsInHeaderFooter() const { return m_eInHeaderFooterImport != HeaderFooterImportState::none; } + bool IsInHeaderFooter() const { auto const type(m_StreamStateStack.top().eSubstreamType); return type == SubstreamType::Header || type == SubstreamType::Footer; } void ConvertHeaderFooterToTextFrame(bool, bool); static void fillEmptyFrameProperties(std::vector<css::beans::PropertyValue>& rFrameProperties, bool bSetAnchorToChar); @@ -899,8 +901,8 @@ public: void PushFootOrEndnote( bool bIsFootnote ); void PopFootOrEndnote(); - bool IsInFootOrEndnote() const { return m_bInFootOrEndnote; } - bool IsInFootnote() const { return IsInFootOrEndnote() && m_bInFootnote; } + bool IsInFootOrEndnote() const { auto const type(m_StreamStateStack.top().eSubstreamType); return type == SubstreamType::Footnote || type == SubstreamType::Endnote; } + bool IsInFootnote() const { return m_StreamStateStack.top().eSubstreamType == SubstreamType::Footnote; } void StartCustomFootnote(const PropertyMapPtr pContext); void EndCustomFootnote(); @@ -1050,7 +1052,7 @@ public: void SetInFootnoteProperties(bool bSet) { m_bIsInFootnoteProperties = bSet;} bool IsInFootnoteProperties() const { return m_bIsInFootnoteProperties;} - bool IsInComments() const { return m_bIsInComments; }; + bool IsInComments() const { return m_StreamStateStack.top().eSubstreamType == SubstreamType::Annotation; }; std::vector<css::beans::PropertyValue> MakeFrameProperties(const ParagraphProperties& rProps); void CheckUnregisteredFrameConversion(bool bPreventOverlap = false);