Kaydet (Commit) abc440a6 authored tarafından Miklos Vajna's avatar Miklos Vajna

tdf#105095 DOCX import: conditionally ignore leading tab in footnotes

Commit b38629ae (cp#1000017 DOCX/RTF
import: avoid fake tab char in footnotes, 2013-12-05) added code to
strip leading tabs from footnote text to improve odt->docx->odt rountrip
experience.

Turns out that this is correct only in case the gap between the footnote
number and the content is provided by a paragraph margin. In case there
is no such margin, then the tab is wanted; so only conditionally ignore
such leading tab characters.

Change-Id: I9d419bf2fd3b4899208489210cbe9809a2ab0736
Reviewed-on: https://gerrit.libreoffice.org/39490Reviewed-by: 's avatarMiklos Vajna <vmiklos@collabora.co.uk>
Tested-by: 's avatarJenkins <ci@libreoffice.org>
üst 287e853b
......@@ -1988,7 +1988,12 @@ DECLARE_OOXMLEXPORT_TEST(testTdf90810, "tdf90810short.docx")
uno::Reference<text::XFootnote> xFootnote(xFootnoteIdxAcc->getByIndex(0), uno::UNO_QUERY);
uno::Reference<text::XText> xFootnoteText(xFootnote, uno::UNO_QUERY);
rtl::OUString sFootnoteText = xFootnoteText->getString();
CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(90), sFootnoteText.getLength());
// Original document doesn't have a leading tab in the footnote, but the
// export adds one unconditionally.
if (mbExported)
CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(91), sFootnoteText.getLength());
else
CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(90), sFootnoteText.getLength());
}
DECLARE_OOXMLEXPORT_TEST(testTdf89165, "tdf89165.docx")
......
......@@ -736,6 +736,16 @@ DECLARE_OOXMLEXPORT_TEST(testTdf100075, "tdf100075.docx")
CPPUNIT_ASSERT(getProperty<sal_Int32>(xFrame1, "Height") > getProperty<sal_Int32>(xFrame2, "Height"));
}
DECLARE_OOXMLEXPORT_TEST(testTdf105095, "tdf105095.docx")
{
uno::Reference<text::XFootnotesSupplier> xFootnotesSupplier(mxComponent, uno::UNO_QUERY);
uno::Reference<container::XIndexAccess> xFootnotes(xFootnotesSupplier->getFootnotes(), uno::UNO_QUERY);
uno::Reference<text::XTextRange> xTextRange(xFootnotes->getByIndex(0), uno::UNO_QUERY);
// This failed, tab between the footnote number and the footnote content
// was lost on import.
CPPUNIT_ASSERT(xTextRange->getString().endsWith("\tfootnote"));
}
CPPUNIT_PLUGIN_IMPLEMENT();
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
......@@ -1721,10 +1721,20 @@ void DomainMapper_Impl::PushFootOrEndnote( bool bIsFootnote )
// Redlines for the footnote anchor
CheckRedline( xFootnote->getAnchor( ) );
// Word has a leading tab on footnotes, but we don't implement space
// between the footnote number and text using a tab, so just ignore
// that for now.
m_bIgnoreNextTab = true;
// Word has a leading tab on footnotes, but we may implement space
// between the footnote number and text using a paragraph margin, not a
// tab (Writer default). So ignore that in case there is a margin set.
uno::Reference<style::XStyleFamiliesSupplier> xStylesSupplier( GetTextDocument(), uno::UNO_QUERY);
uno::Reference<container::XNameAccess> xStyleFamilies = xStylesSupplier->getStyleFamilies();
uno::Reference<container::XNameContainer> xStyles;
xStyleFamilies->getByName("ParagraphStyles") >>= xStyles;
uno::Reference<beans::XPropertySet> xStyle(xStyles->getByName("Footnote"), uno::UNO_QUERY);
if (xStyle.is())
{
sal_Int32 nMargin = 0;
xStyle->getPropertyValue("ParaLeftMargin") >>= nMargin;
m_bIgnoreNextTab = nMargin > 0;
}
}
catch( const uno::Exception& e )
{
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment