summaryrefslogtreecommitdiff
path: root/sw
diff options
context:
space:
mode:
authorC├ędric Bosdonnat <cedric.bosdonnat@free.fr>2012-08-02 10:20:59 +0200
committerMiklos Vajna <vmiklos@suse.cz>2012-08-02 10:36:44 +0200
commit11cfa8bd5fb734ce3d2ee3b9370745fc8ad5c7f9 (patch)
treeed156c049db2200c193639d8546fde04b29ac4ee /sw
parent996e1931e0a57e3c37b75308a7e1c391f83d16b0 (diff)
fdo#52610: Fixed several docx export bugs
+ hyperlink starting before a field and ending in its results isn't valid. + when footnotes have hyperlinks we need to add the proper XML namespace and output the relations to a different file. Change-Id: I1c6cb8acba21c35e10bb0497eeaf96bbd73730d1 (cherry picked from commit 0e4846ec20c1aefc554037e8f08255019c08da47) Signed-off-by: Miklos Vajna <vmiklos@suse.cz>
Diffstat (limited to 'sw')
-rw-r--r--sw/source/filter/ww8/docxattributeoutput.cxx25
-rw-r--r--sw/source/filter/ww8/docxattributeoutput.hxx2
2 files changed, 15 insertions, 12 deletions
diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx
index 4737501a4961..71d39af70793 100644
--- a/sw/source/filter/ww8/docxattributeoutput.cxx
+++ b/sw/source/filter/ww8/docxattributeoutput.cxx
@@ -548,14 +548,6 @@ void DocxAttributeOutput::EndRun()
m_pSerializer->endElementNS( XML_w, XML_hyperlink );
m_closeHyperlinkInPreviousRun = false;
}
- // prepend the actual run start
- if ( m_pHyperlinkAttrList )
- {
- XFastAttributeListRef xAttrList ( m_pHyperlinkAttrList );
-
- m_pSerializer->startElementNS( XML_w, XML_hyperlink, xAttrList );
- m_pHyperlinkAttrList = NULL;
- }
// Write the hyperlink and toc fields starts
for ( std::vector<FieldInfos>::iterator pIt = m_Fields.begin(); pIt != m_Fields.end(); )
@@ -574,6 +566,15 @@ void DocxAttributeOutput::EndRun()
++pIt;
}
+ // Start the hyperlink after the fields separators or we would generate invalid file
+ if ( m_pHyperlinkAttrList )
+ {
+ XFastAttributeListRef xAttrList ( m_pHyperlinkAttrList );
+
+ m_pSerializer->startElementNS( XML_w, XML_hyperlink, xAttrList );
+ m_pHyperlinkAttrList = NULL;
+ }
+
DoWriteBookmarks( );
m_pSerializer->startElementNS( XML_w, XML_r, FSEND );
@@ -1213,9 +1214,10 @@ bool DocxAttributeOutput::StartURL( const String& rUrl, const String& rTarget )
{
OUString osUrl( sUrl );
- ::rtl::OString sId = m_rExport.AddRelation(
- S( "http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink" ),
- osUrl );
+ OString sId = rtl::OUStringToOString( GetExport().GetFilter().addRelation( m_pSerializer->getOutputStream(),
+ S( "http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink" ),
+ osUrl, true ), RTL_TEXTENCODING_UTF8 );
+
m_pHyperlinkAttrList->add( FSNS( XML_r, XML_id), sId.getStr());
}
else
@@ -3543,6 +3545,7 @@ void DocxAttributeOutput::FootnotesEndnotes( bool bFootnotes )
m_pSerializer->startElementNS( XML_w, nBody,
FSNS( XML_xmlns, XML_w ), "http://schemas.openxmlformats.org/wordprocessingml/2006/main",
+ FSNS( XML_xmlns, XML_r ), "http://schemas.openxmlformats.org/officeDocument/2006/relationships",
FSEND );
sal_Int32 nIndex = 0;
diff --git a/sw/source/filter/ww8/docxattributeoutput.hxx b/sw/source/filter/ww8/docxattributeoutput.hxx
index 3c855cf20286..788905f00183 100644
--- a/sw/source/filter/ww8/docxattributeoutput.hxx
+++ b/sw/source/filter/ww8/docxattributeoutput.hxx
@@ -612,7 +612,7 @@ public:
virtual DocxExport& GetExport();
const DocxExport& GetExport() const { return const_cast< DocxAttributeOutput* >( this )->GetExport(); }
- /// For eg. the output of the styles, we need to switch the serializer to enother one.
+ /// For eg. the output of the styles, we need to switch the serializer to an other one.
void SetSerializer( ::sax_fastparser::FSHelperPtr pSerializer ) { m_pSerializer = pSerializer; }
/// Occasionnaly need to use this serializer from the outside