Hi,

I would be very happy if someone could take a look at the attached patch,
and maybe improve it.

Libo/OOo exports hyperlinks with / as directory separator. MS Office does
not understand that kind of paths, so / has to be rewritten to \

Description is here:
http://qa.openoffice.org/issues/show_bug.cgi?id=115297

-- 
Knut Olav Bøhmer
From b75385158bab3a4f60c1a07ceba2122e2e3f9625 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Knut=20Olav=20B=C3=B8hmer?= <boh...@gmail.com>
Date: Fri, 29 Oct 2010 23:24:58 +0200
Subject: [PATCH] OOo bug 115297, WW8: Export of relative hyperlinks is in a non-portable format

---
 sw/source/filter/ww8/wrtw8nds.cxx |   12 ++++++++++--
 1 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/sw/source/filter/ww8/wrtw8nds.cxx b/sw/source/filter/ww8/wrtw8nds.cxx
index 277387a..165f0d0 100644
--- a/sw/source/filter/ww8/wrtw8nds.cxx
+++ b/sw/source/filter/ww8/wrtw8nds.cxx
@@ -826,8 +826,10 @@ bool WW8AttributeOutput::AnalyzeURL( const String& rUrl, const String& rTarget,
     String sURL = *pLinkURL;
     String sMark = *pMark;
 
-    if ( sURL.Len() )
-        sURL = URIHelper::simpleNormalizedMakeRelative( m_rWW8Export.GetWriter().GetBaseURL(), sURL );
+    if ( sURL.Len() ){
+      sURL = URIHelper::simpleNormalizedMakeRelative( m_rWW8Export.GetWriter().GetBaseURL(), sURL );
+      sURL.SearchAndReplaceAll( '/', '\\' );
+    }
 
     if ( bBookMarkOnly )
         sURL = FieldString( ww::eHYPERLINK );
@@ -955,6 +957,9 @@ bool WW8AttributeOutput::StartURL( const String &rUrl, const String &rTarget )
             sURL.SearchAndReplaceAll( '/', '\\' );
         }
 
+	if ( sURL.EqualsAscii( "../", 0, 3 ) )
+	     sURL.SearchAndReplaceAll( '/', '\\' );
+
         m_rWW8Export.pDataStrm->Write( MAGIC_C, sizeof(MAGIC_C) );
         SwWW8Writer::WriteLong( *m_rWW8Export.pDataStrm, sURL.Len()+1 );
         SwWW8Writer::WriteString8( *m_rWW8Export.pDataStrm, sURL, true,
@@ -978,6 +983,9 @@ bool WW8AttributeOutput::StartURL( const String &rUrl, const String &rTarget )
             0x8C,0x82,0x00,0xAA,0x00,0x4B,0xA9,0x0B
         };
 
+	if ( sURL.EqualsAscii( "../", 0, 3 ) )
+	     sURL.SearchAndReplaceAll( '/', '\\' );
+
         m_rWW8Export.pDataStrm->Write( MAGIC_B, sizeof(MAGIC_B) );
         SwWW8Writer::WriteLong( *m_rWW8Export.pDataStrm, 2 * ( sURL.Len() + 1 ) );
         SwWW8Writer::WriteString16( *m_rWW8Export.pDataStrm, sURL, true );
-- 
1.7.1

_______________________________________________
LibreOffice mailing list
LibreOffice@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice

Reply via email to