summaryrefslogtreecommitdiff
path: root/writerfilter
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.com>2022-10-05 15:18:53 +0200
committerMiklos Vajna <vmiklos@collabora.com>2022-10-05 16:05:19 +0200
commit5262aab9d220675f616579720b4bb43ee03cccfb (patch)
tree453d6eed7a019cc4a46e91e41726c4181a6dce8b /writerfilter
parent1490923bea9c3ec763488a73912ff0a143329a24 (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.cxx4
-rw-r--r--writerfilter/qa/cppunittests/dmapper/data/sdt-run-rich-text.docxbin4369 -> 4376 bytes
-rw-r--r--writerfilter/source/dmapper/DomainMapper.cxx15
-rw-r--r--writerfilter/source/dmapper/DomainMapper_Impl.cxx6
-rw-r--r--writerfilter/source/dmapper/SdtHelper.cxx4
-rw-r--r--writerfilter/source/dmapper/SdtHelper.hxx6
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
index 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
Binary files differ
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();
};