writerfilter/source/dmapper/DomainMapper_Impl.cxx |   74 +++++++++++-----------
 1 file changed, 40 insertions(+), 34 deletions(-)

New commits:
commit 7002d8eadad748486765c2f00d3aed0f9652b987
Author: Caolán McNamara <caol...@redhat.com>
Date:   Thu Jul 19 23:34:18 2012 +0100

    Resolves: fdo#51772 failure to import a specific .rtf file
    
    In this example the xCharacterStyles->getByName(aCharStyle) throws, and the
    whole import is abandoned
    
    i.e.  xRet.set(xCharacterStyles->getByName(aCharStyle), uno::UNO_QUERY);
    
    so to keep things simple wrap the entire block in a try catch and return
    an empty xRet. Could use the hasByName around the specific failing query.
    
    Change-Id: I4f4970534cc2ff15c7d96ff2ee0a9affcfce1737
    Signed-off-by: Miklos Vajna <vmik...@suse.cz>
    Signed-off-by: Norbert Thiebaud <nthieb...@gmail.com>

diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx 
b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index 897402c..270bb12 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -3620,42 +3620,48 @@ void DomainMapper_Impl::ApplySettingsTable()
 uno::Reference<beans::XPropertySet> 
DomainMapper_Impl::GetCurrentNumberingCharStyle()
 {
     uno::Reference<beans::XPropertySet> xRet;
-    OUString aStyle = GetCurrentParaStyleId();
-    if (aStyle.isEmpty() || GetTopContextType() != CONTEXT_PARAGRAPH)
-        return xRet;
-    const StyleSheetEntryPtr pEntry = 
GetStyleSheetTable()->FindStyleSheetByISTD(aStyle);
-    if (!pEntry)
-        return xRet;
-    const StyleSheetPropertyMap* pStyleSheetProperties = dynamic_cast<const 
StyleSheetPropertyMap*>(pEntry ? pEntry->pProperties.get() : 0);
-    sal_Int32 nListId = pStyleSheetProperties->GetListId();
-    sal_Int32 nListLevel = pStyleSheetProperties->GetListLevel();
-    if (nListId < 0 || nListLevel < 0)
-        return xRet;
-
-    // So we are in a paragraph style and it has numbering. Look up the 
relevant character style.
-    OUString aListName = ListDef::GetStyleName(nListId);
-    uno::Reference< style::XStyleFamiliesSupplier > 
xStylesSupplier(GetTextDocument(), uno::UNO_QUERY);
-    uno::Reference< container::XNameAccess > xStyleFamilies = 
xStylesSupplier->getStyleFamilies();
-    uno::Reference<container::XNameAccess> xNumberingStyles;
-    xStyleFamilies->getByName("NumberingStyles") >>= xNumberingStyles;
-    uno::Reference<beans::XPropertySet> 
xStyle(xNumberingStyles->getByName(aListName), uno::UNO_QUERY);
-    uno::Reference<container::XIndexAccess> 
xLevels(xStyle->getPropertyValue("NumberingRules"), uno::UNO_QUERY);
-    uno::Sequence<beans::PropertyValue> aProps;
-    xLevels->getByIndex(nListLevel) >>= aProps;
-    for (int i = 0; i < aProps.getLength(); ++i)
-    {
-        const beans::PropertyValue& rProp = aProps[i];
-
-        if (rProp.Name == "CharStyleName")
-        {
-            OUString aCharStyle;
-            rProp.Value >>= aCharStyle;
-            uno::Reference<container::XNameAccess> xCharacterStyles;
-            xStyleFamilies->getByName("CharacterStyles") >>= xCharacterStyles;
-            xRet.set(xCharacterStyles->getByName(aCharStyle), uno::UNO_QUERY);
-            break;
+    try
+    {
+        OUString aStyle = GetCurrentParaStyleId();
+        if (aStyle.isEmpty() || GetTopContextType() != CONTEXT_PARAGRAPH)
+            return xRet;
+        const StyleSheetEntryPtr pEntry = 
GetStyleSheetTable()->FindStyleSheetByISTD(aStyle);
+        if (!pEntry)
+            return xRet;
+        const StyleSheetPropertyMap* pStyleSheetProperties = 
dynamic_cast<const StyleSheetPropertyMap*>(pEntry ? pEntry->pProperties.get() : 
0);
+        sal_Int32 nListId = pStyleSheetProperties->GetListId();
+        sal_Int32 nListLevel = pStyleSheetProperties->GetListLevel();
+        if (nListId < 0 || nListLevel < 0)
+            return xRet;
+
+        // So we are in a paragraph style and it has numbering. Look up the 
relevant character style.
+        OUString aListName = ListDef::GetStyleName(nListId);
+        uno::Reference< style::XStyleFamiliesSupplier > 
xStylesSupplier(GetTextDocument(), uno::UNO_QUERY);
+        uno::Reference< container::XNameAccess > xStyleFamilies = 
xStylesSupplier->getStyleFamilies();
+        uno::Reference<container::XNameAccess> xNumberingStyles;
+        xStyleFamilies->getByName("NumberingStyles") >>= xNumberingStyles;
+        uno::Reference<beans::XPropertySet> 
xStyle(xNumberingStyles->getByName(aListName), uno::UNO_QUERY);
+        uno::Reference<container::XIndexAccess> 
xLevels(xStyle->getPropertyValue("NumberingRules"), uno::UNO_QUERY);
+        uno::Sequence<beans::PropertyValue> aProps;
+        xLevels->getByIndex(nListLevel) >>= aProps;
+        for (int i = 0; i < aProps.getLength(); ++i)
+        {
+            const beans::PropertyValue& rProp = aProps[i];
+
+            if (rProp.Name == "CharStyleName")
+            {
+                OUString aCharStyle;
+                rProp.Value >>= aCharStyle;
+                uno::Reference<container::XNameAccess> xCharacterStyles;
+                xStyleFamilies->getByName("CharacterStyles") >>= 
xCharacterStyles;
+                xRet.set(xCharacterStyles->getByName(aCharStyle), 
uno::UNO_QUERY_THROW);
+                break;
+            }
         }
     }
+    catch( const uno::Exception& )
+    {
+    }
     return xRet;
 }
 
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to