sw/qa/extras/rtfimport/data/font-override.rtf | 28 ++++++++++++++++++++++++++ sw/qa/extras/rtfimport/rtfimport.cxx | 6 +++++ writerfilter/source/rtftok/rtfsprm.cxx | 9 ++++++++ writerfilter/source/rtftok/rtfsprm.hxx | 1 writerfilter/source/rtftok/rtfvalue.cxx | 12 ++++++++++- 5 files changed, 55 insertions(+), 1 deletion(-)
New commits: commit c0fee7f70f4c7d97cd911c987d0b6dd57c6795e5 Author: Miklos Vajna <vmik...@collabora.co.uk> Date: Mon Mar 3 18:54:01 2014 +0100 fdo#78313 RTF import: retain font colors This is a cherry-pick of two master commits: RTFValue::equals: consider the number of attributes/sprms as well (cherry picked from commit 4452fa9a2e741834a19c9b322fc8d9c8b06450de) Related: fdo#77600 RTF import: RTFValue::equals: compare attribute content Previously only the number of nested sprms / attributes was compared. With this, the font of the bugdoc is correctly Arial, not Times. (cherry picked from commit 8e8f9388c323ad3c32cef3f91609ad19386b7d56) Conflicts: writerfilter/source/rtftok/rtfsprm.hxx Change-Id: I351de414b6734336b31c1334dbd2349072f16002 Reviewed-on: https://gerrit.libreoffice.org/9316 Reviewed-by: Caolán McNamara <caol...@redhat.com> Tested-by: Caolán McNamara <caol...@redhat.com> diff --git a/sw/qa/extras/rtfimport/data/font-override.rtf b/sw/qa/extras/rtfimport/data/font-override.rtf new file mode 100644 index 0000000..a41d2ab --- /dev/null +++ b/sw/qa/extras/rtfimport/data/font-override.rtf @@ -0,0 +1,28 @@ +{\rtf1\ansi\deff4\adeflang1025 +{\fonttbl +{\f0\froman\fprq2\fcharset0 Times New Roman;} +{\f1\froman\fprq2\fcharset2 Symbol;} +{\f2\fswiss\fprq2\fcharset0 Arial;} +{\f3\froman\fprq2\fcharset0 Liberation Serif +{\*\falt Times New Roman} +;} +{\f4\froman\fprq2\fcharset0 Times New Roman;} +{\f5\fswiss\fprq2\fcharset0 Liberation Sans +{\*\falt Arial} +;} +{\f6\froman\fprq2\fcharset0 Tahoma;} +{\f7\froman\fprq2\fcharset0 Arial;} +{\f8\fnil\fprq2\fcharset0 Droid Sans Fallback;} +{\f9\fnil\fprq2\fcharset0 Lucida Sans;} +{\f10\fswiss\fprq0\fcharset1 Lucida Sans;} +{\f11\fnil\fprq2\fcharset0 Arial;} +} +{\colortbl;\red0\green0\blue0;\red5\green99\blue193;\red128\green128\blue128;\red0\green0\blue10;} +{\stylesheet +{\s0\snext0\ql\widctlpar\ltrpar +\cf0\kerning1\dbch\af12\langfe1033\dbch\af12\afs20\alang1025\fs24\loch\f4\lang1033 Normal;} +} +\pard\plain\s0 +{\af11\f7 +This should be Arial.} +\par } diff --git a/sw/qa/extras/rtfimport/rtfimport.cxx b/sw/qa/extras/rtfimport/rtfimport.cxx index 908178f..562b9df 100644 --- a/sw/qa/extras/rtfimport/rtfimport.cxx +++ b/sw/qa/extras/rtfimport/rtfimport.cxx @@ -1635,6 +1635,12 @@ DECLARE_RTFIMPORT_TEST(testFdo75735, "fdo75735.rtf") CPPUNIT_ASSERT_EQUAL(sal_Int32(3), getProperty< uno::Sequence<style::TabStop> >(getParagraph(2), "ParaTabStops").getLength()); } +DECLARE_RTFIMPORT_TEST(testFontOverride, "font-override.rtf") +{ + // This was "Times New Roman". + CPPUNIT_ASSERT_EQUAL(OUString("Arial"), getProperty<OUString>(getRun(getParagraph(1), 1), "CharFontName")); +} + CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/writerfilter/source/rtftok/rtfsprm.cxx b/writerfilter/source/rtftok/rtfsprm.cxx index c6d9172..c79c6e2 100644 --- a/writerfilter/source/rtftok/rtfsprm.cxx +++ b/writerfilter/source/rtftok/rtfsprm.cxx @@ -143,6 +143,15 @@ void RTFSprms::deduplicate(RTFSprms& rReference) } } +bool RTFSprms::equals(RTFValue& rOther) +{ + RTFSprms::Iterator_t i = m_pSprms->begin(); + while (i != m_pSprms->end()) + if (!i->second->equals(rOther)) + return false; + return true; +} + void RTFSprms::ensureCopyBeforeWrite() { if (m_pSprms->m_nRefCount > 1) { diff --git a/writerfilter/source/rtftok/rtfsprm.hxx b/writerfilter/source/rtftok/rtfsprm.hxx index 19f0514..a889207 100644 --- a/writerfilter/source/rtftok/rtfsprm.hxx +++ b/writerfilter/source/rtftok/rtfsprm.hxx @@ -60,6 +60,7 @@ namespace writerfilter { Iterator_t begin() { return m_pSprms->begin(); } Iterator_t end() { return m_pSprms->end(); } void clear(); + bool equals(RTFValue& rOther); private: void ensureCopyBeforeWrite(); boost::intrusive_ptr<RTFSprmsImpl> m_pSprms; diff --git a/writerfilter/source/rtftok/rtfvalue.cxx b/writerfilter/source/rtftok/rtfvalue.cxx index 7af638f..132233c 100644 --- a/writerfilter/source/rtftok/rtfvalue.cxx +++ b/writerfilter/source/rtftok/rtfvalue.cxx @@ -210,7 +210,17 @@ RTFValue* RTFValue::Clone() bool RTFValue::equals(RTFValue& rOther) { - return m_nValue == rOther.m_nValue; + if (m_nValue != rOther.m_nValue) + return false; + if (m_pAttributes->size() != rOther.m_pAttributes->size()) + return false; + else if (!m_pAttributes->equals(rOther)) + return false; + if (m_pSprms->size() != rOther.m_pSprms->size()) + return false; + else if (!m_pSprms->equals(rOther)) + return false; + return true; } RTFSprms& RTFValue::getAttributes()
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits