summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2014-04-22 14:49:41 +0200
committerMiklos Vajna <vmiklos@collabora.co.uk>2014-04-22 15:08:48 +0200
commit55c832d86e6cb06e9d6423ce5e6245189bc80da1 (patch)
treee9ab7eb07320462856c2c8167e03fb4c04a0e58a
parent5c6b74f24494a0426067dfcb54b7b8fb0e01c821 (diff)
fdo#77600 RTF export: always close URL's before the end of run
In case the URL text has multiple portions, then MSWordExportBase generates multiple URL's anyway, and this helps to avoid loosing some direct formatting of the remaining portions of the paragraph. Change-Id: Ifd72741de610ce69b9ae0978aa8f9a532a3aeed2
-rw-r--r--sw/qa/extras/rtfexport/data/fdo77600.rtf25
-rw-r--r--sw/qa/extras/rtfexport/rtfexport.cxx6
-rw-r--r--sw/source/filter/ww8/rtfattributeoutput.cxx9
-rw-r--r--sw/source/filter/ww8/rtfattributeoutput.hxx2
4 files changed, 42 insertions, 0 deletions
diff --git a/sw/qa/extras/rtfexport/data/fdo77600.rtf b/sw/qa/extras/rtfexport/data/fdo77600.rtf
new file mode 100644
index 000000000000..5c6a488eb92f
--- /dev/null
+++ b/sw/qa/extras/rtfexport/data/fdo77600.rtf
@@ -0,0 +1,25 @@
+{\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff0\deff0\stshfdbch0\stshfloch0\stshfhich0\stshfbi0\deflang1033\deflangfe1033\themelang1033\themelangfe0\themelangcs0
+{\fonttbl
+{\f0\fbidi \froman\fcharset238\fprq2
+Times New Roman;}
+{\f1\fbidi \fswiss\fcharset238\fprq2
+Arial;}
+}
+\pard\plain \ltrpar
+\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid6446855 \rtlch\fcs1 \af0\afs20\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033
+{\rtlch\fcs1 \af1 \ltrch\fcs0
+\f1\fs20\insrsid6446855 Before }
+{\field\fldedit
+{\*\fldinst
+{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid1260577 HYPERLINK "http://www.microsoft.com/en-us/news/press/2013/jul13/07-11onemicrosoft.aspx" }
+}
+{\fldrslt
+{\rtlch\fcs1 \af1 \ltrch\fcs0
+\cs61\f1\fs20\ul\cf17\insrsid6446855\charrsid4592903 href}
+}
+}
+\sectd \ltrsect\psz1\linex0\endnhere\sectdefaultcl\sectrsid6897289\sftnbj
+{\rtlch\fcs1 \af1 \ltrch\fcs0 \f1\fs20\insrsid6446855 after.}
+{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid6446855
+\par }
+}
diff --git a/sw/qa/extras/rtfexport/rtfexport.cxx b/sw/qa/extras/rtfexport/rtfexport.cxx
index a0ffe5d164cf..c395ec9e64c5 100644
--- a/sw/qa/extras/rtfexport/rtfexport.cxx
+++ b/sw/qa/extras/rtfexport/rtfexport.cxx
@@ -619,6 +619,12 @@ DECLARE_RTFEXPORT_TEST(testLineNumbering, "linenumbering.rtf")
CPPUNIT_ASSERT_EQUAL(sal_Int32(5), getProperty<sal_Int32>(xPropertySet, "Interval"));
}
+DECLARE_RTFEXPORT_TEST(testFdo77600, "fdo77600.rtf")
+{
+ // This was 'Liberation Serif'.
+ CPPUNIT_ASSERT_EQUAL(OUString("Arial"), getProperty<OUString>(getRun(getParagraph(1), 3), "CharFontName"));
+}
+
#endif
CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/sw/source/filter/ww8/rtfattributeoutput.cxx b/sw/source/filter/ww8/rtfattributeoutput.cxx
index 0185a015425b..862b1283e458 100644
--- a/sw/source/filter/ww8/rtfattributeoutput.cxx
+++ b/sw/source/filter/ww8/rtfattributeoutput.cxx
@@ -413,6 +413,8 @@ void RtfAttributeOutput::StartRun( const SwRedlineData* pRedlineData, bool bSing
void RtfAttributeOutput::EndRun()
{
SAL_INFO("sw.rtf", OSL_THIS_FUNC);
+ if (m_bInURL)
+ EndURL();
m_aRun->append(SAL_NEWLINE_STRING);
m_aRun.appendAndClear(m_aRunText);
if (!m_bSingleEmptyRun && m_bInRun)
@@ -493,6 +495,7 @@ bool RtfAttributeOutput::StartURL( const OUString& rUrl, const OUString& rTarget
m_aStyles.append("}");
m_bHadFieldResult = false;
+ m_bInURL = true;
return true;
}
@@ -500,6 +503,11 @@ bool RtfAttributeOutput::EndURL()
{
SAL_INFO("sw.rtf", OSL_THIS_FUNC);
+ if (m_bInURL)
+ m_bInURL = false;
+ else
+ return true;
+
// close the fldrslt group
if (m_bHadFieldResult)
m_aRunText->append('}');
@@ -3361,6 +3369,7 @@ RtfAttributeOutput::RtfAttributeOutput( RtfExport &rExport )
m_aCells(),
m_bSingleEmptyRun(false),
m_bInRun(false),
+ m_bInURL(false),
m_pFlyFrameSize(0),
m_pPrevPageDesc(0)
{
diff --git a/sw/source/filter/ww8/rtfattributeoutput.hxx b/sw/source/filter/ww8/rtfattributeoutput.hxx
index 0d00506b2ede..fbb191a49e91 100644
--- a/sw/source/filter/ww8/rtfattributeoutput.hxx
+++ b/sw/source/filter/ww8/rtfattributeoutput.hxx
@@ -586,6 +586,8 @@ private:
bool m_bInRun;
+ bool m_bInURL;
+
/// Maps ID's to postit fields, used in atrfstart/end and atnref.
std::map<sal_uInt16, const SwPostItField*> m_aPostitFields;