sw/qa/extras/rtfexport/data/numbering-font.rtf    |   22 ++++++++++++++++++++++
 sw/qa/extras/rtfexport/rtfexport.cxx              |    7 +++++++
 writerfilter/source/dmapper/DomainMapper.cxx      |    2 +-
 writerfilter/source/dmapper/DomainMapper_Impl.cxx |   13 +++++++++++--
 4 files changed, 41 insertions(+), 3 deletions(-)

New commits:
commit c1f8437dbed0e8b989e41a345ef7e658a6e8a4cd
Author: Miklos Vajna <vmik...@collabora.co.uk>
Date:   Thu Sep 25 21:29:00 2014 +0200

    fdo#83465 RTF import: handle font of numbering
    
    Change-Id: If0da6e0e34ce50bbe7dceda089b6bb81b4a63f36

diff --git a/sw/qa/extras/rtfexport/data/numbering-font.rtf 
b/sw/qa/extras/rtfexport/data/numbering-font.rtf
new file mode 100644
index 0000000..46fdb7e
--- /dev/null
+++ b/sw/qa/extras/rtfexport/data/numbering-font.rtf
@@ -0,0 +1,22 @@
+{\rtf1\adeflang1025\ansi\ansicpg1252\uc1\deff0\deflang1033
+{\fonttbl
+{\f0\fbidi \froman\fcharset238\fprq2 Times New Roman;}
+{\f40\fbidi \fswiss\fcharset238\fprq2 Verdana;}
+}
+{\*\listtable
+{\list\listtemplateid645944990
+{\listlevel\levelnfc0\leveljc0
+\levelfollow0\levelstartat1
+{\leveltext\'02\'00.;}
+{\levelnumbers\'01;}
+\rtlch \af0\afs18 \ltrch \fs18 \fi-360\li720\lin720 }
+{\listname ;}
+\listid1421871093}
+}
+{\*\listoverridetable
+{\listoverride\listid1421871093\listoverridecount0\ls30}
+}
+\pard\plain Before.\par
+\pard\plain \ls30\f40\fs18 First line.\par
+\pard\plain After.\par
+}
diff --git a/sw/qa/extras/rtfexport/rtfexport.cxx 
b/sw/qa/extras/rtfexport/rtfexport.cxx
index bdcb26b..f0071cd 100644
--- a/sw/qa/extras/rtfexport/rtfexport.cxx
+++ b/sw/qa/extras/rtfexport/rtfexport.cxx
@@ -691,6 +691,13 @@ DECLARE_RTFEXPORT_TEST(testAbi10076, "abi10076.odt")
     // Just make sure that we don't crash after exporting a fully calculated 
layout.
 }
 
+DECLARE_RTFEXPORT_TEST(testNumberingFont, "numbering-font.rtf")
+{
+    uno::Reference<beans::XPropertySet> 
xStyle(getStyles("CharacterStyles")->getByName("ListLabel 1"), uno::UNO_QUERY);
+    // This was Liberation Serif, i.e. custom font of the numbering itself 
("1.\t") was lost on import.
+    CPPUNIT_ASSERT_EQUAL(OUString("Verdana"), getProperty<OUString>(xStyle, 
"CharFontName"));
+}
+
 #endif
 
 CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/writerfilter/source/dmapper/DomainMapper.cxx 
b/writerfilter/source/dmapper/DomainMapper.cxx
index 417655e..5330076 100644
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -308,7 +308,7 @@ void DomainMapper::lcl_attribute(Id nName, Value & val)
             if (m_pImpl->GetTopContext())
             {
                 m_pImpl->GetTopContext()->Insert(PROP_CHAR_FONT_NAME, 
uno::makeAny( sStringValue ));
-                if (m_pImpl->GetTopContextType() == CONTEXT_PARAGRAPH && 
m_pImpl->GetTopContext()->isSet(PROP_NUMBERING_RULES))
+                if (m_pImpl->GetTopContextOfType(CONTEXT_PARAGRAPH) && 
m_pImpl->GetTopContextOfType(CONTEXT_PARAGRAPH)->isSet(PROP_NUMBERING_RULES))
                 {
                     // Font of the paragraph mark should be used for the 
numbering as well.
                     uno::Reference<beans::XPropertySet> 
xCharStyle(m_pImpl->GetCurrentNumberingCharStyle());
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx 
b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index 0259aca..471e59e 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -4817,15 +4817,24 @@ uno::Reference<beans::XPropertySet> 
DomainMapper_Impl::GetCurrentNumberingCharSt
         uno::Reference<container::XIndexAccess> xLevels = 
GetCurrentNumberingRules(&nListLevel);
         if (!xLevels.is())
         {
+            // Looking up the paragraph context explicitly (and not just taking
+            // the top context) is necessary for RTF, where formatting of a run
+            // and of the paragraph mark is not separated.
+            PropertyMapPtr pContext = GetTopContextOfType(CONTEXT_PARAGRAPH);
+            if (!pContext)
+                return xRet;
+
             // In case numbering rules is not found via a style, try the 
direct formatting instead.
-            boost::optional<PropertyMap::Property> oProp = 
m_pTopContext->getProperty(PROP_NUMBERING_RULES);
+            boost::optional<PropertyMap::Property> oProp = 
pContext->getProperty(PROP_NUMBERING_RULES);
             if (oProp)
             {
                 xLevels.set(oProp->second, uno::UNO_QUERY);
                 // Found the rules, then also try to look up our numbering 
level.
-                oProp = m_pTopContext->getProperty(PROP_NUMBERING_LEVEL);
+                oProp = pContext->getProperty(PROP_NUMBERING_LEVEL);
                 if (oProp)
                     oProp->second >>= nListLevel;
+                else
+                    nListLevel = 0;
             }
 
             if (!xLevels.is())
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to