summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Stahl <michael.stahl@allotropia.de>2024-02-14 19:13:34 +0100
committerCaolán McNamara <caolan.mcnamara@collabora.com>2024-03-01 11:58:42 +0100
commit5cef8d6e09f852671a412e39f8a3d4729302e28c (patch)
tree77e03f6514c67cb93287f547232e4d678235898d
parent7f939fee0ee20a63272267fbf6cecdb034e1bbd6 (diff)
tdf#158597 writerfilter,sw: fix toggle properties in ListAutoFormat
... for DOCX import. These can be set both via paragraph style and via character style in the w:pPr/w:rPr, so use the applyToggleAttributes(). Adding a test for this requires adding the "CharStyleName" property to GetAutoCharStylePropertyMap(). Change-Id: I9701d5ac82ec3e7757650c08861791dc398a1a77 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/163386 Tested-by: Jenkins Reviewed-by: Michael Stahl <michael.stahl@allotropia.de> (cherry picked from commit ff9be3fd30ead41359734f9281b034a988d71196) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/163449 Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
-rw-r--r--sw/qa/extras/ooxmlexport/data/tdf158597.docxbin0 -> 12719 bytes
-rw-r--r--sw/qa/extras/ooxmlexport/ooxmlexport21.cxx258
-rw-r--r--sw/source/core/unocore/unomap1.cxx1
-rw-r--r--sw/source/core/unocore/unoobj.cxx14
-rw-r--r--writerfilter/source/dmapper/DomainMapper_Impl.cxx2
5 files changed, 269 insertions, 6 deletions
diff --git a/sw/qa/extras/ooxmlexport/data/tdf158597.docx b/sw/qa/extras/ooxmlexport/data/tdf158597.docx
new file mode 100644
index 000000000000..ad7924ce71b3
--- /dev/null
+++ b/sw/qa/extras/ooxmlexport/data/tdf158597.docx
Binary files differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport21.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport21.cxx
index cdcdfe778577..e902f7a7b873 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport21.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport21.cxx
@@ -9,12 +9,15 @@
#include <swmodeltestbase.hxx>
+#include <com/sun/star/awt/FontSlant.hpp>
#include <com/sun/star/beans/XPropertyState.hpp>
#include <com/sun/star/text/XDocumentIndex.hpp>
#include <com/sun/star/text/XTextTable.hpp>
#include <com/sun/star/style/LineSpacing.hpp>
#include <com/sun/star/style/LineSpacingMode.hpp>
+#include <comphelper/sequenceashashmap.hxx>
+
#include <pam.hxx>
#include <unotxdoc.hxx>
#include <docsh.hxx>
@@ -30,6 +33,261 @@ public:
}
};
+DECLARE_OOXMLEXPORT_TEST(testTdf158597, "tdf158597.docx")
+{
+ // test with 2 properties: font size, italic (toggle)
+ {
+ uno::Reference<text::XTextRange> xParagraph(getParagraph(1));
+ CPPUNIT_ASSERT_EQUAL(OUString("No style"), xParagraph->getString());
+ uno::Reference<beans::XPropertySet> xProps(xParagraph, uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(OUString("List Paragraph"),
+ getProperty<OUString>(xProps, "ParaStyleName"));
+ uno::Reference<text::XTextRange> xRun(getRun(xParagraph, 1));
+ CPPUNIT_ASSERT_EQUAL(OUString(""), getProperty<OUString>(xRun, "CharStyleName"));
+ CPPUNIT_ASSERT_EQUAL(11.f, getProperty<float>(xRun, "CharHeight"));
+ CPPUNIT_ASSERT_EQUAL(awt::FontSlant_NONE, getProperty<awt::FontSlant>(xRun, "CharPosture"));
+ CPPUNIT_ASSERT(!xProps->getPropertyValue("ListAutoFormat").hasValue());
+ }
+ {
+ uno::Reference<text::XTextRange> xParagraph(getParagraph(2));
+ CPPUNIT_ASSERT_EQUAL(OUString("Char style mark"), xParagraph->getString());
+ uno::Reference<beans::XPropertySet> xProps(xParagraph, uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(OUString("List Paragraph"),
+ getProperty<OUString>(xProps, "ParaStyleName"));
+ uno::Reference<text::XTextRange> xRun(getRun(xParagraph, 1));
+ CPPUNIT_ASSERT_EQUAL(OUString(""), getProperty<OUString>(xRun, "CharStyleName"));
+ CPPUNIT_ASSERT_EQUAL(11.f, getProperty<float>(xRun, "CharHeight"));
+ CPPUNIT_ASSERT_EQUAL(awt::FontSlant_NONE, getProperty<awt::FontSlant>(xRun, "CharPosture"));
+ comphelper::SequenceAsHashMap listAutoFormat(xProps->getPropertyValue("ListAutoFormat"));
+ CPPUNIT_ASSERT_EQUAL(OUString("Emphasis"), listAutoFormat["CharStyleName"].get<OUString>());
+ CPPUNIT_ASSERT(!listAutoFormat["CharHeight"].hasValue());
+ CPPUNIT_ASSERT(!listAutoFormat["CharPosture"].hasValue());
+ }
+ {
+ uno::Reference<text::XTextRange> xParagraph(getParagraph(3));
+ CPPUNIT_ASSERT_EQUAL(OUString("Char style mark and text"), xParagraph->getString());
+ uno::Reference<beans::XPropertySet> xProps(xParagraph, uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(OUString("List Paragraph"),
+ getProperty<OUString>(xProps, "ParaStyleName"));
+ uno::Reference<text::XTextRange> xRun(getRun(xParagraph, 1));
+ CPPUNIT_ASSERT_EQUAL(OUString("Emphasis"), getProperty<OUString>(xRun, "CharStyleName"));
+ CPPUNIT_ASSERT_EQUAL(16.f, getProperty<float>(xRun, "CharHeight"));
+ CPPUNIT_ASSERT_EQUAL(awt::FontSlant_ITALIC,
+ getProperty<awt::FontSlant>(xRun, "CharPosture"));
+ comphelper::SequenceAsHashMap listAutoFormat(xProps->getPropertyValue("ListAutoFormat"));
+ CPPUNIT_ASSERT_EQUAL(OUString("Emphasis"), listAutoFormat["CharStyleName"].get<OUString>());
+ CPPUNIT_ASSERT(!listAutoFormat["CharHeight"].hasValue());
+ CPPUNIT_ASSERT(!listAutoFormat["CharPosture"].hasValue());
+ }
+ {
+ uno::Reference<text::XTextRange> xParagraph(getParagraph(4));
+ CPPUNIT_ASSERT_EQUAL(OUString("Char style text"), xParagraph->getString());
+ uno::Reference<beans::XPropertySet> xProps(xParagraph, uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(OUString("List Paragraph"),
+ getProperty<OUString>(xProps, "ParaStyleName"));
+ uno::Reference<text::XTextRange> xRun(getRun(xParagraph, 1));
+ CPPUNIT_ASSERT_EQUAL(OUString("Emphasis"), getProperty<OUString>(xRun, "CharStyleName"));
+ CPPUNIT_ASSERT_EQUAL(16.f, getProperty<float>(xRun, "CharHeight"));
+ CPPUNIT_ASSERT_EQUAL(awt::FontSlant_ITALIC,
+ getProperty<awt::FontSlant>(xRun, "CharPosture"));
+ CPPUNIT_ASSERT(!xProps->getPropertyValue("ListAutoFormat").hasValue());
+ }
+
+ {
+ uno::Reference<text::XTextRange> xParagraph(getParagraph(5));
+ CPPUNIT_ASSERT_EQUAL(OUString("Para style"), xParagraph->getString());
+ uno::Reference<beans::XPropertySet> xProps(xParagraph, uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(OUString("List Paragraph E"),
+ getProperty<OUString>(xProps, "ParaStyleName"));
+ uno::Reference<text::XTextRange> xRun(getRun(xParagraph, 1));
+ CPPUNIT_ASSERT_EQUAL(OUString(""), getProperty<OUString>(xRun, "CharStyleName"));
+ CPPUNIT_ASSERT_EQUAL(16.f, getProperty<float>(xRun, "CharHeight"));
+ CPPUNIT_ASSERT_EQUAL(awt::FontSlant_ITALIC,
+ getProperty<awt::FontSlant>(xRun, "CharPosture"));
+ CPPUNIT_ASSERT(!xProps->getPropertyValue("ListAutoFormat").hasValue());
+ }
+ {
+ uno::Reference<text::XTextRange> xParagraph(getParagraph(6));
+ CPPUNIT_ASSERT_EQUAL(OUString("Para style + Char style mark"), xParagraph->getString());
+ uno::Reference<beans::XPropertySet> xProps(xParagraph, uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(OUString("List Paragraph E"),
+ getProperty<OUString>(xProps, "ParaStyleName"));
+ uno::Reference<text::XTextRange> xRun(getRun(xParagraph, 1));
+ CPPUNIT_ASSERT_EQUAL(OUString(""), getProperty<OUString>(xRun, "CharStyleName"));
+ CPPUNIT_ASSERT_EQUAL(16.f, getProperty<float>(xRun, "CharHeight"));
+ CPPUNIT_ASSERT_EQUAL(awt::FontSlant_ITALIC,
+ getProperty<awt::FontSlant>(xRun, "CharPosture"));
+ comphelper::SequenceAsHashMap listAutoFormat(xProps->getPropertyValue("ListAutoFormat"));
+ CPPUNIT_ASSERT_EQUAL(OUString("Emphasis"), listAutoFormat["CharStyleName"].get<OUString>());
+ CPPUNIT_ASSERT(!listAutoFormat["CharHeight"].hasValue());
+ // bug was that here the toggle property was not overwritten
+ CPPUNIT_ASSERT_EQUAL(awt::FontSlant_NONE,
+ listAutoFormat["CharPosture"].get<awt::FontSlant>());
+ }
+ {
+ uno::Reference<text::XTextRange> xParagraph(getParagraph(7));
+ CPPUNIT_ASSERT_EQUAL(OUString("Para style + Char style mark and text"),
+ xParagraph->getString());
+ uno::Reference<beans::XPropertySet> xProps(xParagraph, uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(OUString("List Paragraph E"),
+ getProperty<OUString>(xProps, "ParaStyleName"));
+ uno::Reference<text::XTextRange> xRun(getRun(xParagraph, 1));
+ CPPUNIT_ASSERT_EQUAL(OUString("Emphasis"), getProperty<OUString>(xRun, "CharStyleName"));
+ CPPUNIT_ASSERT_EQUAL(16.f, getProperty<float>(xRun, "CharHeight"));
+ CPPUNIT_ASSERT_EQUAL(awt::FontSlant_NONE, getProperty<awt::FontSlant>(xRun, "CharPosture"));
+ comphelper::SequenceAsHashMap listAutoFormat(xProps->getPropertyValue("ListAutoFormat"));
+ CPPUNIT_ASSERT_EQUAL(OUString("Emphasis"), listAutoFormat["CharStyleName"].get<OUString>());
+ CPPUNIT_ASSERT(!listAutoFormat["CharHeight"].hasValue());
+ // bug was that here the toggle property was not overwritten
+ CPPUNIT_ASSERT_EQUAL(awt::FontSlant_NONE,
+ listAutoFormat["CharPosture"].get<awt::FontSlant>());
+ }
+ {
+ uno::Reference<text::XTextRange> xParagraph(getParagraph(8));
+ CPPUNIT_ASSERT_EQUAL(OUString("Para style + Char style text"), xParagraph->getString());
+ uno::Reference<beans::XPropertySet> xProps(xParagraph, uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(OUString("List Paragraph E"),
+ getProperty<OUString>(xProps, "ParaStyleName"));
+ uno::Reference<text::XTextRange> xRun(getRun(xParagraph, 1));
+ CPPUNIT_ASSERT_EQUAL(OUString("Emphasis"), getProperty<OUString>(xRun, "CharStyleName"));
+ CPPUNIT_ASSERT_EQUAL(16.f, getProperty<float>(xRun, "CharHeight"));
+ CPPUNIT_ASSERT_EQUAL(awt::FontSlant_NONE, getProperty<awt::FontSlant>(xRun, "CharPosture"));
+ CPPUNIT_ASSERT(!xProps->getPropertyValue("ListAutoFormat").hasValue());
+ }
+
+ {
+ uno::Reference<text::XTextRange> xParagraph(getParagraph(9));
+ CPPUNIT_ASSERT_EQUAL(OUString("No style + direct mark"), xParagraph->getString());
+ uno::Reference<beans::XPropertySet> xProps(xParagraph, uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(OUString("List Paragraph"),
+ getProperty<OUString>(xProps, "ParaStyleName"));
+ uno::Reference<text::XTextRange> xRun(getRun(xParagraph, 1));
+ CPPUNIT_ASSERT_EQUAL(OUString(""), getProperty<OUString>(xRun, "CharStyleName"));
+ CPPUNIT_ASSERT_EQUAL(11.f, getProperty<float>(xRun, "CharHeight"));
+ CPPUNIT_ASSERT_EQUAL(awt::FontSlant_NONE, getProperty<awt::FontSlant>(xRun, "CharPosture"));
+ comphelper::SequenceAsHashMap listAutoFormat(xProps->getPropertyValue("ListAutoFormat"));
+ CPPUNIT_ASSERT(!listAutoFormat["CharStyleName"].hasValue());
+ CPPUNIT_ASSERT_EQUAL(16.f, listAutoFormat["CharHeight"].get<float>());
+ CPPUNIT_ASSERT_EQUAL(awt::FontSlant_ITALIC,
+ listAutoFormat["CharPosture"].get<awt::FontSlant>());
+ }
+ {
+ uno::Reference<text::XTextRange> xParagraph(getParagraph(10));
+ CPPUNIT_ASSERT_EQUAL(OUString("Char style + direct mark"), xParagraph->getString());
+ uno::Reference<beans::XPropertySet> xProps(xParagraph, uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(OUString("List Paragraph"),
+ getProperty<OUString>(xProps, "ParaStyleName"));
+ uno::Reference<text::XTextRange> xRun(getRun(xParagraph, 1));
+ CPPUNIT_ASSERT_EQUAL(OUString(""), getProperty<OUString>(xRun, "CharStyleName"));
+ CPPUNIT_ASSERT_EQUAL(11.f, getProperty<float>(xRun, "CharHeight"));
+ CPPUNIT_ASSERT_EQUAL(awt::FontSlant_NONE, getProperty<awt::FontSlant>(xRun, "CharPosture"));
+ comphelper::SequenceAsHashMap listAutoFormat(xProps->getPropertyValue("ListAutoFormat"));
+ CPPUNIT_ASSERT_EQUAL(OUString("Emphasis"), listAutoFormat["CharStyleName"].get<OUString>());
+ CPPUNIT_ASSERT_EQUAL(16.f, listAutoFormat["CharHeight"].get<float>());
+ CPPUNIT_ASSERT_EQUAL(awt::FontSlant_ITALIC,
+ listAutoFormat["CharPosture"].get<awt::FontSlant>());
+ }
+ {
+ uno::Reference<text::XTextRange> xParagraph(getParagraph(11));
+ CPPUNIT_ASSERT_EQUAL(OUString("Char style + direct mark and text"),
+ xParagraph->getString());
+ uno::Reference<beans::XPropertySet> xProps(xParagraph, uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(OUString("List Paragraph"),
+ getProperty<OUString>(xProps, "ParaStyleName"));
+ uno::Reference<text::XTextRange> xRun(getRun(xParagraph, 1));
+ CPPUNIT_ASSERT_EQUAL(OUString("Emphasis"), getProperty<OUString>(xRun, "CharStyleName"));
+ CPPUNIT_ASSERT_EQUAL(16.f, getProperty<float>(xRun, "CharHeight"));
+ CPPUNIT_ASSERT_EQUAL(awt::FontSlant_ITALIC,
+ getProperty<awt::FontSlant>(xRun, "CharPosture"));
+ comphelper::SequenceAsHashMap listAutoFormat(xProps->getPropertyValue("ListAutoFormat"));
+ CPPUNIT_ASSERT_EQUAL(OUString("Emphasis"), listAutoFormat["CharStyleName"].get<OUString>());
+ CPPUNIT_ASSERT_EQUAL(16.f, listAutoFormat["CharHeight"].get<float>());
+ CPPUNIT_ASSERT_EQUAL(awt::FontSlant_ITALIC,
+ listAutoFormat["CharPosture"].get<awt::FontSlant>());
+ }
+ {
+ uno::Reference<text::XTextRange> xParagraph(getParagraph(12));
+ CPPUNIT_ASSERT_EQUAL(OUString("Char style + direct text"), xParagraph->getString());
+ uno::Reference<beans::XPropertySet> xProps(xParagraph, uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(OUString("List Paragraph"),
+ getProperty<OUString>(xProps, "ParaStyleName"));
+ uno::Reference<text::XTextRange> xRun(getRun(xParagraph, 1));
+ CPPUNIT_ASSERT_EQUAL(OUString("Emphasis"), getProperty<OUString>(xRun, "CharStyleName"));
+ CPPUNIT_ASSERT_EQUAL(16.f, getProperty<float>(xRun, "CharHeight"));
+ CPPUNIT_ASSERT_EQUAL(awt::FontSlant_ITALIC,
+ getProperty<awt::FontSlant>(xRun, "CharPosture"));
+ CPPUNIT_ASSERT(!xProps->getPropertyValue("ListAutoFormat").hasValue());
+ }
+
+ {
+ uno::Reference<text::XTextRange> xParagraph(getParagraph(13));
+ CPPUNIT_ASSERT_EQUAL(OUString("Para style + direct mark"), xParagraph->getString());
+ uno::Reference<beans::XPropertySet> xProps(xParagraph, uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(OUString("List Paragraph E"),
+ getProperty<OUString>(xProps, "ParaStyleName"));
+ uno::Reference<text::XTextRange> xRun(getRun(xParagraph, 1));
+ CPPUNIT_ASSERT_EQUAL(OUString(""), getProperty<OUString>(xRun, "CharStyleName"));
+ CPPUNIT_ASSERT_EQUAL(16.f, getProperty<float>(xRun, "CharHeight"));
+ CPPUNIT_ASSERT_EQUAL(awt::FontSlant_ITALIC,
+ getProperty<awt::FontSlant>(xRun, "CharPosture"));
+ comphelper::SequenceAsHashMap listAutoFormat(xProps->getPropertyValue("ListAutoFormat"));
+ CPPUNIT_ASSERT(!listAutoFormat["CharStyleName"].hasValue());
+ CPPUNIT_ASSERT_EQUAL(16.f, listAutoFormat["CharHeight"].get<float>());
+ CPPUNIT_ASSERT_EQUAL(awt::FontSlant_ITALIC,
+ listAutoFormat["CharPosture"].get<awt::FontSlant>());
+ }
+ {
+ uno::Reference<text::XTextRange> xParagraph(getParagraph(14));
+ CPPUNIT_ASSERT_EQUAL(OUString("Para style + Char style + direct mark"),
+ xParagraph->getString());
+ uno::Reference<beans::XPropertySet> xProps(xParagraph, uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(OUString("List Paragraph E"),
+ getProperty<OUString>(xProps, "ParaStyleName"));
+ uno::Reference<text::XTextRange> xRun(getRun(xParagraph, 1));
+ CPPUNIT_ASSERT_EQUAL(OUString(""), getProperty<OUString>(xRun, "CharStyleName"));
+ CPPUNIT_ASSERT_EQUAL(16.f, getProperty<float>(xRun, "CharHeight"));
+ CPPUNIT_ASSERT_EQUAL(awt::FontSlant_ITALIC,
+ getProperty<awt::FontSlant>(xRun, "CharPosture"));
+ comphelper::SequenceAsHashMap listAutoFormat(xProps->getPropertyValue("ListAutoFormat"));
+ CPPUNIT_ASSERT_EQUAL(OUString("Emphasis"), listAutoFormat["CharStyleName"].get<OUString>());
+ CPPUNIT_ASSERT_EQUAL(16.f, listAutoFormat["CharHeight"].get<float>());
+ CPPUNIT_ASSERT_EQUAL(awt::FontSlant_ITALIC,
+ listAutoFormat["CharPosture"].get<awt::FontSlant>());
+ }
+ {
+ uno::Reference<text::XTextRange> xParagraph(getParagraph(15));
+ CPPUNIT_ASSERT_EQUAL(OUString("Para style + Char style + direct mark and text"),
+ xParagraph->getString());
+ uno::Reference<beans::XPropertySet> xProps(xParagraph, uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(OUString("List Paragraph E"),
+ getProperty<OUString>(xProps, "ParaStyleName"));
+ uno::Reference<text::XTextRange> xRun(getRun(xParagraph, 1));
+ CPPUNIT_ASSERT_EQUAL(OUString("Emphasis"), getProperty<OUString>(xRun, "CharStyleName"));
+ CPPUNIT_ASSERT_EQUAL(16.f, getProperty<float>(xRun, "CharHeight"));
+ CPPUNIT_ASSERT_EQUAL(awt::FontSlant_ITALIC,
+ getProperty<awt::FontSlant>(xRun, "CharPosture"));
+ comphelper::SequenceAsHashMap listAutoFormat(xProps->getPropertyValue("ListAutoFormat"));
+ CPPUNIT_ASSERT_EQUAL(OUString("Emphasis"), listAutoFormat["CharStyleName"].get<OUString>());
+ CPPUNIT_ASSERT_EQUAL(16.f, listAutoFormat["CharHeight"].get<float>());
+ CPPUNIT_ASSERT_EQUAL(awt::FontSlant_ITALIC,
+ listAutoFormat["CharPosture"].get<awt::FontSlant>());
+ }
+ {
+ uno::Reference<text::XTextRange> xParagraph(getParagraph(16));
+ CPPUNIT_ASSERT_EQUAL(OUString("Para style + Char style + direct text"),
+ xParagraph->getString());
+ uno::Reference<beans::XPropertySet> xProps(xParagraph, uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(OUString("List Paragraph E"),
+ getProperty<OUString>(xProps, "ParaStyleName"));
+ uno::Reference<text::XTextRange> xRun(getRun(xParagraph, 1));
+ CPPUNIT_ASSERT_EQUAL(OUString("Emphasis"), getProperty<OUString>(xRun, "CharStyleName"));
+ CPPUNIT_ASSERT_EQUAL(16.f, getProperty<float>(xRun, "CharHeight"));
+ CPPUNIT_ASSERT_EQUAL(awt::FontSlant_ITALIC,
+ getProperty<awt::FontSlant>(xRun, "CharPosture"));
+ CPPUNIT_ASSERT(!xProps->getPropertyValue("ListAutoFormat").hasValue());
+ }
+}
+
DECLARE_OOXMLEXPORT_TEST(testTdf153909_followTextFlow, "tdf153909_followTextFlow.docx")
{
// Although MSO's UI reports "layoutInCell" for the rectangle, it isn't specified or honored
diff --git a/sw/source/core/unocore/unomap1.cxx b/sw/source/core/unocore/unomap1.cxx
index 12db464a874b..f9e16b1f4260 100644
--- a/sw/source/core/unocore/unomap1.cxx
+++ b/sw/source/core/unocore/unomap1.cxx
@@ -307,6 +307,7 @@ std::span<const SfxItemPropertyMapEntry> SwUnoPropertyMapProvider::GetAutoCharS
{ UNO_NAME_CHAR_BORDER_TOP_COMPLEX_COLOR, RES_CHRATR_BOX, cppu::UnoType<css::util::XComplexColor>::get(), PropertyAttribute::MAYBEVOID, MID_BORDER_TOP_COLOR },
{ UNO_NAME_CHAR_BORDER_BOTTOM_COMPLEX_COLOR, RES_CHRATR_BOX, cppu::UnoType<css::util::XComplexColor>::get(), PropertyAttribute::MAYBEVOID, MID_BORDER_BOTTOM_COLOR },
{ UNO_NAME_CHAR_SHADOW_FORMAT, RES_CHRATR_SHADOW, cppu::UnoType<css::table::ShadowFormat>::get(), PROPERTY_NONE, CONVERT_TWIPS},
+ { UNO_NAME_CHAR_STYLE_NAME, RES_TXTATR_CHARFMT, cppu::UnoType<OUString>::get(), PropertyAttribute::MAYBEVOID, 0 },
};
return aAutoCharStyleMap;
diff --git a/sw/source/core/unocore/unoobj.cxx b/sw/source/core/unocore/unoobj.cxx
index b2f83fee30ea..49562c1d0284 100644
--- a/sw/source/core/unocore/unoobj.cxx
+++ b/sw/source/core/unocore/unoobj.cxx
@@ -539,11 +539,6 @@ SwUnoCursorHelper::SetCursorPropertyValue(
rMap.getByName(prop.Name);
if (!pEntry)
{
- if (prop.Name == "CharStyleName")
- {
- lcl_setCharStyle(rPam.GetDoc(), prop.Value, items);
- continue;
- }
throw beans::UnknownPropertyException(
"Unknown property: " + prop.Name);
}
@@ -552,7 +547,14 @@ SwUnoCursorHelper::SetCursorPropertyValue(
throw beans::PropertyVetoException(
"Property is read-only: " + prop.Name);
}
- rPropSet.setPropertyValue(*pEntry, prop.Value, items);
+ if (prop.Name == "CharStyleName")
+ {
+ lcl_setCharStyle(rPam.GetDoc(), prop.Value, items);
+ }
+ else
+ {
+ rPropSet.setPropertyValue(*pEntry, prop.Value, items);
+ }
}
IStyleAccess& rStyleAccess = rPam.GetDoc().GetIStyleAccess();
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index a76151096604..c277d92f94d3 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -2591,6 +2591,7 @@ void DomainMapper_Impl::finishParagraph( const PropertyMapPtr& pPropertyMap, con
lcl_AddRange(pToBeSavedProperties, xTextAppend, rAppendContext);
}
}
+ applyToggleAttributes(pPropertyMap); // for paragraph marker formatting
std::vector<beans::PropertyValue> aProperties;
if (pPropertyMap)
{
@@ -3064,6 +3065,7 @@ void DomainMapper_Impl::finishParagraph( const PropertyMapPtr& pPropertyMap, con
}
+// TODO this does not yet take table styles into account
void DomainMapper_Impl::applyToggleAttributes(const PropertyMapPtr& pPropertyMap)
{
std::optional<PropertyMap::Property> charStyleProperty = pPropertyMap->getProperty(PROP_CHAR_STYLE_NAME);