sw/inc/pagedesc.hxx | 2 ++ sw/qa/extras/ooxmlexport/ooxmlexport5.cxx | 3 +++ sw/source/core/layout/ftnfrm.cxx | 12 ++++++++++-- sw/source/filter/ww8/docxattributeoutput.cxx | 24 +++++++++++++++++++++++- 4 files changed, 38 insertions(+), 3 deletions(-)
New commits: commit d2b590614c71f195a5ea14c4e950e0129ca4e120 Author: Michael Stahl <[email protected]> AuthorDate: Fri Feb 21 16:34:56 2020 +0100 Commit: Thorsten Behrens <[email protected]> CommitDate: Tue Feb 25 15:34:28 2020 +0100 sw: improve DOCX export of footnote separator a little more The Writer footnote separator has configurable line thickness and spacing above and below; let's abuse the font size of the paragraph to approximate the height of the separator (in the bugdoc that's currently interesting there isn't a separator line so if it works in that case it's good enough). Change-Id: I7f33e5a226ecaa9f9ab233e003c71aaed145b638 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/89228 Tested-by: Jenkins Reviewed-by: Michael Stahl <[email protected]> (cherry picked from commit 12d88808fbde933c0498c895ddb74700c263bf0f) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/89138 Reviewed-by: Thorsten Behrens <[email protected]> diff --git a/sw/inc/pagedesc.hxx b/sw/inc/pagedesc.hxx index 86e3fc075a7c..684bd040820d 100644 --- a/sw/inc/pagedesc.hxx +++ b/sw/inc/pagedesc.hxx @@ -377,6 +377,8 @@ public: namespace sw { class PageFootnoteHint final : public SfxHint {}; + + SW_DLLPUBLIC SwTwips FootnoteSeparatorHeight(SwPageFootnoteInfo const&); } typedef boost::multi_index_container< diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport5.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport5.cxx index 9dfd7da47ecf..cb4b0ad2e3e7 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport5.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport5.cxx @@ -339,9 +339,12 @@ DECLARE_OOXMLEXPORT_EXPORTONLY_TEST(testFootnoteSeparator, "footnotesep.fodt") assertXPath(pXmlFootnotes, "/w:footnotes[1]/w:footnote[1]", "id", "0"); assertXPath(pXmlFootnotes, "/w:footnotes[1]/w:footnote[1]", "type", "separator"); assertXPath(pXmlFootnotes, "/w:footnotes[1]/w:footnote[1]/w:p[1]/w:r[1]/w:separator", 0); + // use paragraph font size to simulate height + assertXPath(pXmlFootnotes, "/w:footnotes[1]/w:footnote[1]/w:p[1]/w:pPr[1]/w:rPr[1]/w:sz", "val", "12"); assertXPath(pXmlFootnotes, "/w:footnotes[1]/w:footnote[2]", "id", "1"); assertXPath(pXmlFootnotes, "/w:footnotes[1]/w:footnote[2]", "type", "continuationSeparator"); assertXPath(pXmlFootnotes, "/w:footnotes[1]/w:footnote[2]/w:p[1]/w:r[1]/w:continuationSeparator", 0); + assertXPath(pXmlFootnotes, "/w:footnotes[1]/w:footnote[2]/w:p[1]/w:pPr[1]/w:rPr[1]/w:sz", "val", "12"); xmlDocPtr pXmlSettings = parseExport("word/settings.xml"); assertXPath(pXmlSettings, "/w:settings[1]/w:footnotePr[1]/w:footnote[1]", "id", "0"); diff --git a/sw/source/core/layout/ftnfrm.cxx b/sw/source/core/layout/ftnfrm.cxx index da0cf0334de5..767ead4c6ef1 100644 --- a/sw/source/core/layout/ftnfrm.cxx +++ b/sw/source/core/layout/ftnfrm.cxx @@ -184,14 +184,22 @@ static long lcl_Undersize( const SwFrame* pFrame ) return nRet; } +namespace sw { + +SwTwips FootnoteSeparatorHeight(SwPageFootnoteInfo const& rInf) +{ + return rInf.GetTopDist() + rInf.GetBottomDist() + rInf.GetLineWidth(); +} + +} // namespace sw + /// "format" the frame (Fixsize is not set here). void SwFootnoteContFrame::Format( vcl::RenderContext* /*pRenderContext*/, const SwBorderAttrs * ) { // calculate total border, only one distance to the top const SwPageFrame* pPage = FindPageFrame(); const SwPageFootnoteInfo &rInf = pPage->GetPageDesc()->GetFootnoteInfo(); - const SwTwips nBorder = rInf.GetTopDist() + rInf.GetBottomDist() + - rInf.GetLineWidth(); + const SwTwips nBorder = sw::FootnoteSeparatorHeight(rInf); SwRectFnSet aRectFnSet(this); if ( !isFramePrintAreaValid() ) diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx index 553d4b907583..d41691d39d59 100644 --- a/sw/source/filter/ww8/docxattributeoutput.cxx +++ b/sw/source/filter/ww8/docxattributeoutput.cxx @@ -7546,6 +7546,21 @@ void DocxAttributeOutput::FootnoteEndnoteReference() } } +static void WriteFootnoteSeparatorHeight( + ::sax_fastparser::FSHelperPtr const& pSerializer, SwTwips const nHeight) +{ + // try to get the height by setting font size of the paragraph + if (nHeight != 0) + { + pSerializer->startElementNS(XML_w, XML_pPr); + pSerializer->startElementNS(XML_w, XML_rPr); + pSerializer->singleElementNS(XML_w, XML_sz, FSNS(XML_w, XML_val), + OString::number((nHeight + 5) / 10)); + pSerializer->endElementNS(XML_w, XML_rPr); + pSerializer->endElementNS(XML_w, XML_pPr); + } +} + void DocxAttributeOutput::FootnotesEndnotes( bool bFootnotes ) { m_setFootnote = true; @@ -7564,9 +7579,9 @@ void DocxAttributeOutput::FootnotesEndnotes( bool bFootnotes ) FSNS( XML_w, XML_id ), OString::number(nIndex++), FSNS( XML_w, XML_type ), "separator" ); m_pSerializer->startElementNS(XML_w, XML_p); - m_pSerializer->startElementNS(XML_w, XML_r); bool bSeparator = true; + SwTwips nHeight(0); if (bFootnotes) { const SwPageFootnoteInfo& rFootnoteInfo = m_rExport.m_pDoc->GetPageDesc(0).GetFootnoteInfo(); @@ -7574,8 +7589,12 @@ void DocxAttributeOutput::FootnotesEndnotes( bool bFootnotes ) bSeparator = rFootnoteInfo.GetLineStyle() != SvxBorderLineStyle::NONE && rFootnoteInfo.GetLineWidth() > 0 && double(rFootnoteInfo.GetWidth()) > 0; + nHeight = sw::FootnoteSeparatorHeight(rFootnoteInfo); } + WriteFootnoteSeparatorHeight(m_pSerializer, nHeight); + + m_pSerializer->startElementNS(XML_w, XML_r); if (bSeparator) m_pSerializer->singleElementNS(XML_w, XML_separator); m_pSerializer->endElementNS( XML_w, XML_r ); @@ -7587,6 +7606,9 @@ void DocxAttributeOutput::FootnotesEndnotes( bool bFootnotes ) FSNS( XML_w, XML_id ), OString::number(nIndex++), FSNS( XML_w, XML_type ), "continuationSeparator" ); m_pSerializer->startElementNS(XML_w, XML_p); + + WriteFootnoteSeparatorHeight(m_pSerializer, nHeight); + m_pSerializer->startElementNS(XML_w, XML_r); if (bSeparator) { _______________________________________________ Libreoffice-commits mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
