[Libreoffice-commits] core.git: sw/qa writerfilter/source
Miklos Vajna
vmiklos at collabora.co.uk
Wed Jun 4 03:34:45 PDT 2014
sw/qa/extras/ooxmlimport/data/caption.docx |binary
sw/qa/extras/ooxmlimport/ooxmlimport.cxx | 7 ++++++
writerfilter/source/dmapper/StyleSheetTable.cxx | 28 ++++++++++++++++++++++++
3 files changed, 35 insertions(+)
New commits:
commit c12a78e42e1cbaaf4ea021c82acbec5ea177b1f6
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date: Wed Jun 4 12:19:46 2014 +0200
writerfilter: reset properties of reused styles
When we have a style to import and the name is already taken, we reuse
the style (we can't use replaceByName(), it only works with user-defined
styles). If that happens, reset non-default properties of it, so the
result will be what was in the file, not a merge of Writer defaults and
what was in the file.
Change-Id: Ifb1098f78254a061b11fd6c6d2a2fa8d85a00d60
diff --git a/sw/qa/extras/ooxmlimport/data/caption.docx b/sw/qa/extras/ooxmlimport/data/caption.docx
new file mode 100644
index 0000000..301472c
Binary files /dev/null and b/sw/qa/extras/ooxmlimport/data/caption.docx differ
diff --git a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
index fe9c686..b9ecb55 100644
--- a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
+++ b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
@@ -2164,6 +2164,13 @@ DECLARE_OOXMLIMPORT_TEST(testBnc875718, "bnc875718.docx")
CPPUNIT_ASSERT_EQUAL( OUString( "Text\n" ), text->getString());
}
+DECLARE_OOXMLIMPORT_TEST(testCaption, "caption.docx")
+{
+ uno::Reference<beans::XPropertySet> xStyle(getStyles("ParagraphStyles")->getByName("Caption"), uno::UNO_QUERY);
+ // This was awt::FontSlant_ITALIC: Writer default was used instead of what is in the document.
+ CPPUNIT_ASSERT_EQUAL(awt::FontSlant_NONE, getProperty<awt::FontSlant>(xStyle, "CharPosture"));
+}
+
#endif
CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/writerfilter/source/dmapper/StyleSheetTable.cxx b/writerfilter/source/dmapper/StyleSheetTable.cxx
index a8da876..3ff8e59 100644
--- a/writerfilter/source/dmapper/StyleSheetTable.cxx
+++ b/writerfilter/source/dmapper/StyleSheetTable.cxx
@@ -41,6 +41,7 @@
#include <stdio.h>
#include <rtl/ustrbuf.hxx>
#include <comphelper/string.hxx>
+#include <comphelper/sequenceasvector.hxx>
#include <dmapperLoggers.hxx>
@@ -938,6 +939,33 @@ void StyleSheetTable::ApplyStyleSheets( FontTablePtr rFontTable )
continue;
}
xStyles->getByName( sConvertedStyleName ) >>= xStyle;
+
+ // See if the existing style has any non-default properties. If so, reset them back to default.
+ uno::Reference<beans::XPropertySet> xPropertySet(xStyle, uno::UNO_QUERY);
+ uno::Reference<beans::XPropertySetInfo> xPropertySetInfo = xPropertySet->getPropertySetInfo();
+ uno::Sequence<beans::Property> aProperties = xPropertySetInfo->getProperties();
+ comphelper::SequenceAsVector<OUString> aPropertyNames;
+ for (sal_Int32 i = 0; i < aProperties.getLength(); ++i)
+ {
+ aPropertyNames.push_back(aProperties[i].Name);
+ }
+
+ uno::Reference<beans::XPropertyState> xPropertyState(xStyle, uno::UNO_QUERY);
+ uno::Sequence<beans::PropertyState> aStates = xPropertyState->getPropertyStates(aPropertyNames.getAsConstList());
+ for (sal_Int32 i = 0; i < aStates.getLength(); ++i)
+ {
+ if (aStates[i] == beans::PropertyState_DIRECT_VALUE)
+ {
+ try
+ {
+ xPropertyState->setPropertyToDefault(aPropertyNames[i]);
+ }
+ catch(const uno::Exception& rException)
+ {
+ SAL_INFO("writerfilter", "setPropertyToDefault(" << aPropertyNames[i] << ") failed: " << rException.Message);
+ }
+ }
+ }
}
else
{
More information about the Libreoffice-commits
mailing list