[Libreoffice-commits] core.git: sw/qa sw/source
Justin Luth
justin_luth at sil.org
Mon Sep 18 09:26:12 UTC 2017
sw/qa/extras/ooxmlexport/data/tdf109310_endnoteStyleForMSO.docx |binary
sw/qa/extras/ooxmlexport/ooxmlexport9.cxx | 7 +++
sw/source/filter/ww8/attributeoutputbase.hxx | 2 -
sw/source/filter/ww8/docxattributeoutput.cxx | 18 ++++++++--
sw/source/filter/ww8/docxattributeoutput.hxx | 2 -
sw/source/filter/ww8/wrtw8nds.cxx | 8 +++-
6 files changed, 32 insertions(+), 5 deletions(-)
New commits:
commit ac1081170c5bc2234b14ce99b7ea8e583bac82b5
Author: Justin Luth <justin_luth at sil.org>
Date: Wed Sep 6 19:29:40 2017 -0400
tdf#109310 ooxmlexport: write Xnote character style
LibreOffice will just ignore the defined style on import
(since that is statically defined by the footnote code).
Microsoft Office, however, requires the character style be
provided for the footnote number. It doesn't have any
built-in formatting for footnotes.
So, this patch is strictly for MSO's benefit.
Change-Id: I6631dd0eb697589cfd3c13d7838fe14c31a71bbf
Reviewed-on: https://gerrit.libreoffice.org/42035
Tested-by: Jenkins <ci at libreoffice.org>
Reviewed-by: Miklos Vajna <vmiklos at collabora.co.uk>
diff --git a/sw/qa/extras/ooxmlexport/data/tdf109310_endnoteStyleForMSO.docx b/sw/qa/extras/ooxmlexport/data/tdf109310_endnoteStyleForMSO.docx
new file mode 100644
index 000000000000..9949b98d5f68
Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf109310_endnoteStyleForMSO.docx differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport9.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport9.cxx
index a89799b87e39..24016d38c43c 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport9.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport9.cxx
@@ -420,6 +420,13 @@ DECLARE_OOXMLEXPORT_TEST(testTdf103975_notPageBreakE, "tdf103975_notPageBreakE.d
CPPUNIT_ASSERT_EQUAL(style::BreakType_COLUMN_BEFORE, getProperty<style::BreakType>(getParagraph(2), "BreakType"));
}
+DECLARE_OOXMLEXPORT_TEST(testTdf109310_endnoteStyleForMSO, "tdf109310_endnoteStyleForMSO.docx")
+{
+ xmlDocPtr pXmlDoc = parseExport("word/endnotes.xml");
+ if (!pXmlDoc)
+ return;
+ assertXPath(pXmlDoc, "/w:endnotes/w:endnote[@w:id='2']/w:p/w:r[1]/w:rPr/w:rStyle", "w:val");
+}
DECLARE_OOXMLEXPORT_TEST(testTdf103389, "tdf103389.docx")
{
diff --git a/sw/source/filter/ww8/attributeoutputbase.hxx b/sw/source/filter/ww8/attributeoutputbase.hxx
index 21111322b2f2..00ab40dcb88a 100644
--- a/sw/source/filter/ww8/attributeoutputbase.hxx
+++ b/sw/source/filter/ww8/attributeoutputbase.hxx
@@ -181,7 +181,7 @@ public:
virtual void EndRunProperties( const SwRedlineData* pRedlineData ) = 0;
/// docx requires footnoteRef/endnoteRef tag at the beginning of each of them
- virtual void FootnoteEndnoteRefTag() {};
+ virtual bool FootnoteEndnoteRefTag() { return false; };
/// for docx footnotePr/endnotePr inside sectPr
virtual void SectFootnoteEndnotePr() {};
diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx
index 1d0a3dfed712..3d7d8b53957e 100644
--- a/sw/source/filter/ww8/docxattributeoutput.cxx
+++ b/sw/source/filter/ww8/docxattributeoutput.cxx
@@ -2096,12 +2096,26 @@ void DocxAttributeOutput::WritePostponedDiagram()
m_pPostponedDiagrams.reset(nullptr);
}
-void DocxAttributeOutput::FootnoteEndnoteRefTag()
+bool DocxAttributeOutput::FootnoteEndnoteRefTag()
{
if( m_footnoteEndnoteRefTag == 0 )
- return;
+ return false;
+
+ // output the character style for MS Word's benefit
+ const SwEndNoteInfo& rInfo = m_footnoteEndnoteRefTag == XML_footnoteRef ?
+ m_rExport.m_pDoc->GetFootnoteInfo() : m_rExport.m_pDoc->GetEndNoteInfo();
+ const SwCharFormat* pCharFormat = rInfo.GetCharFormat( *m_rExport.m_pDoc );
+ if ( pCharFormat )
+ {
+ const OString aStyleId(m_rExport.m_pStyles->GetStyleId(m_rExport.GetId(pCharFormat)));
+ m_pSerializer->startElementNS( XML_w, XML_rPr, FSEND );
+ m_pSerializer->singleElementNS( XML_w, XML_rStyle, FSNS( XML_w, XML_val ), aStyleId.getStr(), FSEND );
+ m_pSerializer->endElementNS( XML_w, XML_rPr );
+ }
+
m_pSerializer->singleElementNS( XML_w, m_footnoteEndnoteRefTag, FSEND );
m_footnoteEndnoteRefTag = 0;
+ return true;
}
/** Output sal_Unicode* as a run text (<t>the text</t>).
diff --git a/sw/source/filter/ww8/docxattributeoutput.hxx b/sw/source/filter/ww8/docxattributeoutput.hxx
index d06486403a07..8024566433f6 100644
--- a/sw/source/filter/ww8/docxattributeoutput.hxx
+++ b/sw/source/filter/ww8/docxattributeoutput.hxx
@@ -174,7 +174,7 @@ public:
/// Called after we end outputting the attributes.
virtual void EndRunProperties( const SwRedlineData* pRedlineData ) override;
- virtual void FootnoteEndnoteRefTag() override;
+ virtual bool FootnoteEndnoteRefTag() override;
virtual void SectFootnoteEndnotePr() override;
diff --git a/sw/source/filter/ww8/wrtw8nds.cxx b/sw/source/filter/ww8/wrtw8nds.cxx
index 4c99f18b1d53..1397526a02d5 100644
--- a/sw/source/filter/ww8/wrtw8nds.cxx
+++ b/sw/source/filter/ww8/wrtw8nds.cxx
@@ -2153,7 +2153,13 @@ void MSWordExportBase::OutputTextNode( SwTextNode& rNode )
AttrOutput().StartRun( pRedlineData, bSingleEmptyRun );
if( m_nTextTyp == TXT_FTN || m_nTextTyp == TXT_EDN )
- AttrOutput().FootnoteEndnoteRefTag();
+ {
+ if( AttrOutput().FootnoteEndnoteRefTag() )
+ {
+ AttrOutput().EndRun();
+ AttrOutput().StartRun( pRedlineData, bSingleEmptyRun );
+ }
+ }
if( nNextAttr > nEnd )
nNextAttr = nEnd;
More information about the Libreoffice-commits
mailing list