writerfilter/source/dmapper/DomainMapper.cxx | 129 ++++++++++++++------------- writerfilter/source/dmapper/DomainMapper.hxx | 1 2 files changed, 71 insertions(+), 59 deletions(-)
New commits: commit 7b3f68257b7b6781dd22830bc118cb0ef92fb113 Author: Michael Stahl <michael.st...@allotropia.de> AuthorDate: Thu Nov 16 13:31:10 2023 +0100 Commit: Michael Stahl <michael.st...@allotropia.de> CommitDate: Thu Nov 16 15:35:07 2023 +0100 writerfilter: DomainMapper: fix undetected merge conflict ... between commit fce18155052821756466ea043c638f4ed72f41d6 and commit 15b886f460919ea3dce425a621dc017c2992a96b - move the code from lcl_text() to lcl_utext(). Change-Id: Iaa515d2ebd9861e24b442b0d7b41f83662ed58df Reviewed-on: https://gerrit.libreoffice.org/c/core/+/159501 Tested-by: Michael Stahl <michael.st...@allotropia.de> Reviewed-by: Michael Stahl <michael.st...@allotropia.de> diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx index 52836e497d50..dc863f3f5e8b 100644 --- a/writerfilter/source/dmapper/DomainMapper.cxx +++ b/writerfilter/source/dmapper/DomainMapper.cxx @@ -3925,65 +3925,6 @@ void DomainMapper::lcl_text(const sal_uInt8 * data_, size_t len) pContext->Insert(PROP_BREAK_TYPE, uno::Any(style::BreakType_COLUMN_BEFORE)); m_pImpl->clearDeferredBreak(COLUMN_BREAK); } - if (IsRTFImport() && pContext) { - //reset paragraph style properties not repeated at the paragraph - std::optional<PropertyMap::Property> paraStyleName = pContext->getProperty(PROP_PARA_STYLE_NAME); - if (paraStyleName.has_value()) { - OUString uStyleName; - paraStyleName->second >>= uStyleName; - StyleSheetEntryPtr pStyleSheet = m_pImpl->GetStyleSheetTable()->FindStyleSheetByConvertedStyleName(uStyleName); - if (pStyleSheet != nullptr) - { - std::vector< PropertyIds > stylePropertyIds = pStyleSheet->m_pProperties->GetPropertyIds(); - std::vector< PropertyIds >::iterator stylePropertyIdsIt = stylePropertyIds.begin(); - while (stylePropertyIdsIt != stylePropertyIds.end()) - { - PropertyIds ePropertyId = *stylePropertyIdsIt; - std::optional< PropertyMap::Property > styleProperty = pStyleSheet->m_pProperties->getProperty(ePropertyId); - std::optional< PropertyMap::Property > paragraphProperty = pContext->getProperty(ePropertyId); - if (paragraphProperty.has_value()) { - if (paragraphProperty->second == styleProperty->second && - !isSPRMDeduplicateDenylist(ePropertyId, pContext)) - { - pContext->Erase(ePropertyId); - } - } - else - { - switch (ePropertyId) - { - case PROP_PARA_LEFT_MARGIN: - if (!pContext->getProperty(PROP_NUMBERING_RULES)) - { - pContext->Insert(ePropertyId, uno::Any(0l)); - } - break; - case PROP_PARA_RIGHT_MARGIN: - pContext->Insert(ePropertyId, uno::Any(0l)); - break; - case PROP_PARA_LAST_LINE_ADJUST: - case PROP_PARA_ADJUST: - pContext->Insert(ePropertyId, uno::Any(style::ParagraphAdjust_LEFT)); - break; - case PROP_PARA_TAB_STOPS: - pContext->Insert(ePropertyId, uno::Any(uno::Sequence< style::TabStop >())); - break; - case PROP_FILL_STYLE: - pContext->Insert(ePropertyId, uno::Any(drawing::FillStyle_NONE)); - break; - case PROP_FILL_COLOR: - pContext->Insert(ePropertyId, uno::Any(sal_Int32(COL_TRANSPARENT))); - break; - case INVALID: - default: - break; - } - } - ++stylePropertyIdsIt; - } - } - } - } finishParagraph(); return; } @@ -4103,6 +4044,71 @@ void DomainMapper::lcl_checkId(const sal_Int32 nId) } } +void DomainMapper::ResetStyleProperties() +{ + PropertyMapPtr pContext = m_pImpl->GetTopContextOfType(CONTEXT_PARAGRAPH); + if (IsRTFImport() && pContext) + { + //reset paragraph style properties not repeated at the paragraph + std::optional<PropertyMap::Property> paraStyleName = pContext->getProperty(PROP_PARA_STYLE_NAME); + if (paraStyleName.has_value()) { + OUString uStyleName; + paraStyleName->second >>= uStyleName; + StyleSheetEntryPtr pStyleSheet = m_pImpl->GetStyleSheetTable()->FindStyleSheetByConvertedStyleName(uStyleName); + if (pStyleSheet != nullptr) + { + std::vector< PropertyIds > stylePropertyIds = pStyleSheet->m_pProperties->GetPropertyIds(); + std::vector< PropertyIds >::iterator stylePropertyIdsIt = stylePropertyIds.begin(); + while (stylePropertyIdsIt != stylePropertyIds.end()) + { + PropertyIds ePropertyId = *stylePropertyIdsIt; + std::optional< PropertyMap::Property > styleProperty = pStyleSheet->m_pProperties->getProperty(ePropertyId); + std::optional< PropertyMap::Property > paragraphProperty = pContext->getProperty(ePropertyId); + if (paragraphProperty.has_value()) { + if (paragraphProperty->second == styleProperty->second && + !isSPRMDeduplicateDenylist(ePropertyId, pContext)) + { + pContext->Erase(ePropertyId); + } + } + else + { + switch (ePropertyId) + { + case PROP_PARA_LEFT_MARGIN: + if (!pContext->getProperty(PROP_NUMBERING_RULES)) + { + pContext->Insert(ePropertyId, uno::Any(0l)); + } + break; + case PROP_PARA_RIGHT_MARGIN: + pContext->Insert(ePropertyId, uno::Any(0l)); + break; + case PROP_PARA_LAST_LINE_ADJUST: + case PROP_PARA_ADJUST: + pContext->Insert(ePropertyId, uno::Any(style::ParagraphAdjust_LEFT)); + break; + case PROP_PARA_TAB_STOPS: + pContext->Insert(ePropertyId, uno::Any(uno::Sequence< style::TabStop >())); + break; + case PROP_FILL_STYLE: + pContext->Insert(ePropertyId, uno::Any(drawing::FillStyle_NONE)); + break; + case PROP_FILL_COLOR: + pContext->Insert(ePropertyId, uno::Any(sal_Int32(COL_TRANSPARENT))); + break; + case INVALID: + default: + break; + } + } + ++stylePropertyIdsIt; + } + } + } + } +} + void DomainMapper::lcl_utext(const sal_uInt8 * data_, size_t len) { // All these fixed values are defined as static const sal_Unicode codepoints in the fast parser, @@ -4121,6 +4127,11 @@ void DomainMapper::lcl_utext(const sal_uInt8 * data_, size_t len) if (len == 1) { + if (sText[0] == 0x0d) + { + ResetStyleProperties(); + } + // preload all footnotes in separated footnotes if (sText[0] == 0x5) { diff --git a/writerfilter/source/dmapper/DomainMapper.hxx b/writerfilter/source/dmapper/DomainMapper.hxx index a452e2e6e9bc..4fcd55195c84 100644 --- a/writerfilter/source/dmapper/DomainMapper.hxx +++ b/writerfilter/source/dmapper/DomainMapper.hxx @@ -175,6 +175,7 @@ private: // Table virtual void lcl_entry(writerfilter::Reference<Properties>::Pointer_t ref) override; + void ResetStyleProperties(); void finishParagraph(const bool bRemove = false, const bool bNoNumbering = false); static void handleUnderlineType(const Id nId, const ::tools::SvRef<PropertyMap>& rContext);