diff options
author | Miklos Vajna <vmiklos@collabora.com> | 2022-10-05 15:18:53 +0200 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.com> | 2022-10-05 16:05:19 +0200 |
commit | 5262aab9d220675f616579720b4bb43ee03cccfb (patch) | |
tree | 453d6eed7a019cc4a46e91e41726c4181a6dce8b /writerfilter | |
parent | 1490923bea9c3ec763488a73912ff0a143329a24 (diff) |
sw content controls: preserve tag
This is similar to <w15:color> to preserve <w:tag>.
Resolves
<https://gerrit.libreoffice.org/c/core/+/137399/2#message-a5ba9f1e0dc9e586034758ee7c0a94e1533e8922>.
Change-Id: I4fdab44aaf13ca812502ae79f38f32ec9468db11
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/140981
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
Tested-by: Jenkins
Diffstat (limited to 'writerfilter')
-rw-r--r-- | writerfilter/qa/cppunittests/dmapper/SdtHelper.cxx | 4 | ||||
-rw-r--r-- | writerfilter/qa/cppunittests/dmapper/data/sdt-run-rich-text.docx | bin | 4369 -> 4376 bytes | |||
-rw-r--r-- | writerfilter/source/dmapper/DomainMapper.cxx | 15 | ||||
-rw-r--r-- | writerfilter/source/dmapper/DomainMapper_Impl.cxx | 6 | ||||
-rw-r--r-- | writerfilter/source/dmapper/SdtHelper.cxx | 4 | ||||
-rw-r--r-- | writerfilter/source/dmapper/SdtHelper.hxx | 6 |
6 files changed, 35 insertions, 0 deletions
diff --git a/writerfilter/qa/cppunittests/dmapper/SdtHelper.cxx b/writerfilter/qa/cppunittests/dmapper/SdtHelper.cxx index f6f67327fad8..5b62fdf55122 100644 --- a/writerfilter/qa/cppunittests/dmapper/SdtHelper.cxx +++ b/writerfilter/qa/cppunittests/dmapper/SdtHelper.cxx @@ -91,6 +91,10 @@ CPPUNIT_TEST_FIXTURE(Test, testSdtRunRichText) xContentControlProps->getPropertyValue("Alias") >>= aAlias; // This was empty. CPPUNIT_ASSERT_EQUAL(OUString("myalias"), aAlias); + OUString aTag; + xContentControlProps->getPropertyValue("Tag") >>= aTag; + // This was empty. + CPPUNIT_ASSERT_EQUAL(OUString("mytag"), aTag); } CPPUNIT_TEST_FIXTURE(Test, testSdtRunPlainText) diff --git a/writerfilter/qa/cppunittests/dmapper/data/sdt-run-rich-text.docx b/writerfilter/qa/cppunittests/dmapper/data/sdt-run-rich-text.docx Binary files differindex b3b25d8cc3ab..b7f291f776bf 100644 --- a/writerfilter/qa/cppunittests/dmapper/data/sdt-run-rich-text.docx +++ b/writerfilter/qa/cppunittests/dmapper/data/sdt-run-rich-text.docx diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx index 2682f78e1e91..94e273a0fdcd 100644 --- a/writerfilter/source/dmapper/DomainMapper.cxx +++ b/writerfilter/source/dmapper/DomainMapper.cxx @@ -2814,6 +2814,7 @@ void DomainMapper::sprmWithProps( Sprm& rSprm, const PropertyMapPtr& rContext ) case NS_ooxml::LN_CT_SdtPr_alias: case NS_ooxml::LN_CT_SdtPlaceholder_docPart: case NS_ooxml::LN_CT_SdtPr_color: + case NS_ooxml::LN_CT_SdtPr_tag: { if (!m_pImpl->GetSdtStarts().empty()) { @@ -2833,6 +2834,12 @@ void DomainMapper::sprmWithProps( Sprm& rSprm, const PropertyMapPtr& rContext ) break; } + if (nSprmId == NS_ooxml::LN_CT_SdtPr_tag) + { + m_pImpl->m_pSdtHelper->SetTag(sStringValue); + break; + } + if (nSprmId == NS_ooxml::LN_CT_SdtPr_checkbox) { m_pImpl->m_pSdtHelper->setControlType(SdtControlType::checkBox); @@ -2864,6 +2871,14 @@ void DomainMapper::sprmWithProps( Sprm& rSprm, const PropertyMapPtr& rContext ) break; } } + else + { + if (nSprmId == NS_ooxml::LN_CT_SdtPr_tag) + { + // Tag is only handled here in case of inline SDT. + break; + } + } // this is an unsupported SDT property, create a grab bag for it OUString sName; diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx index d73b89a78de0..191b7fec353c 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx @@ -943,6 +943,12 @@ void DomainMapper_Impl::PopSdt() uno::Any(m_pSdtHelper->GetAlias())); } + if (!m_pSdtHelper->GetTag().isEmpty()) + { + xContentControlProps->setPropertyValue("Tag", + uno::Any(m_pSdtHelper->GetTag())); + } + if (m_pSdtHelper->getControlType() == SdtControlType::checkBox) { xContentControlProps->setPropertyValue("Checkbox", uno::Any(true)); diff --git a/writerfilter/source/dmapper/SdtHelper.cxx b/writerfilter/source/dmapper/SdtHelper.cxx index ebcea44ef863..d8f48ef7ffe2 100644 --- a/writerfilter/source/dmapper/SdtHelper.cxx +++ b/writerfilter/source/dmapper/SdtHelper.cxx @@ -515,6 +515,10 @@ void SdtHelper::SetAlias(const OUString& rAlias) { m_aAlias = rAlias; } const OUString& SdtHelper::GetAlias() const { return m_aAlias; } +void SdtHelper::SetTag(const OUString& rTag) { m_aTag = rTag; } + +const OUString& SdtHelper::GetTag() const { return m_aTag; } + } // namespace writerfilter::dmapper /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/writerfilter/source/dmapper/SdtHelper.hxx b/writerfilter/source/dmapper/SdtHelper.hxx index bdb95f3d7e13..dc1a3172e364 100644 --- a/writerfilter/source/dmapper/SdtHelper.hxx +++ b/writerfilter/source/dmapper/SdtHelper.hxx @@ -129,6 +129,9 @@ class SdtHelper final : public virtual SvRefBase /// <w:sdtPr>'s <w:alias w:val="...">. OUString m_aAlias; + /// <w:sdtPr>'s <w:tag w:val="...">. + OUString m_aTag; + public: explicit SdtHelper(DomainMapper_Impl& rDM_Impl, css::uno::Reference<css::uno::XComponentContext> xContext); @@ -211,6 +214,9 @@ public: void SetAlias(const OUString& rAlias); const OUString& GetAlias() const; + void SetTag(const OUString& rTag); + const OUString& GetTag() const; + std::optional<OUString> getValueFromDataBinding(); }; |