tdf#95376 DOCX import: fix incorrectly indented tab stops

Regression from commit f4badd9a48
(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
This commit is contained in:
Miklos Vajna 2016-01-26 13:21:28 +01:00
parent 09e46424c5
commit 3915bf2dc8
3 changed files with 17 additions and 0 deletions

Binary file not shown.

View file

@ -2859,6 +2859,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.

View file

@ -1213,6 +1213,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