summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2016-01-26 13:21:28 +0100
committerAndras Timar <andras.timar@collabora.com>2016-02-22 08:58:19 +0100
commit58e845e408b41ebc192e7ecb9212c33a8f67f3af (patch)
treeba2c45cdeffe22c97f7d317d586c781056bbfdd7
parent1aa00af07054b896c9e8500b2f409a70f7052550 (diff)
tdf#95376 DOCX import: fix incorrectly indented tab stops
Regression from commit f4badd9a485f32f787d78431ed673e2932973887 (tdf#92454 DOCX import: allow overriding para prop from num style in para style, 2015-09-22), the problem was yet another priority mishandling in the maze of various styles and indentation handling. In the tdf#92454 bugdoc, both a numbering-from-paragraph-style and a paragraph-style defined indentation, and Word preferred the numbering, while Writer preferred the paragraph style, that's why the import-time conversion was added. However, it turns out there is a 3rd source that's still not direct indentation formatting: a direct numbering. So the correct priority is: direct-ind > ind-from-num > ind-from-parastyle > ind-from-num-from-parastyle Which means in this case the indentation should not be set directly: the two conflicting value (ind-from-num and ind-from-parastyle) will be resolved correctly by Writer core. Given that we always first get the para style info, and only then the numbering, we just need to undo the conversion added for the other bug if we see a direct numbering, then both the old bugdoc and this new one will be handled properly. Change-Id: I09cc84605d5df6159da985ad069d46b580a53358 (cherry picked from commit 3915bf2dc877d5f1140798e24933db0f21386a4a) Reviewed-on: https://gerrit.libreoffice.org/22482 Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com> (cherry picked from commit 6ecfd6bffb23a1a326a5433e6b9170b938fac77c)
-rw-r--r--sw/qa/extras/ooxmlimport/data/tdf95376.docxbin0 -> 25375 bytes
-rw-r--r--sw/qa/extras/ooxmlimport/ooxmlimport.cxx9
-rw-r--r--writerfilter/source/dmapper/DomainMapper.cxx8
3 files changed, 17 insertions, 0 deletions
diff --git a/sw/qa/extras/ooxmlimport/data/tdf95376.docx b/sw/qa/extras/ooxmlimport/data/tdf95376.docx
new file mode 100644
index 000000000000..9bd2d05b2e7a
--- /dev/null
+++ b/sw/qa/extras/ooxmlimport/data/tdf95376.docx
Binary files differ
diff --git a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
index 384bc3e24f7f..c280b5487048 100644
--- a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
+++ b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
@@ -2815,6 +2815,15 @@ DECLARE_OOXMLIMPORT_TEST(testTdf92454, "tdf92454.docx")
CPPUNIT_ASSERT_EQUAL(beans::PropertyState_DIRECT_VALUE, xParagraph->getPropertyState("ParaFirstLineIndent"));
}
+DECLARE_OOXMLIMPORT_TEST(testTdf95376, "tdf95376.docx")
+{
+ uno::Reference<beans::XPropertyState> xParagraph(getParagraph(2), uno::UNO_QUERY);
+ // This was beans::PropertyState_DIRECT_VALUE: indentation-from-numbering
+ // did not have priority over indentation-from-paragraph-style, due to a
+ // filter workaround that's not correct here.
+ CPPUNIT_ASSERT_EQUAL(beans::PropertyState_DEFAULT_VALUE, xParagraph->getPropertyState("ParaFirstLineIndent"));
+}
+
DECLARE_OOXMLIMPORT_TEST(testTdf92124, "tdf92124.docx")
{
// Get the second paragraph's numbering style's 1st level's suffix.
diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx
index 76db49760142..9a3ae425f27d 100644
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -1196,6 +1196,14 @@ void DomainMapper::sprmWithProps( Sprm& rSprm, PropertyMapPtr rContext )
rContext->Insert( PROP_NUMBERING_RULES, aRules );
// erase numbering from pStyle if already set
rContext->Erase(PROP_NUMBERING_STYLE_NAME);
+
+ // Indentation can came from:
+ // 1) Paragraph style's numbering's indentation: the current non-style numId has priority over it.
+ // 2) Numbering's indentation: Writer handles that natively, so it should not be set on rContext.
+ // 3) Paragraph style's indentation: ditto.
+ // 4) Direct paragraph formatting: that will came later.
+ // So no situation where keeping indentation at this point would make sense -> erase.
+ rContext->Erase(PROP_PARA_FIRST_LINE_INDENT);
}
}
else