[Libreoffice-commits] core.git: Branch 'private/kohei/xlsx-import-speedup' - 100 commits - accessibility/Module_accessibility.mk bin/findunusedcode chart2/AllLangResTarget_chartcontroller.mk chart2/source chart2/uiconfig chart2/UIConfig_chart2.mk comphelper/source config_host.mk.in configmgr/source configure.ac connectivity/source cppcanvas/source cpputools/source cui/uiconfig dbaccess/source desktop/Library_spl.mk desktop/Library_spl_unx.mk desktop/Module_desktop.mk desktop/source desktop/unx drawinglayer/source editeng/source extensions/source filter/source formula/source framework/source .gitignore helpcontent2 i18nlangtag/source i18npool/source icon-themes/galaxy icon-themes/hicontrast idl/source include/formula include/oox include/sal include/sax include/svl include/unotools ios/CustomTarget_MobileLibreOffice_app.mk ios/iosremote ios/MobileLibreOffice ios/Module_ios.mk ios/shared jvmfwk/source l10ntools/source linguistic/source Makefile.in odk/examples offapi/com oox/source padmin/so urce postprocess/Rdb_services.mk reportdesign/source Repository.mk rsc/source sal/osl sal/rtl sax/source sc/inc scp2/source sc/qa scripting/source sc/source sdext/source sd/source sfx2/source shell/source slideshow/source solenv/gbuild stoc/source stoc/test svgio/source svtools/source svx/source sw/inc sw/qa sw/source translations ucb/source udkapi/com unotools/source vcl/generic vcl/source vcl/unx vcl/win winaccessibility/inc winaccessibility/source wizards/com writerfilter/source xmloff/source

Kohei Yoshida kohei.yoshida at collabora.com
Fri Nov 22 15:29:23 PST 2013


Rebased ref, commits from common ancestor:
commit 5a03478d2b7a176dafeb8d7a12ba1d0019ce2600
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date:   Fri Nov 22 18:28:26 2013 -0500

    Add hook to optionally enable threaded sheet stream parsing.
    
    Threaded version still not working as the fast parser deadlocks during
    threaded parsing.
    
    Change-Id: I3d402a22a394d7d0d7edf96590ae039506928fde

diff --git a/sc/source/filter/oox/workbookfragment.cxx b/sc/source/filter/oox/workbookfragment.cxx
index 30f0f34..3a2a443 100644
--- a/sc/source/filter/oox/workbookfragment.cxx
+++ b/sc/source/filter/oox/workbookfragment.cxx
@@ -51,6 +51,12 @@
 
 #include <comphelper/processfactory.hxx>
 #include <officecfg/Office/Calc.hxx>
+#include <salhelper/thread.hxx>
+#include <osl/conditn.hxx>
+
+#include <queue>
+#include <boost/scoped_ptr.hpp>
+
 #include "oox/ole/vbaproject.hxx"
 
 namespace oox {
@@ -194,6 +200,191 @@ const RecordInfo* WorkbookFragment::getRecordInfos() const
     return spRecInfos;
 }
 
+namespace {
+
+class WorkerThread;
+
+typedef std::pair<WorksheetGlobalsRef, FragmentHandlerRef> SheetFragmentHandler;
+typedef std::vector<SheetFragmentHandler> SheetFragmentVector;
+typedef rtl::Reference<WorkerThread> WorkerThreadRef;
+
+struct WorkerThreadData
+{
+    osl::Mutex maMtx;
+    std::vector<WorkerThreadRef> maThreads;
+};
+
+struct IdleWorkerThreadData
+{
+    osl::Mutex maMtx;
+    osl::Condition maCondAdded;
+    std::queue<WorkerThread*> maThreads;
+};
+
+struct
+{
+    boost::scoped_ptr<WorkerThreadData> mpWorkerThreads;
+    boost::scoped_ptr<IdleWorkerThreadData> mpIdleThreads;
+
+} aThreadGlobals;
+
+enum WorkerAction
+{
+    None = 0,
+    TerminateThread,
+    Work
+};
+
+class WorkerThread : public salhelper::Thread
+{
+    WorkbookFragment& mrWorkbookHandler;
+    size_t mnID;
+    FragmentHandlerRef mxHandler;
+    osl::Mutex maMtxAction;
+    osl::Condition maCondActionChanged;
+    WorkerAction meAction;
+public:
+    WorkerThread( WorkbookFragment& rWorkbookHandler, size_t nID ) :
+        salhelper::Thread("sheet-import-worker-thread"),
+        mrWorkbookHandler(rWorkbookHandler), mnID(nID), meAction(None) {}
+
+    virtual void execute()
+    {
+        announceIdle();
+
+        // Keep looping until the terminate request is set.
+        for (maCondActionChanged.wait(); true; maCondActionChanged.wait())
+        {
+            osl::MutexGuard aGuard(maMtxAction);
+            if (!maCondActionChanged.check())
+                // Wait again.
+                continue;
+
+            maCondActionChanged.reset();
+
+            if (meAction == TerminateThread)
+                // End the thread.
+                return;
+
+            if (meAction != Work)
+                continue;
+
+#if 0
+            // TODO : This still deadlocks in the fast parser code.
+            mrWorkbookHandler.importOoxFragment(mxHandler);
+#else
+            double val = rand() / static_cast<double>(RAND_MAX);
+            val *= 1000000; // normalize to 1 second.
+            val *= 1.5; // inflate it a bit.
+            usleep(val); // pretend to be working while asleep.
+#endif
+            announceIdle();
+        }
+    }
+
+    void announceIdle()
+    {
+        // Set itself idle to receive a new task from the main thread.
+        osl::MutexGuard aGuard(aThreadGlobals.mpIdleThreads->maMtx);
+        aThreadGlobals.mpIdleThreads->maThreads.push(this);
+        aThreadGlobals.mpIdleThreads->maCondAdded.set();
+    }
+
+    void terminate()
+    {
+        osl::MutexGuard aGuard(maMtxAction);
+        meAction = TerminateThread;
+        maCondActionChanged.set();
+    }
+
+    void assign( const FragmentHandlerRef& rHandler )
+    {
+        osl::MutexGuard aGuard(maMtxAction);
+        mxHandler = rHandler;
+        meAction = Work;
+        maCondActionChanged.set();
+    }
+};
+
+void importSheetFragments( WorkbookFragment& rWorkbookHandler, SheetFragmentVector& rSheets )
+{
+#if 0 // threaded version
+    size_t nThreadCount = 3;
+    if (nThreadCount > rSheets.size())
+        nThreadCount = rSheets.size();
+
+    // Create new thread globals.
+    aThreadGlobals.mpWorkerThreads.reset(new WorkerThreadData);
+    aThreadGlobals.mpIdleThreads.reset(new IdleWorkerThreadData);
+
+    SheetFragmentVector::iterator it = rSheets.begin(), itEnd = rSheets.end();
+
+    {
+        // Initialize worker threads.
+        osl::MutexGuard aGuard(aThreadGlobals.mpWorkerThreads->maMtx);
+        for (size_t i = 0; i < nThreadCount; ++i)
+        {
+            WorkerThreadRef pThread(new WorkerThread(rWorkbookHandler, i));
+            aThreadGlobals.mpWorkerThreads->maThreads.push_back(pThread);
+            pThread->launch();
+        }
+    }
+
+    for (aThreadGlobals.mpIdleThreads->maCondAdded.wait(); true; aThreadGlobals.mpIdleThreads->maCondAdded.wait())
+    {
+        osl::MutexGuard aGuard(aThreadGlobals.mpIdleThreads->maMtx);
+        if (!aThreadGlobals.mpIdleThreads->maCondAdded.check())
+            // Wait again.
+            continue;
+
+        aThreadGlobals.mpIdleThreads->maCondAdded.reset();
+
+        // Assign work to all idle threads.
+        while (!aThreadGlobals.mpIdleThreads->maThreads.empty())
+        {
+            if (it == itEnd)
+                break;
+
+            WorkerThread* p = aThreadGlobals.mpIdleThreads->maThreads.front();
+            aThreadGlobals.mpIdleThreads->maThreads.pop();
+            p->assign(it->second);
+            ++it;
+        }
+
+        if (it == itEnd)
+        {
+            // Clean up the globals before existing.
+            break;
+        }
+    }
+
+    {
+        // Terminate all worker threads.
+        osl::MutexGuard aGuard(aThreadGlobals.mpWorkerThreads->maMtx);
+        for (size_t i = 0, n = aThreadGlobals.mpWorkerThreads->maThreads.size(); i < n; ++i)
+        {
+            WorkerThreadRef pWorker = aThreadGlobals.mpWorkerThreads->maThreads[i];
+            pWorker->terminate();
+            if (pWorker.is())
+                pWorker->join();
+        }
+    }
+
+    // Delete all thread globals.
+    aThreadGlobals.mpWorkerThreads.reset();
+    aThreadGlobals.mpIdleThreads.reset();
+
+#else // non-threaded version
+    for( SheetFragmentVector::iterator it = rSheets.begin(), itEnd = rSheets.end(); it != itEnd; ++it)
+    {
+        // import the sheet fragment
+        rWorkbookHandler.importOoxFragment(it->second);
+    }
+#endif
+}
+
+}
+
 void WorkbookFragment::finalizeImport()
 {
     ISegmentProgressBarRef xGlobalSegment = getProgressBar().createSegment( PROGRESS_LENGTH_GLOBALS );
@@ -229,8 +420,6 @@ void WorkbookFragment::finalizeImport()
         fragments for all sheets that are needed before the cell formulas are
         loaded. Additionally, the instances of the WorkbookGlobals structures
         have to be stored for every sheet. */
-    typedef ::std::pair< WorksheetGlobalsRef, FragmentHandlerRef > SheetFragmentHandler;
-    typedef ::std::vector< SheetFragmentHandler > SheetFragmentVector;
     SheetFragmentVector aSheetFragments;
     std::vector<WorksheetHelper*> maHelpers;
     WorksheetBuffer& rWorksheets = getWorksheets();
@@ -315,11 +504,7 @@ void WorkbookFragment::finalizeImport()
     }
 
     // load all worksheets
-    for( SheetFragmentVector::iterator aIt = aSheetFragments.begin(), aEnd = aSheetFragments.end(); aIt != aEnd; ++aIt )
-    {
-        // import the sheet fragment
-        importOoxFragment( aIt->second );
-    }
+    importSheetFragments(*this, aSheetFragments);
 
     for( std::vector<WorksheetHelper*>::iterator aIt = maHelpers.begin(), aEnd = maHelpers.end(); aIt != aEnd; ++aIt )
     {
commit 6087da0dd402013b7d67fe6754081e647fdc5f8c
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date:   Thu Nov 21 20:32:46 2013 -0500

    getChar() to return a null-terminated char array.
    
    No need to fetch string size with this change.
    
    Change-Id: Iae5f6c60430fc57985a0fec5bfec59727e5a8f0f

diff --git a/include/oox/helper/attributelist.hxx b/include/oox/helper/attributelist.hxx
index 78ea83e..e22e816 100644
--- a/include/oox/helper/attributelist.hxx
+++ b/include/oox/helper/attributelist.hxx
@@ -75,12 +75,6 @@ public:
 class OOX_DLLPUBLIC AttributeList
 {
 public:
-    struct Char
-    {
-        const char* mpPos;
-        size_t mnSize;
-    };
-
     explicit            AttributeList(
                             const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastAttributeList >& rxAttribs );
 
@@ -138,7 +132,7 @@ public:
         passed default string if the attribute is missing. */
     OUString     getXString( sal_Int32 nAttrToken, const OUString& rDefault ) const;
 
-    Char getChar( sal_Int32 nAttrToken ) const;
+    const char* getChar( sal_Int32 nAttrToken ) const;
 
 
     /** Returns the double value of the specified attribute, or the passed
diff --git a/include/sax/fastattribs.hxx b/include/sax/fastattribs.hxx
index f47da07..42b285c 100644
--- a/include/sax/fastattribs.hxx
+++ b/include/sax/fastattribs.hxx
@@ -76,7 +76,7 @@ public:
     // performance sensitive shortcuts to avoid allocation ...
     bool getAsInteger( sal_Int32 nToken, sal_Int32 &rInt);
     bool getAsDouble( sal_Int32 nToken, double &rDouble);
-    bool getAsChar( sal_Int32 nToken, const char*& rPos, size_t& rLen ) const;
+    bool getAsChar( sal_Int32 nToken, const char*& rPos ) const;
 
     // XFastAttributeList
     virtual ::sal_Bool SAL_CALL hasAttribute( ::sal_Int32 Token ) throw (::com::sun::star::uno::RuntimeException);
diff --git a/oox/source/helper/attributelist.cxx b/oox/source/helper/attributelist.cxx
index e57dd1d..2efc3a3 100644
--- a/oox/source/helper/attributelist.cxx
+++ b/oox/source/helper/attributelist.cxx
@@ -261,16 +261,14 @@ OUString AttributeList::getXString( sal_Int32 nAttrToken, const OUString& rDefau
     return getXString( nAttrToken ).get( rDefault );
 }
 
-AttributeList::Char AttributeList::getChar( sal_Int32 nAttrToken ) const
+const char* AttributeList::getChar( sal_Int32 nAttrToken ) const
 {
-    Char aRet;
-    bool bValid = getAttribList()->getAsChar(nAttrToken, aRet.mpPos, aRet.mnSize);
+    const char* p = NULL;
+    bool bValid = getAttribList()->getAsChar(nAttrToken, p);
     if (!bValid)
-    {
-        aRet.mpPos = NULL;
-        aRet.mnSize = 0;
-    }
-    return aRet;
+        p = NULL;
+
+    return p;
 }
 
 double AttributeList::getDouble( sal_Int32 nAttrToken, double fDefault ) const
diff --git a/sax/source/tools/fastattribs.cxx b/sax/source/tools/fastattribs.cxx
index 17b9a3f..ee65cc6 100644
--- a/sax/source/tools/fastattribs.cxx
+++ b/sax/source/tools/fastattribs.cxx
@@ -157,7 +157,7 @@ bool FastAttributeList::getAsDouble( sal_Int32 nToken, double &rDouble)
     return false;
 }
 
-bool FastAttributeList::getAsChar( sal_Int32 nToken, const char*& rPos, size_t& rLen ) const
+bool FastAttributeList::getAsChar( sal_Int32 nToken, const char*& rPos ) const
 {
     for (size_t i = 0, n = maAttributeTokens.size(); i < n; ++i)
     {
@@ -166,12 +166,6 @@ bool FastAttributeList::getAsChar( sal_Int32 nToken, const char*& rPos, size_t&
 
         sal_Int32 nOffset = maAttributeValues[i];
         rPos = mpChunk + nOffset;
-
-        if (i + 1 < maAttributeValues.size())
-            rLen = maAttributeValues[i+1] - nOffset - 1;
-        else
-            rLen = mnChunkLength - nOffset - 1;
-
         return true;
     }
 
diff --git a/sc/source/filter/inc/addressconverter.hxx b/sc/source/filter/inc/addressconverter.hxx
index 886e074..36f8599 100644
--- a/sc/source/filter/inc/addressconverter.hxx
+++ b/sc/source/filter/inc/addressconverter.hxx
@@ -214,7 +214,7 @@ public:
                             sal_Int32 nLength = SAL_MAX_INT32 );
 
     static bool parseOoxAddress2d(
-        sal_Int32& ornColumn, sal_Int32& ornRow, const char* pStr, sal_Int32 nStrLen );
+        sal_Int32& ornColumn, sal_Int32& ornRow, const char* pStr );
 
     /** Tries to parse the passed string for a 2d cell range in A1 notation.
 
@@ -320,8 +320,7 @@ public:
                             sal_Int16 nSheet );
 
     bool convertToCellAddressUnchecked(
-        com::sun::star::table::CellAddress& orAddress,
-        const char* pStr, size_t nStrLen, sal_Int16 nSheet ) const;
+        com::sun::star::table::CellAddress& orAddress, const char* pStr, sal_Int16 nSheet ) const;
 
     /** Tries to convert the passed string to a single cell address.
 
@@ -340,7 +339,7 @@ public:
 
     bool convertToCellAddress(
         com::sun::star::table::CellAddress& rAddress,
-        const char* pStr, size_t nStrLen, sal_Int16 nSheet, bool bTrackOverflow );
+        const char* pStr, sal_Int16 nSheet, bool bTrackOverflow );
 
     /** Returns a valid cell address by moving it into allowed dimensions.
 
diff --git a/sc/source/filter/oox/addressconverter.cxx b/sc/source/filter/oox/addressconverter.cxx
index b9dbc53..59028ba 100644
--- a/sc/source/filter/oox/addressconverter.cxx
+++ b/sc/source/filter/oox/addressconverter.cxx
@@ -226,16 +226,13 @@ bool AddressConverter::parseOoxAddress2d(
     return (ornColumn >= 0) && (ornRow >= 0);
 }
 
-bool AddressConverter::parseOoxAddress2d(
-    sal_Int32& ornColumn, sal_Int32& ornRow, const char* pStr, sal_Int32 nStrLen )
+bool AddressConverter::parseOoxAddress2d( sal_Int32& ornColumn, sal_Int32& ornRow, const char* pStr )
 {
     ornColumn = ornRow = 0;
 
-    const char* pStrEnd = pStr + nStrLen;
-
     enum { STATE_COL, STATE_ROW } eState = STATE_COL;
 
-    while (pStr < pStrEnd)
+    while (*pStr)
     {
         char cChar = *pStr;
         switch( eState )
@@ -356,11 +353,10 @@ bool AddressConverter::convertToCellAddressUnchecked( CellAddress& orAddress,
 }
 
 bool AddressConverter::convertToCellAddressUnchecked(
-        com::sun::star::table::CellAddress& orAddress,
-        const char* pStr, size_t nStrLen, sal_Int16 nSheet ) const
+        com::sun::star::table::CellAddress& orAddress, const char* pStr, sal_Int16 nSheet ) const
 {
     orAddress.Sheet = nSheet;
-    return parseOoxAddress2d(orAddress.Column, orAddress.Row, pStr, nStrLen);
+    return parseOoxAddress2d(orAddress.Column, orAddress.Row, pStr);
 }
 
 bool AddressConverter::convertToCellAddress( CellAddress& orAddress,
@@ -373,9 +369,9 @@ bool AddressConverter::convertToCellAddress( CellAddress& orAddress,
 
 bool AddressConverter::convertToCellAddress(
     com::sun::star::table::CellAddress& rAddress,
-    const char* pStr, size_t nStrLen, sal_Int16 nSheet, bool bTrackOverflow )
+    const char* pStr, sal_Int16 nSheet, bool bTrackOverflow )
 {
-    if (!convertToCellAddressUnchecked(rAddress, pStr, nStrLen, nSheet))
+    if (!convertToCellAddressUnchecked(rAddress, pStr, nSheet))
         return false;
 
     return checkCellAddress(rAddress, bTrackOverflow);
diff --git a/sc/source/filter/oox/sheetdatacontext.cxx b/sc/source/filter/oox/sheetdatacontext.cxx
index ca55119..5170234 100644
--- a/sc/source/filter/oox/sheetdatacontext.cxx
+++ b/sc/source/filter/oox/sheetdatacontext.cxx
@@ -311,18 +311,16 @@ void SheetDataContext::importRow( const AttributeList& rAttribs )
 bool SheetDataContext::importCell( const AttributeList& rAttribs )
 {
     bool bValid = true;
-    AttributeList::Char aChar = rAttribs.getChar(XML_r);
+    const char* p = rAttribs.getChar(XML_r);
 
-    if (!aChar.mpPos)
+    if (!p)
     {
         ++mnCol;
         maCellData.maCellAddr = CellAddress( mnSheet, mnCol, mnRow );
     }
     else
     {
-        bValid = mrAddressConv.convertToCellAddress(
-            maCellData.maCellAddr, aChar.mpPos, aChar.mnSize, mnSheet, true);
-
+        bValid = mrAddressConv.convertToCellAddress(maCellData.maCellAddr, p, mnSheet, true);
         mnCol = maCellData.maCellAddr.Column;
     }
 
commit 151beeb0b234512768080da3441ebe40a46cd861
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date:   Thu Nov 21 16:46:57 2013 -0500

    Set default cell style directly, without UNO API.
    
    This also avoids unnecessary row height adjustments.
    
    Change-Id: Icfecf0a5fdf7ef18db368ebadcf9d0b8700c0b65

diff --git a/sc/inc/documentimport.hxx b/sc/inc/documentimport.hxx
index d2aa994..222908e 100644
--- a/sc/inc/documentimport.hxx
+++ b/sc/inc/documentimport.hxx
@@ -23,6 +23,7 @@ class ScColumn;
 class ScAddress;
 class ScTokenArray;
 class ScFormulaCell;
+class ScStyleSheet;
 struct ScSetStringParam;
 struct ScTabOpParam;
 struct ScDocumentImportImpl;
@@ -50,6 +51,11 @@ public:
     void setDefaultNumericScript(sal_uInt16 nScript);
 
     /**
+     * Apply specified cell style to an entire sheet.
+     */
+    void setCellStyleToSheet(SCTAB nTab, const ScStyleSheet& rStyle);
+
+    /**
      * @param rName sheet name.
      *
      * @return 0-based sheet index, or -1 in case no sheet is found by
diff --git a/sc/source/core/data/documentimport.cxx b/sc/source/core/data/documentimport.cxx
index 7138795..3ca06c5 100644
--- a/sc/source/core/data/documentimport.cxx
+++ b/sc/source/core/data/documentimport.cxx
@@ -58,6 +58,15 @@ void ScDocumentImport::setDefaultNumericScript(sal_uInt16 nScript)
     mpImpl->mnDefaultScriptNumeric = nScript;
 }
 
+void ScDocumentImport::setCellStyleToSheet(SCTAB nTab, const ScStyleSheet& rStyle)
+{
+    ScTable* pTab = mpImpl->mrDoc.FetchTable(nTab);
+    if (!pTab)
+        return;
+
+    pTab->ApplyStyleArea(0, 0, MAXCOL, MAXROW, rStyle);
+}
+
 SCTAB ScDocumentImport::getSheetIndex(const OUString& rName) const
 {
     SCTAB nTab = -1;
diff --git a/sc/source/filter/oox/worksheethelper.cxx b/sc/source/filter/oox/worksheethelper.cxx
index 6d0ea85..e3a4c89 100644
--- a/sc/source/filter/oox/worksheethelper.cxx
+++ b/sc/source/filter/oox/worksheethelper.cxx
@@ -70,6 +70,8 @@
 #include "tokenarray.hxx"
 #include "tablebuffer.hxx"
 #include "documentimport.hxx"
+#include "stlsheet.hxx"
+#include "stlpool.hxx"
 
 #include <svl/stritem.hxx>
 #include <editeng/editobj.hxx>
@@ -938,8 +940,14 @@ void WorksheetGlobals::setRowModel( const RowModel& rModel )
 void WorksheetGlobals::initializeWorksheetImport()
 {
     // set default cell style for unused cells
-    PropertySet aPropSet( mxSheet );
-    aPropSet.setProperty( PROP_CellStyle, getStyles().getDefaultStyleName() );
+    ScDocumentImport& rDoc = getDocImport();
+
+    ScStyleSheet* pStyleSheet =
+        static_cast<ScStyleSheet*>(rDoc.getDoc().GetStyleSheetPool()->Find(
+            getStyles().getDefaultStyleName(), SFX_STYLE_FAMILY_PARA));
+
+    if (pStyleSheet)
+        rDoc.setCellStyleToSheet(getSheetIndex(), *pStyleSheet);
 
     /*  Remember the current sheet index in global data, needed by global
         objects, e.g. the chart converter. */
commit 3797e61e5eb15b9dee9c55afe95013f134ac2d5d
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date:   Thu Nov 21 15:08:48 2013 -0500

    More removal of UNO API for setting document properties.
    
    Change-Id: I8c68308394a64eee0985d7d1f8c8b34637a6da74

diff --git a/sc/inc/document.hxx b/sc/inc/document.hxx
index 80d724b..49fd571 100644
--- a/sc/inc/document.hxx
+++ b/sc/inc/document.hxx
@@ -1126,7 +1126,7 @@ public:
     bool            IsUndo() const                              { return bIsUndo; }
     bool            IsClipboard() const                         { return bIsClip; }
     bool            IsUndoEnabled() const                       { return mbUndoEnabled; }
-    void            EnableUndo( bool bVal );
+    SC_DLLPUBLIC void EnableUndo( bool bVal );
 
     bool            IsAdjustHeightEnabled() const               { return mbAdjustHeightEnabled; }
     void            EnableAdjustHeight( bool bVal )             { mbAdjustHeightEnabled = bVal; }
diff --git a/sc/source/filter/inc/workbookhelper.hxx b/sc/source/filter/inc/workbookhelper.hxx
index 022f342..abafb20 100644
--- a/sc/source/filter/inc/workbookhelper.hxx
+++ b/sc/source/filter/inc/workbookhelper.hxx
@@ -56,6 +56,7 @@ namespace oox { namespace core {
 } }
 
 class ScDocument;
+class ScDocShell;
 class ScDocumentImport;
 class ScEditEngineDefaulter;
 
@@ -152,6 +153,7 @@ public:
     ScDocument& getScDocument();
     const ScDocument& getScDocument() const;
 
+    ScDocShell& getDocShell();
     ScDocumentImport& getDocImport();
 
     ScEditEngineDefaulter& getEditEngine() const;
diff --git a/sc/source/filter/oox/workbookfragment.cxx b/sc/source/filter/oox/workbookfragment.cxx
index fc3c2aa..30f0f34 100644
--- a/sc/source/filter/oox/workbookfragment.cxx
+++ b/sc/source/filter/oox/workbookfragment.cxx
@@ -338,7 +338,7 @@ void WorkbookFragment::finalizeImport()
 
     // Recalculate formula cells.
     ScDocument& rDoc = getScDocument();
-    ScDocShell* pDocSh = static_cast<ScDocShell*>(rDoc.GetDocumentShell());
+    ScDocShell& rDocSh = getDocShell();
     Reference< XComponentContext > xContext = comphelper::getProcessComponentContext();
     ScRecalcOptions nRecalcMode =
         static_cast<ScRecalcOptions>(officecfg::Office::Calc::Formula::Load::OOXMLRecalcMode::get(xContext));
@@ -349,7 +349,7 @@ void WorkbookFragment::finalizeImport()
         {
             // Ask the user if full re-calculation is desired.
             QueryBox aBox(
-                pDocSh->GetActiveDialogParent(), WinBits(WB_YES_NO | WB_DEF_YES),
+                rDocSh.GetActiveDialogParent(), WinBits(WB_YES_NO | WB_DEF_YES),
                 ScGlobal::GetRscString(STR_QUERY_FORMULA_RECALC_ONLOAD_XLS));
             aBox.SetCheckBoxText(ScGlobal::GetRscString(STR_ALWAYS_PERFORM_SELECTED));
 
@@ -373,7 +373,7 @@ void WorkbookFragment::finalizeImport()
         bHardRecalc = true;
 
     if (bHardRecalc)
-        pDocSh->DoHardRecalc(false);
+        rDocSh.DoHardRecalc(false);
     else
         rDoc.CalcFormulaTree(false, true, false);
 }
diff --git a/sc/source/filter/oox/workbookhelper.cxx b/sc/source/filter/oox/workbookhelper.cxx
index a27998e..33270e5 100644
--- a/sc/source/filter/oox/workbookhelper.cxx
+++ b/sc/source/filter/oox/workbookhelper.cxx
@@ -72,6 +72,7 @@
 #include "datauno.hxx"
 #include "globalnames.hxx"
 #include "documentimport.hxx"
+#include "drwlayer.hxx"
 
 #include "formulabuffer.hxx"
 #include "vcl/mapmod.hxx"
@@ -150,6 +151,7 @@ public:
     ScDocument& getScDocument() { return *mpDoc; }
     const ScDocument& getScDocument() const { return *mpDoc; }
 
+    ScDocShell& getDocShell();
     ScDocumentImport& getDocImport();
 
     /** Returns a reference to the source/target spreadsheet document model. */
@@ -305,6 +307,7 @@ private:
     rtl_TextEncoding    meTextEnc;              /// BIFF byte string text encoding.
     bool                mbHasCodePage;          /// True = CODEPAGE record exists in imported stream.
     ScDocument* mpDoc;
+    ScDocShell* mpDocShell;
     boost::scoped_ptr<ScDocumentImport> mxDocImport;
 };
 
@@ -316,7 +319,8 @@ WorkbookGlobals::WorkbookGlobals( ExcelFilter& rFilter ) :
     meFilterType( FILTER_OOXML ),
     mpOoxFilter( &rFilter ),
     meBiff( BIFF_UNKNOWN ),
-    mpDoc( NULL )
+    mpDoc(NULL),
+    mpDocShell(NULL)
 {
     // register at the filter, needed for virtual callbacks (even during construction)
     mrExcelFilter.registerWorkbookGlobals( *this );
@@ -329,6 +333,11 @@ WorkbookGlobals::~WorkbookGlobals()
     mrExcelFilter.unregisterWorkbookGlobals();
 }
 
+ScDocShell& WorkbookGlobals::getDocShell()
+{
+    return *mpDocShell;
+}
+
 ScDocumentImport& WorkbookGlobals::getDocImport()
 {
     return *mxDocImport;
@@ -534,11 +543,10 @@ void WorkbookGlobals::initialize( bool bWorkbookFile )
     if (mxDoc.get())
     {
         ScModelObj* pModel = dynamic_cast<ScModelObj*>(mxDoc.get());
-        ScDocShell* pDocShell = NULL;
         if (pModel)
-            pDocShell = static_cast<ScDocShell*>(pModel->GetEmbeddedObject());
-        if (pDocShell)
-            mpDoc = pDocShell->GetDocument();
+            mpDocShell = static_cast<ScDocShell*>(pModel->GetEmbeddedObject());
+        if (mpDocShell)
+            mpDoc = mpDocShell->GetDocument();
     }
 
     if (!mpDoc)
@@ -578,19 +586,16 @@ void WorkbookGlobals::initialize( bool bWorkbookFile )
     // set some document properties needed during import
     if( mrBaseFilter.isImportFilter() )
     {
-        PropertySet aPropSet( mxDoc );
         // enable editing read-only documents (e.g. from read-only files)
-        aPropSet.setProperty( PROP_IsChangeReadOnlyEnabled, true );
+        mpDoc->EnableChangeReadOnly(true);
         // #i76026# disable Undo while loading the document
-        aPropSet.setProperty( PROP_IsUndoEnabled, false );
+        mpDoc->EnableUndo(false);
         // #i79826# disable calculating automatic row height while loading the document
-        aPropSet.setProperty( PROP_IsAdjustHeightEnabled, false );
+        mpDoc->EnableAdjustHeight(true);
         // disable automatic update of linked sheets and DDE links
-        aPropSet.setProperty( PROP_IsExecuteLinkEnabled, false );
+        mpDoc->EnableExecuteLink(false);
         // #i79890# disable automatic update of defined names
-        Reference< XActionLockable > xLockable( aPropSet.getAnyProperty( PROP_NamedRanges ), UNO_QUERY );
-        if( xLockable.is() )
-            xLockable->addActionLock();
+        mpDoc->CompileNameFormula(true);
 
         //! TODO: localize progress bar text
         mxProgressBar.reset( new SegmentProgressBar( mrBaseFilter.getStatusIndicator(), "Loading..." ) );
@@ -598,7 +603,7 @@ void WorkbookGlobals::initialize( bool bWorkbookFile )
 
         //prevent unnecessary broadcasts and "half way listeners" as
         //is done in ScDocShell::BeforeXMLLoading() for ods
-        getScDocument().SetInsertingFromOtherDoc(true);
+        mpDoc->SetInsertingFromOtherDoc(true);
     }
     else if( mrBaseFilter.isExportFilter() )
     {
@@ -625,26 +630,28 @@ void WorkbookGlobals::finalize()
     // set some document properties needed after import
     if( mrBaseFilter.isImportFilter() )
     {
-        PropertySet aPropSet( mxDoc );
         // #i74668# do not insert default sheets
-        aPropSet.setProperty( PROP_IsLoaded, true );
+        mpDocShell->SetEmpty(false);
         // #i79890# Compile named ranges before re-enabling row height adjustment. (no idea why).
         mpDoc->CompileNameFormula(false);
         // enable automatic update of linked sheets and DDE links
-        aPropSet.setProperty( PROP_IsExecuteLinkEnabled, true );
+        mpDoc->EnableExecuteLink(true);
         // #i79826# enable updating automatic row height after loading the document
-        aPropSet.setProperty( PROP_IsAdjustHeightEnabled, true );
+        mpDoc->EnableAdjustHeight(true);
 
         // #i76026# enable Undo after loading the document
-        aPropSet.setProperty( PROP_IsUndoEnabled, true );
+        mpDoc->EnableUndo(true);
+
         // disable editing read-only documents (e.g. from read-only files)
-        aPropSet.setProperty( PROP_IsChangeReadOnlyEnabled, false );
+        mpDoc->EnableChangeReadOnly(false);
         // #111099# open forms in alive mode (has no effect, if no controls in document)
-        aPropSet.setProperty( PROP_ApplyFormDesignMode, false );
+        ScDrawLayer* pModel = mpDoc->GetDrawLayer();
+        if (pModel)
+            pModel->SetOpenInDesignMode(false);
 
         //stop preventing establishment of listeners as is done in
         //ScDocShell::AfterXMLLoading() for ods
-        getScDocument().SetInsertingFromOtherDoc(false);
+        mpDoc->SetInsertingFromOtherDoc(false);
         getDocImport().finalize();
     }
 }
@@ -745,6 +752,11 @@ const ScDocument& WorkbookHelper::getScDocument() const
     return mrBookGlob.getScDocument();
 }
 
+ScDocShell& WorkbookHelper::getDocShell()
+{
+    return mrBookGlob.getDocShell();
+}
+
 ScDocumentImport& WorkbookHelper::getDocImport()
 {
     return mrBookGlob.getDocImport();
commit 0762f059c49289d56010d667fd2311d349f5d383
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date:   Thu Nov 21 14:23:32 2013 -0500

    Call the method directly via ScDocument, not via obscure UNO API.
    
    Change-Id: I27628314337ae4df31420d63d7c09148369a6759

diff --git a/sc/inc/document.hxx b/sc/inc/document.hxx
index 68e57d2..80d724b 100644
--- a/sc/inc/document.hxx
+++ b/sc/inc/document.hxx
@@ -1920,7 +1920,7 @@ public:
 
     void            CompileDBFormula();
     void            CompileDBFormula( bool bCreateFormulaString );
-    void            CompileNameFormula( bool bCreateFormulaString );
+    SC_DLLPUBLIC void CompileNameFormula( bool bCreateFormulaString );
     void            CompileColRowNameFormula();
 
     /** Maximum string length of a column, e.g. for dBase export.
diff --git a/sc/source/core/data/column2.cxx b/sc/source/core/data/column2.cxx
index 240677b..65d6c88 100644
--- a/sc/source/core/data/column2.cxx
+++ b/sc/source/core/data/column2.cxx
@@ -3198,7 +3198,6 @@ void ScColumn::CompileNameFormula( bool bCreateFormulaString )
 {
     CompileNameFormulaHandler aFunc(bCreateFormulaString);
     sc::ProcessFormula(maCells, aFunc);
-    RegroupFormulaCells();
 }
 
 void ScColumn::CompileColRowNameFormula()
diff --git a/sc/source/filter/oox/workbookhelper.cxx b/sc/source/filter/oox/workbookhelper.cxx
index 31dd5bd..a27998e 100644
--- a/sc/source/filter/oox/workbookhelper.cxx
+++ b/sc/source/filter/oox/workbookhelper.cxx
@@ -628,10 +628,8 @@ void WorkbookGlobals::finalize()
         PropertySet aPropSet( mxDoc );
         // #i74668# do not insert default sheets
         aPropSet.setProperty( PROP_IsLoaded, true );
-        // #i79890# enable automatic update of defined names (before IsAdjustHeightEnabled!)
-        Reference< XActionLockable > xLockable( aPropSet.getAnyProperty( PROP_NamedRanges ), UNO_QUERY );
-        if( xLockable.is() )
-            xLockable->removeActionLock();
+        // #i79890# Compile named ranges before re-enabling row height adjustment. (no idea why).
+        mpDoc->CompileNameFormula(false);
         // enable automatic update of linked sheets and DDE links
         aPropSet.setProperty( PROP_IsExecuteLinkEnabled, true );
         // #i79826# enable updating automatic row height after loading the document
commit 79ceef879205c428bbb87e729a2d3ba68d6e6a0f
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date:   Thu Nov 21 13:44:45 2013 -0500

    Shrink class sizes a bit.
    
    Change-Id: I2561ede5a42ad1f0f3bb74f7b9375f87010eddc3

diff --git a/sc/source/filter/inc/worksheethelper.hxx b/sc/source/filter/inc/worksheethelper.hxx
index 8cda876..bbcd152 100644
--- a/sc/source/filter/inc/worksheethelper.hxx
+++ b/sc/source/filter/inc/worksheethelper.hxx
@@ -83,9 +83,9 @@ struct ColumnModel
     double              mfWidth;            /// Column width in number of characters.
     sal_Int32           mnXfId;             /// Column default formatting.
     sal_Int32           mnLevel;            /// Column outline level.
-    bool                mbShowPhonetic;     /// True = cells in column show phonetic settings.
-    bool                mbHidden;           /// True = column is hidden.
-    bool                mbCollapsed;        /// True = column outline is collapsed.
+    bool                mbShowPhonetic:1;   /// True = cells in column show phonetic settings.
+    bool                mbHidden:1;         /// True = column is hidden.
+    bool                mbCollapsed:1;      /// True = column outline is collapsed.
 
     explicit            ColumnModel();
 
@@ -103,13 +103,13 @@ struct RowModel
     double              mfHeight;           /// Row height in points.
     sal_Int32           mnXfId;             /// Row default formatting (see mbIsFormatted).
     sal_Int32           mnLevel;            /// Row outline level.
-    bool                mbCustomHeight;     /// True = row has custom height.
-    bool                mbCustomFormat;     /// True = cells in row have explicit formatting.
-    bool                mbShowPhonetic;     /// True = cells in row show phonetic settings.
-    bool                mbHidden;           /// True = row is hidden.
-    bool                mbCollapsed;        /// True = row outline is collapsed.
-    bool                mbThickTop;         /// True = row has extra space above text.
-    bool                mbThickBottom;      /// True = row has extra space below text.
+    bool                mbCustomHeight:1;   /// True = row has custom height.
+    bool                mbCustomFormat:1;   /// True = cells in row have explicit formatting.
+    bool                mbShowPhonetic:1;   /// True = cells in row show phonetic settings.
+    bool                mbHidden:1;         /// True = row is hidden.
+    bool                mbCollapsed:1;      /// True = row outline is collapsed.
+    bool                mbThickTop:1;       /// True = row has extra space above text.
+    bool                mbThickBottom:1;    /// True = row has extra space below text.
 
     explicit            RowModel();
 
@@ -159,10 +159,10 @@ struct ValidationModel
     sal_Int32           mnType;
     sal_Int32           mnOperator;
     sal_Int32           mnErrorStyle;
-    bool                mbShowInputMsg;
-    bool                mbShowErrorMsg;
-    bool                mbNoDropDown;
-    bool                mbAllowBlank;
+    bool                mbShowInputMsg:1;
+    bool                mbShowErrorMsg:1;
+    bool                mbNoDropDown:1;
+    bool                mbAllowBlank:1;
 
     explicit            ValidationModel();
 
commit 3a22d789c22452b6a481c331db680a6b9d87a8ca
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date:   Thu Nov 21 12:18:56 2013 -0500

    Avoid re-drawing progress bar too frequently.
    
    Change-Id: I01dcd6d421c1f648b4cd8413e3baf50fd26d4c8f

diff --git a/sc/source/filter/oox/worksheethelper.cxx b/sc/source/filter/oox/worksheethelper.cxx
index 0ff9293..6d0ea85 100644
--- a/sc/source/filter/oox/worksheethelper.cxx
+++ b/sc/source/filter/oox/worksheethelper.cxx
@@ -96,12 +96,14 @@ namespace {
 
 void lclUpdateProgressBar( const ISegmentProgressBarRef& rxProgressBar, const CellRangeAddress& rUsedArea, sal_Int32 nRow )
 {
-    if( rxProgressBar.get() && (rUsedArea.StartRow <= nRow) && (nRow <= rUsedArea.EndRow) )
-    {
-        double fPosition = static_cast< double >( nRow - rUsedArea.StartRow + 1 ) / (rUsedArea.EndRow - rUsedArea.StartRow + 1);
-        if( rxProgressBar->getPosition() < fPosition )
-            rxProgressBar->setPosition( fPosition );
-    }
+    if (!rxProgressBar || nRow < rUsedArea.StartRow || rUsedArea.EndRow < nRow)
+        return;
+
+    double fCurPos = rxProgressBar->getPosition();
+    double fNewPos = static_cast<double>(nRow - rUsedArea.StartRow + 1.0) / (rUsedArea.EndRow - rUsedArea.StartRow + 1.0);
+    if (fCurPos < fNewPos && (fNewPos - fCurPos) > 0.3)
+        // Try not to re-draw progress bar too frequently.
+        rxProgressBar->setPosition(fNewPos);
 }
 
 void lclUpdateProgressBar( const ISegmentProgressBarRef& rxProgressBar, double fPosition )
commit 5db19a417952381fc6349b9691c581090d7d2679
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date:   Thu Nov 21 09:43:46 2013 -0500

    Compiler warning.
    
    Change-Id: I66b16e9767369fd54611f92d66cd1b43f4e8c5a8

diff --git a/oox/source/export/drawingml.cxx b/oox/source/export/drawingml.cxx
index 3f5731b..7526741 100644
--- a/oox/source/export/drawingml.cxx
+++ b/oox/source/export/drawingml.cxx
@@ -782,7 +782,7 @@ void DrawingML::WriteRunProperties( Reference< XPropertySet > rRun, sal_Bool bIs
         mAny >>= nCharEscapement;
 
     if( nCharEscapement && GETAD( CharEscapementHeight ) ) {
-        sal_uInt32 nCharEscapementHeight;
+        sal_uInt32 nCharEscapementHeight = 0;
         mAny >>= nCharEscapementHeight;
         nSize = (nSize * nCharEscapementHeight) / 100;
         // MSO uses default ~58% size
commit 8cef6c7ec67aec88b339ca647e784afbabf190f8
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Fri Nov 22 13:20:12 2013 +0000

    Related: fdo#41169 fix GTK non-Latin keyboard layout with Latin shortcuts
    
    See also rhbz#958300
    
    Change-Id: I5c3cf9652adb7b1c9ec53a32ed39f231a09ae1d7

diff --git a/vcl/unx/gtk/window/gtksalframe.cxx b/vcl/unx/gtk/window/gtksalframe.cxx
index 5651dcf..de96dbd 100644
--- a/vcl/unx/gtk/window/gtksalframe.cxx
+++ b/vcl/unx/gtk/window/gtksalframe.cxx
@@ -335,6 +335,14 @@ static sal_uInt16 GetKeyCode( guint keyval )
     return nCode;
 }
 
+static guint GetKeyValFor(GdkKeymap* pKeyMap, guint16 hardware_keycode, guint8 group)
+{
+    guint updated_keyval = 0;
+    gdk_keymap_translate_keyboard_state(pKeyMap, hardware_keycode,
+        (GdkModifierType)0, group, &updated_keyval, NULL, NULL, NULL);
+    return updated_keyval;
+}
+
 // F10 means either KEY_F10 or KEY_MENU, which has to be decided
 // in the independent part.
 struct KeyAlternate
@@ -385,7 +393,7 @@ struct DamageTracker : public basebmp::IBitmapDeviceDamageTracker
 void GtkSalFrame::doKeyCallback( guint state,
                                  guint keyval,
                                  guint16 hardware_keycode,
-                                 guint8 /*group*/,
+                                 guint8 group,
                                  guint32 time,
                                  sal_Unicode aOrigCode,
                                  bool bDown,
@@ -417,33 +425,48 @@ void GtkSalFrame::doKeyCallback( guint state,
     }
 #endif
 
-    /* #i42122# translate all keys with Ctrl and/or Alt to group 0
-    *  else shortcuts (e.g. Ctrl-o) will not work but be inserted by
-    *  the application
-    */
-    /* #i52338# do this for all keys that the independent part has no key code for
-    */
+    /*
+     *  #i42122# translate all keys with Ctrl and/or Alt to group 0 else
+     *  shortcuts (e.g. Ctrl-o) will not work but be inserted by the
+     *  application
+     *
+     *  #i52338# do this for all keys that the independent part has no key code
+     *  for
+     *
+     *  fdo#41169 rather than use group 0, detect if there is a group which can
+     *  be used to input Latin text and use that if possible
+     */
     aEvent.mnCode = GetKeyCode( keyval );
     if( aEvent.mnCode == 0 )
     {
-        // check other mapping
-        gint eff_group, level;
-        GdkModifierType consumed;
-        guint updated_keyval = 0;
-        // use gdk_keymap_get_default instead of NULL;
-        // workaround a crahs fixed in gtk 2.4
-        if( gdk_keymap_translate_keyboard_state( gdk_keymap_get_default(),
-                                                 hardware_keycode,
-                                                 (GdkModifierType)0,
-                                                 0,
-                                                 &updated_keyval,
-                                                 &eff_group,
-                                                 &level,
-                                                 &consumed ) )
+        gint best_group = SAL_MAX_INT32;
+
+        // Try and find Latin layout
+        GdkKeymap* keymap = gdk_keymap_get_default();
+        GdkKeymapKey *keys;
+        gint n_keys;
+        if (gdk_keymap_get_entries_for_keyval(keymap, GDK_A, &keys, &n_keys))
         {
-            aEvent.mnCode   = GetKeyCode( updated_keyval );
+            // Find the lowest group that supports Latin layout
+            for (gint i = 0; i < n_keys; ++i)
+            {
+                if (keys[i].level != 0 && keys[i].level != 1)
+                    continue;
+                best_group = std::min(best_group, keys[i].group);
+                if (best_group == 0)
+                    break;
+            }
+            g_free(keys);
         }
+
+        //Unavailable, go with original group then I suppose
+        if (best_group == SAL_MAX_INT32)
+            best_group = group;
+
+        guint updated_keyval = GetKeyValFor(keymap, hardware_keycode, best_group);
+        aEvent.mnCode = GetKeyCode(updated_keyval);
     }
+
     aEvent.mnCode   |= GetKeyModCode( state );
 
     if( bDown )
commit 48c29ef3f8214b21833a88adf02c1e1998f27b68
Author: Tor Lillqvist <tml at collabora.com>
Date:   Fri Nov 22 15:08:30 2013 +0200

    Now we can re-add CustomTarget_MobileLibreOffice_app
    
    Change-Id: Iefb00e72f2700503ea33a28c9f7e2150f0d1e06e

diff --git a/ios/Module_ios.mk b/ios/Module_ios.mk
index d70e277..671e9f3 100644
--- a/ios/Module_ios.mk
+++ b/ios/Module_ios.mk
@@ -13,6 +13,7 @@ ifeq ($(OS),IOS)
 $(eval $(call gb_Module_add_targets,ios,\
 	Executable_LibreOffice \
 	CustomTarget_LibreOffice_app \
+	CustomTarget_MobileLibreOffice_app \
 ))
 
 endif
commit 542dee77d483e10fcd540abc04cee9fa727b6c63
Author: Tor Lillqvist <tml at collabora.com>
Date:   Fri Nov 22 15:01:51 2013 +0200

    Schemes don't exist in a clean tree, so use targets
    
    The intent hopefully is that the MobileLibreOffice project should be
    buildable in a freshly cloned or otherwise clean tree, where Xcode has
    not been used interactively (which automatically creates a scheme for
    each target, it seems).
    
    Change-Id: I690513ecf54bb824dd3c3b0ef1735cc5cdff6d60

diff --git a/ios/CustomTarget_MobileLibreOffice_app.mk b/ios/CustomTarget_MobileLibreOffice_app.mk
index 76b3e75..404d797 100644
--- a/ios/CustomTarget_MobileLibreOffice_app.mk
+++ b/ios/CustomTarget_MobileLibreOffice_app.mk
@@ -15,7 +15,8 @@ BUILDID			:=$(shell cd $(SRCDIR) && git log -1 --format=%H)
 #- Macros ---------------------------------------------------------------------
 
 define MobileLibreOfficeXcodeBuild 
-	CC=;xcodebuild -project MobileLibreOffice/MobileLibreOffice.xcodeproj -scheme MobileLibreOffice -arch armv7 -configuration $(if $(ENABLE_DEBUG),Debug,Release) $(1) $(if $(verbose)$(VERBOSE),,>/dev/null)
+	CC=;xcodebuild -project shared/ios_sharedlo.xcodeproj -target ios_sharedlo -arch armv7 -configuration $(if $(ENABLE_DEBUG),Debug,Release) $(1) $(if $(verbose)$(VERBOSE),,>/dev/null)
+	CC=;xcodebuild -project MobileLibreOffice/MobileLibreOffice.xcodeproj -target MobileLibreOffice -arch armv7 -configuration $(if $(ENABLE_DEBUG),Debug,Release) $(1) $(if $(verbose)$(VERBOSE),,>/dev/null)
 endef
 
 #- Targets --------------------------------------------------------------------
commit 86c12faeb68b1e952118436c00f55a19b33866fc
Author: Tor Lillqvist <tml at collabora.com>
Date:   Fri Nov 22 13:45:29 2013 +0200

    No lib_link directory is used any more
    
    Change-Id: Ic21750744794b4721c28f4e2b23e5e5ca5d74db5

diff --git a/ios/MobileLibreOffice/.gitignore b/ios/MobileLibreOffice/.gitignore
index 85f0b5d..289939e 100644
--- a/ios/MobileLibreOffice/.gitignore
+++ b/ios/MobileLibreOffice/.gitignore
@@ -1,2 +1 @@
-/lib_link
 /resource_link
commit e434c1ce0557454ef4cdd98435c5c0b1d5181bcf
Author: Winfried Donkers <winfrieddonkers at libreoffice.org>
Date:   Thu Nov 21 11:16:43 2013 +0100

    fdo#71722 add Excel 2010 functions
    
    EXPON.DIST, HYPGEOM.DIST, POISSON.DIST, WEIBULL.DIST
    
    Change-Id: Ib9f648739ec0af90cdf2f576c7f548a6acb7b4a6
    Reviewed-on: https://gerrit.libreoffice.org/6748
    Reviewed-by: Eike Rathke <erack at redhat.com>
    Tested-by: Eike Rathke <erack at redhat.com>

diff --git a/formula/source/core/resource/core_resource.src b/formula/source/core/resource/core_resource.src
index 609928b..afb1d15 100644
--- a/formula/source/core/resource/core_resource.src
+++ b/formula/source/core/resource/core_resource.src
@@ -195,9 +195,11 @@ Resource RID_STRLIST_FUNCTION_NAMES_ENGLISH_ODFF
     String SC_OPCODE_B { Text = "BINOM.DIST.RANGE" ; };
     String SC_OPCODE_NORM_DIST { Text = "NORMDIST" ; };
     String SC_OPCODE_EXP_DIST { Text = "EXPONDIST" ; };
+    String SC_OPCODE_EXP_DIST_MS { Text = "COM.MICROSOFT.EXPON.DIST" ; };
     String SC_OPCODE_BINOM_DIST { Text = "BINOMDIST" ; };
     String SC_OPCODE_BINOM_DIST_MS { Text = "COM.MICROSOFT.BINOM.DIST" ; };
     String SC_OPCODE_POISSON_DIST { Text = "POISSON" ; };
+    String SC_OPCODE_POISSON_DIST_MS { Text = "COM.MICROSOFT.POISSON.DIST" ; };
     String SC_OPCODE_KOMBIN { Text = "COMBIN" ; };
     String SC_OPCODE_KOMBIN_2 { Text = "COMBINA" ; };
     String SC_OPCODE_VARIATIONEN { Text = "PERMUT" ; };
@@ -281,6 +283,7 @@ Resource RID_STRLIST_FUNCTION_NAMES_ENGLISH_ODFF
     String SC_OPCODE_MATRIX_UNIT { Text = "MUNIT" ; };
     String SC_OPCODE_BACK_SOLVER { Text = "GOALSEEK" ; };
     String SC_OPCODE_HYP_GEOM_DIST { Text = "HYPGEOMDIST" ; };
+    String SC_OPCODE_HYP_GEOM_DIST_MS { Text = "COM.MICROSOFT.HYPGEOM.DIST" ; };
     String SC_OPCODE_LOG_NORM_DIST { Text = "LOGNORMDIST" ; };
     String SC_OPCODE_T_DIST { Text = "LEGACY.TDIST" ; };
     String SC_OPCODE_F_DIST { Text = "LEGACY.FDIST" ; };
@@ -289,6 +292,7 @@ Resource RID_STRLIST_FUNCTION_NAMES_ENGLISH_ODFF
     String SC_OPCODE_CHI_DIST { Text = "LEGACY.CHIDIST" ; };
     String SC_OPCODE_CHI_DIST_MS { Text = "COM.MICROSOFT.CHISQ.DIST.RT" ; };
     String SC_OPCODE_WEIBULL { Text = "WEIBULL" ; };
+    String SC_OPCODE_WEIBULL_MS { Text = "COM.MICROSOFT.WEIBULL.DIST" ; };
     String SC_OPCODE_NEG_BINOM_VERT { Text = "NEGBINOMDIST" ; };
     String SC_OPCODE_KRIT_BINOM { Text = "CRITBINOM" ; };
     String SC_OPCODE_BINOM_INV { Text = "COM.MICROSOFT.BINOM.INV" ; };
@@ -563,9 +567,11 @@ Resource RID_STRLIST_FUNCTION_NAMES_ENGLISH_OOXML
     String SC_OPCODE_B { Text = "B" ; };
     String SC_OPCODE_NORM_DIST { Text = "NORMDIST" ; };
     String SC_OPCODE_EXP_DIST { Text = "EXPONDIST" ; };
+    String SC_OPCODE_EXP_DIST_MS { Text = "_xlfn.EXPON.DIST" ; };
     String SC_OPCODE_BINOM_DIST { Text = "BINOMDIST" ; };
     String SC_OPCODE_BINOM_DIST_MS { Text = "_xlfn.BINOM.DIST" ; };
     String SC_OPCODE_POISSON_DIST { Text = "POISSON" ; };
+    String SC_OPCODE_POISSON_DIST_MS { Text = "_xlfn.POISSON.DIST" ; };
     String SC_OPCODE_KOMBIN { Text = "COMBIN" ; };
     String SC_OPCODE_KOMBIN_2 { Text = "_xlfn.COMBINA" ; };
     String SC_OPCODE_VARIATIONEN { Text = "PERMUT" ; };
@@ -649,6 +655,7 @@ Resource RID_STRLIST_FUNCTION_NAMES_ENGLISH_OOXML
     String SC_OPCODE_MATRIX_UNIT { Text = "_xlfn.MUNIT" ; };
     String SC_OPCODE_BACK_SOLVER { Text = "GOALSEEK" ; };
     String SC_OPCODE_HYP_GEOM_DIST { Text = "HYPGEOMDIST" ; };
+    String SC_OPCODE_HYP_GEOM_DIST_MS { Text = "_xlfn.HYPGEOM.DIST" ; };
     String SC_OPCODE_LOG_NORM_DIST { Text = "LOGNORMDIST" ; };
     String SC_OPCODE_T_DIST { Text = "TDIST" ; };
     String SC_OPCODE_F_DIST { Text = "FDIST" ; };
@@ -657,6 +664,7 @@ Resource RID_STRLIST_FUNCTION_NAMES_ENGLISH_OOXML
     String SC_OPCODE_CHI_DIST { Text = "CHIDIST" ; };
     String SC_OPCODE_CHI_DIST_MS { Text = "_xlfn.CHISQ.DIST.RT" ; };
     String SC_OPCODE_WEIBULL { Text = "WEIBULL" ; };
+    String SC_OPCODE_WEIBULL_MS { Text = "_xlfn.WEIBULL.DIST" ; };
     String SC_OPCODE_NEG_BINOM_VERT { Text = "NEGBINOMDIST" ; };
     String SC_OPCODE_KRIT_BINOM { Text = "CRITBINOM" ; };
     String SC_OPCODE_BINOM_INV { Text = "_xlfn.BINOM.INV" ; };
@@ -933,9 +941,11 @@ Resource RID_STRLIST_FUNCTION_NAMES_ENGLISH
     String SC_OPCODE_B { Text = "B" ; };
     String SC_OPCODE_NORM_DIST { Text = "NORMDIST" ; };
     String SC_OPCODE_EXP_DIST { Text = "EXPONDIST" ; };
+    String SC_OPCODE_EXP_DIST_MS { Text = "EXPON.DIST" ; };
     String SC_OPCODE_BINOM_DIST { Text = "BINOMDIST" ; };
     String SC_OPCODE_BINOM_DIST_MS { Text = "BINOM.DIST" ; };
     String SC_OPCODE_POISSON_DIST { Text = "POISSON" ; };
+    String SC_OPCODE_POISSON_DIST_MS { Text = "POISSON.DIST" ; };
     String SC_OPCODE_KOMBIN { Text = "COMBIN" ; };
     String SC_OPCODE_KOMBIN_2 { Text = "COMBINA" ; };
     String SC_OPCODE_VARIATIONEN { Text = "PERMUT" ; };
@@ -1019,6 +1029,7 @@ Resource RID_STRLIST_FUNCTION_NAMES_ENGLISH
     String SC_OPCODE_MATRIX_UNIT { Text = "MUNIT" ; };
     String SC_OPCODE_BACK_SOLVER { Text = "GOALSEEK" ; };
     String SC_OPCODE_HYP_GEOM_DIST { Text = "HYPGEOMDIST" ; };
+    String SC_OPCODE_HYP_GEOM_DIST_MS { Text = "HYPGEOM.DIST" ; };
     String SC_OPCODE_LOG_NORM_DIST { Text = "LOGNORMDIST" ; };
     String SC_OPCODE_T_DIST { Text = "TDIST" ; };
     String SC_OPCODE_F_DIST { Text = "FDIST" ; };
@@ -1027,6 +1038,7 @@ Resource RID_STRLIST_FUNCTION_NAMES_ENGLISH
     String SC_OPCODE_CHI_DIST { Text = "CHIDIST" ; };
     String SC_OPCODE_CHI_DIST_MS { Text = "CHISQ.DIST.RT" ; };
     String SC_OPCODE_WEIBULL { Text = "WEIBULL" ; };
+    String SC_OPCODE_WEIBULL_MS { Text = "WEIBULL.DIST" ; };
     String SC_OPCODE_NEG_BINOM_VERT { Text = "NEGBINOMDIST" ; };
     String SC_OPCODE_KRIT_BINOM { Text = "CRITBINOM" ; };
     String SC_OPCODE_BINOM_INV { Text = "BINOM.INV" ; };
@@ -1743,6 +1755,10 @@ Resource RID_STRLIST_FUNCTION_NAMES
     {
         Text [ en-US ] = "EXPONDIST" ;
     };
+    String SC_OPCODE_EXP_DIST_MS
+    {
+        Text [ en-US ] = "EXPON.DIST" ;
+    };
     String SC_OPCODE_BINOM_DIST
     {
         Text [ en-US ] = "BINOMDIST" ;
@@ -1755,6 +1771,10 @@ Resource RID_STRLIST_FUNCTION_NAMES
     {
         Text [ en-US ] = "POISSON" ;
     };
+    String SC_OPCODE_POISSON_DIST_MS
+    {
+        Text [ en-US ] = "POISSON.DIST" ;
+    };
     String SC_OPCODE_KOMBIN
     {
         Text [ en-US ] = "COMBIN" ;
@@ -2088,6 +2108,10 @@ Resource RID_STRLIST_FUNCTION_NAMES
     {
         Text [ en-US ] = "HYPGEOMDIST" ;
     };
+    String SC_OPCODE_HYP_GEOM_DIST_MS
+    {
+        Text [ en-US ] = "HYPGEOM.DIST" ;
+    };
     String SC_OPCODE_LOG_NORM_DIST
     {
         Text [ en-US ] = "LOGNORMDIST" ;
@@ -2120,6 +2144,10 @@ Resource RID_STRLIST_FUNCTION_NAMES
     {
         Text [ en-US ] = "WEIBULL" ;
     };
+    String SC_OPCODE_WEIBULL_MS
+    {
+        Text [ en-US ] = "WEIBULL.DIST" ;
+    };
     String SC_OPCODE_NEG_BINOM_VERT
     {
         Text [ en-US ] = "NEGBINOMDIST" ;
diff --git a/include/formula/compiler.hrc b/include/formula/compiler.hrc
index 4f2f4e6..9bda945 100644
--- a/include/formula/compiler.hrc
+++ b/include/formula/compiler.hrc
@@ -430,8 +430,12 @@
 #define SC_OPCODE_F_INV_LT          432
 #define SC_OPCODE_F_INV_RT          433
 #define SC_OPCODE_F_TEST_MS         434
+#define SC_OPCODE_EXP_DIST_MS       435
+#define SC_OPCODE_HYP_GEOM_DIST_MS  436
+#define SC_OPCODE_POISSON_DIST_MS   437
+#define SC_OPCODE_WEIBULL_MS        438
 
-#define SC_OPCODE_STOP_2_PAR        435     /* last function with two or more parameters' OpCode + 1 */
+#define SC_OPCODE_STOP_2_PAR        439     /* last function with two or more parameters' OpCode + 1 */
 #define SC_OPCODE_STOP_FUNCTION     SC_OPCODE_STOP_2_PAR            /* last function's OpCode + 1 */
 #define SC_OPCODE_LAST_OPCODE_ID    (SC_OPCODE_STOP_FUNCTION - 1)   /* last OpCode */
 
diff --git a/include/formula/opcode.hxx b/include/formula/opcode.hxx
index b5953f7..58f3d41 100644
--- a/include/formula/opcode.hxx
+++ b/include/formula/opcode.hxx
@@ -229,10 +229,12 @@ enum OpCodeEnum
         ocB                 = SC_OPCODE_B,
         ocNormDist          = SC_OPCODE_NORM_DIST,
         ocExpDist           = SC_OPCODE_EXP_DIST,
+        ocExpDist_MS        = SC_OPCODE_EXP_DIST_MS,
         ocBinomDist         = SC_OPCODE_BINOM_DIST,
         ocBinomDist_MS      = SC_OPCODE_BINOM_DIST_MS,
         ocBinomInv          = SC_OPCODE_BINOM_INV,
         ocPoissonDist       = SC_OPCODE_POISSON_DIST,
+        ocPoissonDist_MS    = SC_OPCODE_POISSON_DIST_MS,
         ocKombin            = SC_OPCODE_KOMBIN,
         ocKombin2           = SC_OPCODE_KOMBIN_2,
         ocVariationen       = SC_OPCODE_VARIATIONEN,
@@ -323,6 +325,7 @@ enum OpCodeEnum
         ocBackSolver        = SC_OPCODE_BACK_SOLVER,
     // Statistical functions
         ocHypGeomDist       = SC_OPCODE_HYP_GEOM_DIST,
+        ocHypGeomDist_MS    = SC_OPCODE_HYP_GEOM_DIST_MS,
         ocLogNormDist       = SC_OPCODE_LOG_NORM_DIST,
         ocTDist             = SC_OPCODE_T_DIST,
         ocFDist             = SC_OPCODE_F_DIST,
@@ -335,6 +338,7 @@ enum OpCodeEnum
         ocChiSqInv          = SC_OPCODE_CHISQ_INV,
         ocChiSqInv_MS       = SC_OPCODE_CHISQ_INV_MS,
         ocWeibull           = SC_OPCODE_WEIBULL,
+        ocWeibull_MS        = SC_OPCODE_WEIBULL_MS,
         ocNegBinomVert      = SC_OPCODE_NEG_BINOM_VERT,
         ocKritBinom         = SC_OPCODE_KRIT_BINOM,
         ocKurt              = SC_OPCODE_KURT,
diff --git a/sc/inc/helpids.h b/sc/inc/helpids.h
index 5547551..e1c2dac 100644
--- a/sc/inc/helpids.h
+++ b/sc/inc/helpids.h
@@ -700,5 +700,9 @@
 #define HID_FUNC_F_INV_LT                                       "SC_HID_FUNC_F_INV_LT"
 #define HID_FUNC_F_INV_RT                                       "SC_HID_FUNC_F_INV_RT"
 #define HID_FUNC_F_TEST_MS                                      "SC_HID_FUNC_F_TEST_MS"
+#define HID_FUNC_EXP_DIST_MS                                    "SC_HID_FUNC_EXP_DIST_MS"
+#define HID_FUNC_HYP_GEOM_DIST_MS                               "SC_HID_FUNC_HYP_GEOM_DIST_MS"
+#define HID_FUNC_POISSON_DIST_MS                                "SC_HID_FUNC_POISSON_DIST_MS"
+#define HID_FUNC_WEIBULL_DIST_MS                                "SC_HID_FUNC_WEIBULL_DIST_MS"
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/qa/unit/ucalc.cxx b/sc/qa/unit/ucalc.cxx
index 8d30157..97a8d70 100644
--- a/sc/qa/unit/ucalc.cxx
+++ b/sc/qa/unit/ucalc.cxx
@@ -2388,6 +2388,7 @@ void Test::testFunctionLists()
         "COVARIANCE.S",
         "CRITBINOM",
         "DEVSQ",
+        "EXPON.DIST",
         "EXPONDIST",
         "F.DIST",
         "F.DIST.RT",
@@ -2407,6 +2408,7 @@ void Test::testFunctionLists()
         "GAUSS",
         "GEOMEAN",
         "HARMEAN",
+        "HYPGEOM.DIST",
         "HYPGEOMDIST",
         "INTERCEPT",
         "KURT",
@@ -2431,6 +2433,7 @@ void Test::testFunctionLists()
         "PERMUTATIONA",
         "PHI",
         "POISSON",
+        "POISSON.DIST",
         "PROB",
         "QUARTILE",
         "RANK",
@@ -2458,6 +2461,7 @@ void Test::testFunctionLists()
         "VARP",
         "VARPA",
         "WEIBULL",
+        "WEIBULL.DIST",
         "ZTEST",
         0
     };
diff --git a/sc/source/core/inc/interpre.hxx b/sc/source/core/inc/interpre.hxx
index dc8c8b4..e8eefa3 100644
--- a/sc/source/core/inc/interpre.hxx
+++ b/sc/source/core/inc/interpre.hxx
@@ -725,6 +725,7 @@ double GetLogGamma(double x);
 double GetBeta(double fAlpha, double fBeta);
 double GetLogBeta(double fAlpha, double fBeta);
 double GetBinomDistPMF(double x, double n, double p); //probability mass function
+double GetHypGeomDist( double x, double n, double M, double N );
 void ScLogGamma();
 void ScGamma();
 void ScPhi();
@@ -745,6 +746,7 @@ void ScVariationen();
 void ScVariationen2();
 void ScB();
 void ScHypGeomDist();
+void ScHypGeomDist_MS();
 void ScLogNormDist();
 void ScLogNormInv();
 void ScTDist();
diff --git a/sc/source/core/tool/interpr3.cxx b/sc/source/core/tool/interpr3.cxx
index 515530b..0cb0cc8 100644
--- a/sc/source/core/tool/interpr3.cxx
+++ b/sc/source/core/tool/interpr3.cxx
@@ -1738,12 +1738,6 @@ static void lcl_PutFactorialElements( ::std::vector< double >& cn, double fLower
 
 /** Calculates a value of the hypergeometric distribution.
 
-    The algorithm is designed to avoid unnecessary multiplications and division
-    by expanding all factorial elements (9 of them).  It is done by excluding
-    those ranges that overlap in the numerator and the denominator.  This allows
-    for a fast calculation for large values which would otherwise cause an overflow
-    in the intermediate values.
-
     @author Kohei Yoshida <kohei at openoffice.org>
 
     @see #i47296#
@@ -1751,8 +1745,6 @@ static void lcl_PutFactorialElements( ::std::vector< double >& cn, double fLower
  */
 void ScInterpreter::ScHypGeomDist()
 {
-    const size_t nMaxArraySize = 500000; // arbitrary max array size
-
     if ( !MustHaveParamCount( GetByte(), 4 ) )
         return;
 
@@ -1767,6 +1759,63 @@ void ScInterpreter::ScHypGeomDist()
         return;
     }
 
+    PushDouble( GetHypGeomDist( x, n, M, N ) );
+}
+
+/** Calculates a value of the hypergeometric distribution (Excel 2010 function).
+
+    This function has an extra argument bCumulative as compared to ScHypGeomDist(),
+    which only calculates the non-cumulative distribution.
+
+    @see fdo#71722
+*/
+void ScInterpreter::ScHypGeomDist_MS()
+{
+    if ( !MustHaveParamCount( GetByte(), 5 ) )
+        return;
+
+    bool bCumulative = GetBool();
+    double N = ::rtl::math::approxFloor(GetDouble());
+    double M = ::rtl::math::approxFloor(GetDouble());
+    double n = ::rtl::math::approxFloor(GetDouble());
+    double x = ::rtl::math::approxFloor(GetDouble());
+
+    if( (x < 0.0) || (n < x) || (M < x) || (N < n) || (N < M) || (x < n - N + M) )
+    {
+        PushIllegalArgument();
+        return;
+    }
+
+    if ( bCumulative )
+    {
+        double fVal = 0.0;
+
+        for ( int i = 0; i <= x && !nGlobalError; i++ )
+            fVal += GetHypGeomDist( i, n, M, N );
+
+        PushDouble( fVal );
+    }
+    else
+        PushDouble( GetHypGeomDist( x, n, M, N ) );
+}
+
+/** Calculates a value of the hypergeometric distribution.
+
+    The algorithm is designed to avoid unnecessary multiplications and division
+    by expanding all factorial elements (9 of them).  It is done by excluding
+    those ranges that overlap in the numerator and the denominator.  This allows
+    for a fast calculation for large values which would otherwise cause an overflow
+    in the intermediate values.
+
+    @author Kohei Yoshida <kohei at openoffice.org>
+
+    @see #i47296#
+
+ */
+double ScInterpreter::GetHypGeomDist( double x, double n, double M, double N )
+{
+    const size_t nMaxArraySize = 500000; // arbitrary max array size
+
     typedef ::std::vector< double > HypContainer;
     HypContainer cnNumer, cnDenom;
 
@@ -1775,7 +1824,7 @@ void ScInterpreter::ScHypGeomDist()
     if ( nEstContainerSize > nMaxSize )
     {
         PushNoValue();
-        return;
+        return 0;
     }
     cnNumer.reserve( nEstContainerSize + 10 );
     cnDenom.reserve( nEstContainerSize + 10 );
@@ -1959,7 +2008,7 @@ void ScInterpreter::ScHypGeomDist()
         fFactor *= fEnum / fDenom;
     }
 
-    PushDouble(fFactor);
+    return fFactor;
 }
 
 void ScInterpreter::ScGammaDist()
diff --git a/sc/source/core/tool/interpr4.cxx b/sc/source/core/tool/interpr4.cxx
index 38d73b0..d230ac8 100644
--- a/sc/source/core/tool/interpr4.cxx
+++ b/sc/source/core/tool/interpr4.cxx
@@ -4099,15 +4099,18 @@ StackVar ScInterpreter::Interpret()
                 case ocMatRef           : ScMatRef();                   break;
                 case ocB                : ScB();                        break;
                 case ocNormDist         : ScNormDist();                 break;
-                case ocExpDist          : ScExpDist();                  break;
+                case ocExpDist          :
+                case ocExpDist_MS       : ScExpDist();                  break;
                 case ocBinomDist        :
                 case ocBinomDist_MS     : ScBinomDist();                break;
-                case ocPoissonDist      : ScPoissonDist();              break;
+                case ocPoissonDist      :
+                case ocPoissonDist_MS   : ScPoissonDist();              break;
                 case ocKombin           : ScKombin();                   break;
                 case ocKombin2          : ScKombin2();                  break;
                 case ocVariationen      : ScVariationen();              break;
                 case ocVariationen2     : ScVariationen2();             break;
                 case ocHypGeomDist      : ScHypGeomDist();              break;
+                case ocHypGeomDist_MS   : ScHypGeomDist_MS();           break;
                 case ocLogNormDist      : ScLogNormDist();              break;
                 case ocTDist            : ScTDist();                    break;
                 case ocFDist            :
@@ -4127,7 +4130,8 @@ StackVar ScInterpreter::Interpret()
                 case ocMedian           : ScMedian();                   break;
                 case ocGeoMean          : ScGeoMean();                  break;
                 case ocHarMean          : ScHarMean();                  break;
-                case ocWeibull          : ScWeibull();                  break;
+                case ocWeibull          :
+                case ocWeibull_MS       : ScWeibull();                  break;
                 case ocBinomInv         :
                 case ocKritBinom        : ScCritBinom();                break;
                 case ocNegBinomVert     : ScNegBinomDist();             break;
diff --git a/sc/source/filter/excel/xlformula.cxx b/sc/source/filter/excel/xlformula.cxx
index b525d75..67d21ee 100644
--- a/sc/source/filter/excel/xlformula.cxx
+++ b/sc/source/filter/excel/xlformula.cxx
@@ -429,28 +429,32 @@ static const XclFunctionInfo saFuncTable_Oox[] =
  */
 static const XclFunctionInfo saFuncTable_2010[] =
 {
-    EXC_FUNCENTRY_V_VA(         ocCovarianceP,   2,  2,  0,  "COVARIANCE.P" ),
-    EXC_FUNCENTRY_V_VA(         ocCovarianceS,   2,  2,  0,  "COVARIANCE.S" ),
-    EXC_FUNCENTRY_V_RX(         ocStDevP_MS,     1, MX,  0,  "STDEV.P" ),
-    EXC_FUNCENTRY_V_RX(         ocStDevS,        1, MX,  0,  "STDEV.S" ),
-    EXC_FUNCENTRY_V_RX(         ocVarP_MS,       1, MX,  0,  "VAR.P" ),
-    EXC_FUNCENTRY_V_RX(         ocVarS,          1, MX,  0,  "VAR.S" ),
-    EXC_FUNCENTRY_V_VR(         ocBetaDist_MS,   4,  6,  0,  "BETA.DIST" ),
-    EXC_FUNCENTRY_V_VR(         ocBetaInv_MS,    3,  5,  0,  "BETA.INV" ),
-    EXC_FUNCENTRY_V_VR(         ocBinomDist_MS,  4,  4,  0,  "BINOM.DIST" ),
-    EXC_FUNCENTRY_V_VR(         ocBinomInv,      3,  3,  0,  "BINOM.INV" ),
-    EXC_FUNCENTRY_V_VR(         ocChiSqDist_MS,  3,  3,  0,  "CHISQ.DIST" ),
-    EXC_FUNCENTRY_V_VR(         ocChiSqInv_MS,   2,  2,  0,  "CHISQ.INV" ),
-    EXC_FUNCENTRY_V_VR(         ocChiDist_MS,    2,  2,  0,  "CHISQ.DIST.RT" ),
-    EXC_FUNCENTRY_V_VR(         ocChiInv_MS,     2,  2,  0,  "CHISQ.INV.RT" ),
-    EXC_FUNCENTRY_V_VR(         ocChiTest_MS,    2,  2,  0,  "CHISQ.TEST" ),
-    EXC_FUNCENTRY_V_VR(         ocConfidence_N,  3,  3,  0,  "CONFIDENCE.NORM" ),
-    EXC_FUNCENTRY_V_VR(         ocConfidence_T,  3,  3,  0,  "CONFIDENCE.T" ),
-    EXC_FUNCENTRY_V_VR(         ocFDist_LT,      4,  4,  0,  "F.DIST" ),
-    EXC_FUNCENTRY_V_VR(         ocFDist_RT,      3,  3,  0,  "F.DIST.RT" ),
-    EXC_FUNCENTRY_V_VR(         ocFInv_LT,       3,  3,  0,  "F.INV" ),
-    EXC_FUNCENTRY_V_VR(         ocFInv_RT,       3,  3,  0,  "F.INV.RT" ),
-    EXC_FUNCENTRY_V_VR(         ocFTest_MS,      2,  2,  0,  "F.TEST" )
+    EXC_FUNCENTRY_V_VA(         ocCovarianceP,    2,  2,  0,  "COVARIANCE.P" ),
+    EXC_FUNCENTRY_V_VA(         ocCovarianceS,    2,  2,  0,  "COVARIANCE.S" ),
+    EXC_FUNCENTRY_V_RX(         ocStDevP_MS,      1, MX,  0,  "STDEV.P" ),
+    EXC_FUNCENTRY_V_RX(         ocStDevS,         1, MX,  0,  "STDEV.S" ),
+    EXC_FUNCENTRY_V_RX(         ocVarP_MS,        1, MX,  0,  "VAR.P" ),
+    EXC_FUNCENTRY_V_RX(         ocVarS,           1, MX,  0,  "VAR.S" ),
+    EXC_FUNCENTRY_V_VR(         ocBetaDist_MS,    4,  6,  0,  "BETA.DIST" ),
+    EXC_FUNCENTRY_V_VR(         ocBetaInv_MS,     3,  5,  0,  "BETA.INV" ),
+    EXC_FUNCENTRY_V_VR(         ocBinomDist_MS,   4,  4,  0,  "BINOM.DIST" ),
+    EXC_FUNCENTRY_V_VR(         ocBinomInv,       3,  3,  0,  "BINOM.INV" ),
+    EXC_FUNCENTRY_V_VR(         ocChiSqDist_MS,   3,  3,  0,  "CHISQ.DIST" ),
+    EXC_FUNCENTRY_V_VR(         ocChiSqInv_MS,    2,  2,  0,  "CHISQ.INV" ),
+    EXC_FUNCENTRY_V_VR(         ocChiDist_MS,     2,  2,  0,  "CHISQ.DIST.RT" ),
+    EXC_FUNCENTRY_V_VR(         ocChiInv_MS,      2,  2,  0,  "CHISQ.INV.RT" ),
+    EXC_FUNCENTRY_V_VR(         ocChiTest_MS,     2,  2,  0,  "CHISQ.TEST" ),
+    EXC_FUNCENTRY_V_VR(         ocConfidence_N,   3,  3,  0,  "CONFIDENCE.NORM" ),
+    EXC_FUNCENTRY_V_VR(         ocConfidence_T,   3,  3,  0,  "CONFIDENCE.T" ),
+    EXC_FUNCENTRY_V_VR(         ocFDist_LT,       4,  4,  0,  "F.DIST" ),
+    EXC_FUNCENTRY_V_VR(         ocFDist_RT,       3,  3,  0,  "F.DIST.RT" ),
+    EXC_FUNCENTRY_V_VR(         ocFInv_LT,        3,  3,  0,  "F.INV" ),
+    EXC_FUNCENTRY_V_VR(         ocFInv_RT,        3,  3,  0,  "F.INV.RT" ),
+    EXC_FUNCENTRY_V_VR(         ocFTest_MS,       2,  2,  0,  "F.TEST" ),
+    EXC_FUNCENTRY_V_VR(         ocExpDist_MS,     3,  3,  0,  "EXPON.DIST" ),
+    EXC_FUNCENTRY_V_VR(         ocHypGeomDist_MS, 5,  5,  0,  "HYPGEOM.DIST" ),
+    EXC_FUNCENTRY_V_VR(         ocPoissonDist_MS, 3,  3,  0,  "POISSON.DIST" ),
+    EXC_FUNCENTRY_V_VR(         ocWeibull_MS,     4,  4,  0,  "WEIBULL.DIST" )
 };
 
 /** Functions new in Excel 2013.
diff --git a/sc/source/filter/oox/formulabase.cxx b/sc/source/filter/oox/formulabase.cxx
index b2376f4..ef8c926 100644
--- a/sc/source/filter/oox/formulabase.cxx
+++ b/sc/source/filter/oox/formulabase.cxx
@@ -768,7 +768,11 @@ static const FunctionData saFuncTable2010[] =
     { "COM.MICROSOFT.F.DIST.RT",              "F.DIST.RT",           NOID,   NOID,    3,  3,  V, { VR }, FUNCFLAG_MACROCALL_NEW },
     { "COM.MICROSOFT.F.INV",                  "F.INV",               NOID,   NOID,    3,  3,  V, { VR }, FUNCFLAG_MACROCALL_NEW },
     { "COM.MICROSOFT.F.INV.RT",               "F.INV.RT",            NOID,   NOID,    3,  3,  V, { VR }, FUNCFLAG_MACROCALL_NEW },
-    { "COM.MICROSOFT.F.TEST",                 "F.TEST",              NOID,   NOID,    2,  2,  V, { VA }, FUNCFLAG_MACROCALL_NEW }
+    { "COM.MICROSOFT.F.TEST",                 "F.TEST",              NOID,   NOID,    2,  2,  V, { VA }, FUNCFLAG_MACROCALL_NEW },
+    { "COM.MICROSOFT.EXPON.DIST",             "EXPON.DIST",          NOID,   NOID,    3,  3,  V, { VR }, FUNCFLAG_MACROCALL_NEW },
+    { "COM.MICROSOFT.HYPGEOM.DIST",           "HYPGEOM.DIST",        NOID,   NOID,    5,  5,  V, { VR }, FUNCFLAG_MACROCALL_NEW },
+    { "COM.MICROSOFT.POISSON.DIST",           "POISSON.DIST",        NOID,   NOID,    3,  3,  V, { VR }, FUNCFLAG_MACROCALL_NEW },
+    { "COM.MICROSOFT.WEIBULL.DIST",           "WEIBULL.DIST",        NOID,   NOID,    4,  4,  V, { VR }, FUNCFLAG_MACROCALL_NEW }
 };
 
 /** Functions new in Excel 2013.
diff --git a/sc/source/ui/src/scfuncs.src b/sc/source/ui/src/scfuncs.src
index 36dee21..ba670a4 100644
--- a/sc/source/ui/src/scfuncs.src
+++ b/sc/source/ui/src/scfuncs.src
@@ -6295,6 +6295,46 @@ Resource RID_SC_FUNCTION_DESCRIPTIONS2
             Text [ en-US ] = "0 or FALSE calculates the probability density function. Any other value or TRUE or omitted calculates the cumulative distribution function." ;
         };
     };
+     // -=*# Resource for function POISSON.DIST #*=-
+    Resource SC_OPCODE_POISSON_DIST_MS
+    {
+        String 1 // Description
+        {
+            Text [ en-US ] = "Returns the Poisson distribution." ;
+        };
+        ExtraData =
+        {
+            0;
+            ID_FUNCTION_GRP_STATISTIC;
+            U2S( HID_FUNC_POISSON_DIST_MS );
+            3;  0;  0;  1;
+            0;
+        };
+        String 2 // Name of Parameter 1
+        {
+            Text [ en-US ] = "Number" ;
+        };
+        String 3 // Description of Parameter 1
+        {
+            Text [ en-US ] = "The value for which the Poisson distribution is to be calculated." ;
+        };
+        String 4 // Name of Parameter 2
+        {
+            Text [ en-US ] = "mean" ;
+        };
+        String 5 // Description of Parameter 2
+        {
+            Text [ en-US ] = "Mean. The mean value of the Poisson distribution." ;
+        };
+        String 6 // Name of Parameter 3
+        {
+            Text [ en-US ] = "Cumulative" ;
+        };
+        String 7 // Description of Parameter 3
+        {
+            Text [ en-US ] = "0 or FALSE calculates the probability density function. Any other value or TRUE or omitted calculates the cumulative distribution function." ;
+        };
+    };
      // -=*# Resource for function NORMVERT #*=-
     Resource SC_OPCODE_NORM_DIST
     {
@@ -6559,6 +6599,46 @@ Resource RID_SC_FUNCTION_DESCRIPTIONS2
             Text [ en-US ] = "Cumulated. C=0 calculates the density function, C=1 the distribution." ;
         };
     };
+     // -=*# Resource for function EXPON.DIST #*=-
+    Resource SC_OPCODE_EXP_DIST_MS
+    {
+        String 1 // Description
+        {
+            Text [ en-US ] = "Values of the exponential distribution." ;
+        };
+        ExtraData =
+        {
+            0;
+            ID_FUNCTION_GRP_STATISTIC;
+            U2S( HID_FUNC_EXP_DIST_MS );
+            3;  0;  0;  0;
+            0;
+        };
+        String 2 // Name of Parameter 1
+        {
+            Text [ en-US ] = "Number" ;
+        };
+        String 3 // Description of Parameter 1
+        {
+            Text [ en-US ] = "The value to which the exponential distribution is to be calculated." ;
+        };
+        String 4 // Name of Parameter 2
+        {
+            Text [ en-US ] = "lambda" ;
+        };
+        String 5 // Description of Parameter 2
+        {
+            Text [ en-US ] = "The parameters of the exponential distribution." ;
+        };
+        String 6 // Name of Parameter 3
+        {
+            Text [ en-US ] = "C" ;
+        };
+        String 7 // Description of Parameter 3
+        {
+            Text [ en-US ] = "Cumulated. C=0 calculates the density function, C=1 the distribution." ;
+        };
+    };
      // -=*# Resource for function GAMMAVERT #*=-
     Resource SC_OPCODE_GAMMA_DIST
     {
@@ -6985,6 +7065,54 @@ Resource RID_SC_FUNCTION_DESCRIPTIONS2
             Text [ en-US ] = "Cumulated. C=0 calculates the density function, C=1 the distribution." ;
         };
     };
+     // -=*# Resource for function WEIBULL.DIST #*=-
+    Resource SC_OPCODE_WEIBULL_MS
+    {
+        String 1 // Description
+        {
+            Text [ en-US ] = "Returns the values of the Weibull distribution." ;
+        };
+        ExtraData =
+        {
+            0;
+            ID_FUNCTION_GRP_STATISTIC;
+            U2S( HID_FUNC_WEIBULL_DIST_MS );
+            4;  0;  0;  0;  0;
+            0;
+        };
+        String 2 // Name of Parameter 1
+        {
+            Text [ en-US ] = "Number" ;
+        };
+        String 3 // Description of Parameter 1
+        {
+            Text [ en-US ] = "The value for which the Weibull distribution is to be calculated." ;
+        };
+        String 4 // Name of Parameter 2
+        {
+            Text [ en-US ] = "Alpha" ;
+        };
+        String 5 // Description of Parameter 2
+        {
+            Text [ en-US ] = "The Alpha parameter of the Weibull distribution." ;
+        };
+        String 6 // Name of Parameter 3
+        {
+            Text [ en-US ] = "beta" ;
+        };
+        String 7 // Description of Parameter 3
+        {
+            Text [ en-US ] = "The Beta parameter of the Weibull distribution." ;
+        };
+        String 8 // Name of Parameter 4
+        {
+            Text [ en-US ] = "C" ;
+        };
+        String 9 // Description of Parameter 4
+        {
+            Text [ en-US ] = "Cumulated. C=0 calculates the density function, C=1 the distribution." ;
+        };
+    };
      // -=*# Resource for function HYPGEOMVERT #*=-
     Resource SC_OPCODE_HYP_GEOM_DIST
     {
@@ -7033,6 +7161,62 @@ Resource RID_SC_FUNCTION_DESCRIPTIONS2
             Text [ en-US ] = "The population size." ;
         };
     };
+     // -=*# Resource for function HYPGEOM.DIST #*=-
+    Resource SC_OPCODE_HYP_GEOM_DIST_MS
+    {
+        String 1 // Description
+        {
+            Text [ en-US ] = "Values of the hypergeometric distribution." ;
+        };
+        ExtraData =
+        {
+            0;
+            ID_FUNCTION_GRP_STATISTIC;
+            U2S( HID_FUNC_HYP_GEOM_DIST_MS );
+            5;  0;  0;  0;  0;
+            0;
+        };
+        String 2 // Name of Parameter 1
+        {
+            Text [ en-US ] = "X" ;
+        };
+        String 3 // Description of Parameter 1
+        {
+            Text [ en-US ] = "The number of successes in the sample." ;
+        };
+        String 4 // Name of Parameter 2
+        {
+            Text [ en-US ] = "n_sample" ;
+        };
+        String 5 // Description of Parameter 2
+        {
+            Text [ en-US ] = "The size of the sample." ;
+        };
+        String 6 // Name of Parameter 3
+        {
+            Text [ en-US ] = "successes" ;
+        };
+        String 7 // Description of Parameter 3
+        {
+            Text [ en-US ] = "The number of successes in the population." ;
+        };
+        String 8 // Name of Parameter 4
+        {
+            Text [ en-US ] = "n_population" ;
+        };
+        String 9 // Description of Parameter 4
+        {
+            Text [ en-US ] = "The population size." ;
+        };
+        String 10 // Name of Parameter 5
+        {
+            Text [ en-US ] = "C" ;
+        };
+        String 11 // Description of Parameter 5
+        {
+            Text [ en-US ] = "Cumulated. TRUE calculates the probabilty mass function, FALSE the cumulative distribution function." ;
+        };
+    };
      // -=*# Resource for function TVERT #*=-
     Resource SC_OPCODE_T_DIST
     {
commit 5238d79a7c3067b182cbce51e2118a6fa336899a
Author: Tor Lillqvist <tml at collabora.com>
Date:   Fri Nov 22 13:33:14 2013 +0200

    Use hidden visibility as in the LO code here, too
    
    Otherwise we get tons of (as such, in our case harmless) warnings from
    the linker about mismatches.
    
    Change-Id: I826d9e065bae59cdd213131163b31b2099806dd3

diff --git a/ios/shared/ios_sharedlo.xcodeproj/project.pbxproj b/ios/shared/ios_sharedlo.xcodeproj/project.pbxproj
index 9d289b9..2c92795 100644
--- a/ios/shared/ios_sharedlo.xcodeproj/project.pbxproj
+++ b/ios/shared/ios_sharedlo.xcodeproj/project.pbxproj
@@ -545,7 +545,7 @@
 					"MLO_APP_ROLE=LO_APP",
 					"DEBUG=1",
 				);
-				GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+				GCC_SYMBOLS_PRIVATE_EXTERN = YES;
 				GCC_WARN_ABOUT_RETURN_TYPE = YES;
 				GCC_WARN_UNINITIALIZED_AUTOS = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
@@ -582,6 +582,7 @@
 				GCC_C_LANGUAGE_STANDARD = gnu99;
 				GCC_DYNAMIC_NO_PIC = NO;
 				GCC_PREPROCESSOR_DEFINITIONS = "MLO_APP_ROLE=LO_APP";
+				GCC_SYMBOLS_PRIVATE_EXTERN = YES;
 				GCC_WARN_ABOUT_RETURN_TYPE = YES;
 				GCC_WARN_UNINITIALIZED_AUTOS = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
@@ -660,7 +661,7 @@
 					"MLO_APP_ROLE=TILE_TESTER",
 					"DEBUG=1",
 				);
-				GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+				GCC_SYMBOLS_PRIVATE_EXTERN = YES;
 				GCC_WARN_ABOUT_RETURN_TYPE = YES;
 				GCC_WARN_UNINITIALIZED_AUTOS = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
commit de4af9183c09cc5ccc05198e456f3916376835f9
Author: Tor Lillqvist <tml at collabora.com>
Date:   Fri Nov 22 13:32:35 2013 +0200

    Don't redirect output to /dev/null if verbosity is requested
    
    Change-Id: Idccc7cc8e9f81576bb24fec0a49144c0fcc16fd5

diff --git a/ios/CustomTarget_MobileLibreOffice_app.mk b/ios/CustomTarget_MobileLibreOffice_app.mk
index 87783fa..76b3e75 100644
--- a/ios/CustomTarget_MobileLibreOffice_app.mk
+++ b/ios/CustomTarget_MobileLibreOffice_app.mk
@@ -15,7 +15,7 @@ BUILDID			:=$(shell cd $(SRCDIR) && git log -1 --format=%H)
 #- Macros ---------------------------------------------------------------------
 
 define MobileLibreOfficeXcodeBuild 
-	CC=;xcodebuild -project MobileLibreOffice/MobileLibreOffice.xcodeproj -scheme MobileLibreOffice -arch armv7 -configuration $(if $(ENABLE_DEBUG),Debug,Release) $(1) >/dev/null
+	CC=;xcodebuild -project MobileLibreOffice/MobileLibreOffice.xcodeproj -scheme MobileLibreOffice -arch armv7 -configuration $(if $(ENABLE_DEBUG),Debug,Release) $(1) $(if $(verbose)$(VERBOSE),,>/dev/null)
 endef
 
 #- Targets --------------------------------------------------------------------
commit b9a3acb44c44cad1716be320f159dc793e6fa07a
Author: Tor Lillqvist <tml at collabora.com>
Date:   Fri Nov 22 12:58:10 2013 +0200

    Use the CLANG_CXX_LIBRARY from lo.xcconfig
    
    Change-Id: Id6424157d2a9ba2a4ab987cd8aafd9c7de52f836

diff --git a/ios/MobileLibreOffice/MobileLibreOffice.xcodeproj/project.pbxproj b/ios/MobileLibreOffice/MobileLibreOffice.xcodeproj/project.pbxproj
index 8c68aca..e806d6b 100644
--- a/ios/MobileLibreOffice/MobileLibreOffice.xcodeproj/project.pbxproj
+++ b/ios/MobileLibreOffice/MobileLibreOffice.xcodeproj/project.pbxproj
@@ -825,7 +825,6 @@
 				ALWAYS_SEARCH_USER_PATHS = NO;
 				ARCHS = armv7;
 				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
-				CLANG_CXX_LIBRARY = "compiler-default";
 				CLANG_ENABLE_OBJC_ARC = YES;
 				CLANG_WARN_CONSTANT_CONVERSION = YES;
 				CLANG_WARN_EMPTY_BODY = YES;
@@ -874,7 +873,6 @@
 				ALWAYS_SEARCH_USER_PATHS = NO;
 				ARCHS = armv7;
 				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
-				CLANG_CXX_LIBRARY = "compiler-default";
 				CLANG_ENABLE_OBJC_ARC = YES;
 				CLANG_WARN_CONSTANT_CONVERSION = YES;
 				CLANG_WARN_EMPTY_BODY = YES;
@@ -953,7 +951,6 @@
 				ALWAYS_SEARCH_USER_PATHS = NO;
 				ARCHS = armv7;
 				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
-				CLANG_CXX_LIBRARY = "compiler-default";
 				CLANG_ENABLE_OBJC_ARC = YES;
 				CLANG_WARN_CONSTANT_CONVERSION = YES;
 				CLANG_WARN_EMPTY_BODY = YES;
diff --git a/ios/shared/ios_sharedlo.xcodeproj/project.pbxproj b/ios/shared/ios_sharedlo.xcodeproj/project.pbxproj
index 679a2a7..9d289b9 100644
--- a/ios/shared/ios_sharedlo.xcodeproj/project.pbxproj
+++ b/ios/shared/ios_sharedlo.xcodeproj/project.pbxproj
@@ -530,7 +530,6 @@
 				ALWAYS_SEARCH_USER_PATHS = NO;
 				ARCHS = armv7;
 				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
-				CLANG_CXX_LIBRARY = "compiler-default";
 				CLANG_ENABLE_OBJC_ARC = YES;
 				CLANG_WARN_CONSTANT_CONVERSION = YES;
 				CLANG_WARN_EMPTY_BODY = YES;
@@ -573,7 +572,6 @@
 				ALWAYS_SEARCH_USER_PATHS = NO;
 				ARCHS = armv7;
 				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
-				CLANG_CXX_LIBRARY = "compiler-default";
 				CLANG_ENABLE_OBJC_ARC = YES;
 				CLANG_WARN_CONSTANT_CONVERSION = YES;
 				CLANG_WARN_EMPTY_BODY = YES;
@@ -647,7 +645,6 @@
 				ALWAYS_SEARCH_USER_PATHS = NO;
 				ARCHS = armv7;
 				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
-				CLANG_CXX_LIBRARY = "compiler-default";
 				CLANG_ENABLE_OBJC_ARC = YES;
 				CLANG_WARN_CONSTANT_CONVERSION = YES;
 				CLANG_WARN_EMPTY_BODY = YES;
commit 27c7db9a7365827fecb0cb72f3b27da9f935c4a2
Author: Tor Lillqvist <tml at collabora.com>
Date:   Fri Nov 22 12:42:58 2013 +0200

    Some whitespace cleanup, avoids Emacs warning
    
    Change-Id: I5b2c5a249c0446d69ac19d11e0d5e038983f0be8

diff --git a/ios/CustomTarget_MobileLibreOffice_app.mk b/ios/CustomTarget_MobileLibreOffice_app.mk
index 300d67f..87783fa 100644
--- a/ios/CustomTarget_MobileLibreOffice_app.mk
+++ b/ios/CustomTarget_MobileLibreOffice_app.mk
@@ -11,7 +11,7 @@
 LO_XCCONFIG 	:= lo.xcconfig
 DEST_RESOURCE 	:= MobileLibreOffice/resource_link
 BUILDID			:=$(shell cd $(SRCDIR) && git log -1 --format=%H)
-          
+
 #- Macros ---------------------------------------------------------------------
 
 define MobileLibreOfficeXcodeBuild 
@@ -56,14 +56,14 @@ MobileLibreOffice_setup:
 				$(WORKDIR)/UnpackedTarball/icu/source/lib \
 				$(WORKDIR)/UnpackedTarball/openssl; do \
 		flags=''; \
-    	for lib in $$path/lib*.a; do \
-        	if [ ! -r $$lib ]; then \
-            	continue; \
-        	fi; \
-        	base="$${lib##*/lib}"; \
-        	base=$${base%\.a}; \
-        	flags+=" -l$${base}"; \
-    	done; \
+        for lib in $$path/lib*.a; do \
+            if [ ! -r $$lib ]; then \
+                continue; \
+            fi; \
+            base="$${lib##*/lib}"; \
+            base=$${base%\.a}; \
+            flags+=" -l$${base}"; \
+        done; \
 		if [ "$$flags" ]; then \
 			all_flags+=" -L$$path $$flags"; \
 		fi; \
@@ -91,10 +91,10 @@ MobileLibreOffice_setup:
 	# soffice.cfg
 	mkdir -p $(DEST_RESOURCE)/share/config
 	cp -R $(INSTDIR)/share/config/soffice.cfg $(DEST_RESOURCE)/share/config
-            
+
 	# "registry"
 	cp -R $(INSTDIR)/share/registry $(DEST_RESOURCE)/share
-            
+
 	# Set up rc, the "inifile". See getIniFileName_Impl().
 	file=$(DEST_RESOURCE)/rc; \
 	echo '[Bootstrap]'                                       >  $$file; \
@@ -127,7 +127,7 @@ MobileLibreOffice_setup:
 	echo "buildid=$(BUILDID)"   >> $$file; \
 	echo 'ProductMajor=360'     >> $$file; \
 	echo 'ProductMinor=1'       >> $$file; 
-	 
+
 #==============================================================================
 # Clean
 $(call gb_CustomTarget_get_clean_target,ios/MobileLibreOffice):
commit 75675f13347e3d15947e8cfba7d81e34148fa11e
Author: Michael Stahl <mstahl at redhat.com>
Date:   Fri Nov 22 12:27:43 2013 +0100

    helpcontent2: revert accidental reset
    
    Change-Id: Ia33fae872cf52d14a3faa186a4792d1e91b7962d

diff --git a/helpcontent2 b/helpcontent2
index 39abc00..35006f4 160000
--- a/helpcontent2
+++ b/helpcontent2
@@ -1 +1 @@
-Subproject commit 39abc00ac7423fdf1d0b60229a1a0cd3fe300801
+Subproject commit 35006f482c02c41bd4eb8fdc9a29f804d6a3b672
commit fc87d57f04132658e1c3481e92fe36e1183423ed
Author: Noel Grandin <noel at peralex.com>
Date:   Fri Nov 22 11:13:17 2013 +0200

    replace OUString::reverseCompareTo("xxx") with operator==
    
    operator== with OUString and literal internally does a reverse-compare
    (via OUString::equalsAsciiL) anyway, so no need to keep explicit calls
    to OUString::reverseCompareTo with literal argument
    
    Change-Id: I799d9bcd0d5c308a9547ce7cacb2db6042fdb643

diff --git a/chart2/source/view/main/ChartView.cxx b/chart2/source/view/main/ChartView.cxx
index 16da8f8..3dac9dd 100644
--- a/chart2/source/view/main/ChartView.cxx
+++ b/chart2/source/view/main/ChartView.cxx
@@ -2862,7 +2862,7 @@ Reference< uno::XInterface > ChartView::createInstance( const OUString& aService
     SdrModel* pModel = ( m_pDrawModelWrapper ? &m_pDrawModelWrapper->getSdrModel() : NULL );
     if ( pModel )
     {
-        if ( aServiceSpecifier.reverseCompareTo( "com.sun.star.drawing.DashTable" ) == 0 )
+        if ( aServiceSpecifier == "com.sun.star.drawing.DashTable" )
         {
             if ( !m_xDashTable.is() )
             {
@@ -2870,7 +2870,7 @@ Reference< uno::XInterface > ChartView::createInstance( const OUString& aService
             }
             return m_xDashTable;
         }
-        else if ( aServiceSpecifier.reverseCompareTo( "com.sun.star.drawing.GradientTable" ) == 0 )
+        else if ( aServiceSpecifier == "com.sun.star.drawing.GradientTable" )
         {
             if ( !m_xGradientTable.is() )
             {
@@ -2878,7 +2878,7 @@ Reference< uno::XInterface > ChartView::createInstance( const OUString& aService
             }
             return m_xGradientTable;
         }
-        else if ( aServiceSpecifier.reverseCompareTo( "com.sun.star.drawing.HatchTable" ) == 0 )
+        else if ( aServiceSpecifier == "com.sun.star.drawing.HatchTable" )
         {
             if ( !m_xHatchTable.is() )
             {
@@ -2886,7 +2886,7 @@ Reference< uno::XInterface > ChartView::createInstance( const OUString& aService
             }
             return m_xHatchTable;
         }
-        else if ( aServiceSpecifier.reverseCompareTo( "com.sun.star.drawing.BitmapTable" ) == 0 )
+        else if ( aServiceSpecifier == "com.sun.star.drawing.BitmapTable" )
         {
             if ( !m_xBitmapTable.is() )
             {
@@ -2894,7 +2894,7 @@ Reference< uno::XInterface > ChartView::createInstance( const OUString& aService
             }
             return m_xBitmapTable;
         }
-        else if ( aServiceSpecifier.reverseCompareTo( "com.sun.star.drawing.TransparencyGradientTable" ) == 0 )
+        else if ( aServiceSpecifier == "com.sun.star.drawing.TransparencyGradientTable" )
         {
             if ( !m_xTransGradientTable.is() )
             {
@@ -2902,7 +2902,7 @@ Reference< uno::XInterface > ChartView::createInstance( const OUString& aService
             }
             return m_xTransGradientTable;
         }
-        else if ( aServiceSpecifier.reverseCompareTo( "com.sun.star.drawing.MarkerTable" ) == 0 )
+        else if ( aServiceSpecifier == "com.sun.star.drawing.MarkerTable" )
         {
             if ( !m_xMarkerTable.is() )
             {
diff --git a/editeng/source/xml/xmltxtexp.cxx b/editeng/source/xml/xmltxtexp.cxx
index eed1c2c..6d3523c 100644
--- a/editeng/source/xml/xmltxtexp.cxx
+++ b/editeng/source/xml/xmltxtexp.cxx
@@ -226,13 +226,13 @@ SvxSimpleUnoModel::~SvxSimpleUnoModel()
 uno::Reference< uno::XInterface > SAL_CALL SvxSimpleUnoModel::createInstance( const OUString& aServiceSpecifier )
     throw(uno::Exception, uno::RuntimeException)
 {
-    if( 0 == aServiceSpecifier.reverseCompareTo( "com.sun.star.text.NumberingRules" ) )
+    if( aServiceSpecifier == "com.sun.star.text.NumberingRules" )
     {
         return uno::Reference< uno::XInterface >(
             SvxCreateNumRule(), uno::UNO_QUERY );
     }
-    if (   (0 == aServiceSpecifier.reverseCompareTo( "com.sun.star.text.textfield.DateTime" ))
-        || (0 == aServiceSpecifier.reverseCompareTo( "com.sun.star.text.TextField.DateTime" ))
+    if (   aServiceSpecifier == "com.sun.star.text.textfield.DateTime"
+        || aServiceSpecifier == "com.sun.star.text.TextField.DateTime"
        )
     {
         return (::cppu::OWeakObject * )new SvxUnoTextField( text::textfield::Type::DATE );
diff --git a/filter/source/flash/swfexporter.cxx b/filter/source/flash/swfexporter.cxx
index 85c18b4..5382f84 100644
--- a/filter/source/flash/swfexporter.cxx
+++ b/filter/source/flash/swfexporter.cxx
@@ -545,12 +545,12 @@ void FlashExporter::exportShape( Reference< XShape >& xShape, bool bMaster )
             if( bMaster )
             {
                 OUString aShapeType( xShape->getShapeType() );
-                if( (0 == aShapeType.reverseCompareTo( "com.sun.star.presentation.TitleTextShape" )) ||
-                    (0 == aShapeType.reverseCompareTo( "com.sun.star.presentation.OutlinerShape" )) ||
-                    (0 == aShapeType.reverseCompareTo( "com.sun.star.presentation.HeaderShape" )) ||
-                    (0 == aShapeType.reverseCompareTo( "com.sun.star.presentation.FooterShape" )) ||
-                    (0 == aShapeType.reverseCompareTo( "com.sun.star.presentation.SlideNumberShape" )) ||
-                    (0 == aShapeType.reverseCompareTo( "com.sun.star.presentation.DateTimeShape" )))
+                if( aShapeType == "com.sun.star.presentation.TitleTextShape" ||
+                    aShapeType == "com.sun.star.presentation.OutlinerShape"  ||
+                    aShapeType == "com.sun.star.presentation.HeaderShape"    ||
+                    aShapeType == "com.sun.star.presentation.FooterShape"    ||
+                    aShapeType == "com.sun.star.presentation.SlideNumberShape"  ||
+                    aShapeType == "com.sun.star.presentation.DateTimeShape" )
                     return;
             }
         }
diff --git a/helpcontent2 b/helpcontent2
index 35006f4..39abc00 160000
--- a/helpcontent2
+++ b/helpcontent2
@@ -1 +1 @@
-Subproject commit 35006f482c02c41bd4eb8fdc9a29f804d6a3b672
+Subproject commit 39abc00ac7423fdf1d0b60229a1a0cd3fe300801
diff --git a/oox/source/export/chartexport.cxx b/oox/source/export/chartexport.cxx
index 36412be..fb8f2a9 100644
--- a/oox/source/export/chartexport.cxx
+++ b/oox/source/export/chartexport.cxx
@@ -393,35 +393,35 @@ void lcl_fillCategoriesIntoStringVector(
 sal_Int32 lcl_getChartType( const OUString& sChartType )
 {
     chart::TypeId eChartTypeId = chart::TYPEID_UNKNOWN;
-    if(( 0 == sChartType.reverseCompareTo( "com.sun.star.chart.BarDiagram" ))
-        || ( 0 == sChartType.reverseCompareTo( "com.sun.star.chart2.ColumnChartType" )))
+    if( sChartType == "com.sun.star.chart.BarDiagram"
+        || sChartType == "com.sun.star.chart2.ColumnChartType" )
         eChartTypeId = chart::TYPEID_BAR;
-    else if(( 0 == sChartType.reverseCompareTo( "com.sun.star.chart.AreaDiagram" ))
-        || ( 0 == sChartType.reverseCompareTo( "com.sun.star.chart2.AreaChartType" ) ) )
+    else if( sChartType == "com.sun.star.chart.AreaDiagram"
+             || sChartType == "com.sun.star.chart2.AreaChartType" )
         eChartTypeId = chart::TYPEID_AREA;
-    else if(( 0 == sChartType.reverseCompareTo( "com.sun.star.chart.LineDiagram" ))
-        || ( 0 == sChartType.reverseCompareTo( "com.sun.star.chart2.LineChartType" ) ) )
+    else if( sChartType == "com.sun.star.chart.LineDiagram"
+             || sChartType == "com.sun.star.chart2.LineChartType" )
         eChartTypeId = chart::TYPEID_LINE;
-    else if(( 0 == sChartType.reverseCompareTo( "com.sun.star.chart.PieDiagram" ))
-        || ( 0 == sChartType.reverseCompareTo( "com.sun.star.chart2.PieChartType") ) )
+    else if( sChartType == "com.sun.star.chart.PieDiagram"
+             || sChartType == "com.sun.star.chart2.PieChartType" )
         eChartTypeId = chart::TYPEID_PIE;
-    else if(( 0 == sChartType.reverseCompareTo( "com.sun.star.chart.DonutDiagram"))
-        || ( 0 == sChartType.reverseCompareTo( "com.sun.star.chart2.DonutChartType") ) )
+    else if( sChartType == "com.sun.star.chart.DonutDiagram"
+             || sChartType == "com.sun.star.chart2.DonutChartType" )
         eChartTypeId = chart::TYPEID_DOUGHNUT;
-    else if(( 0 == sChartType.reverseCompareTo( "com.sun.star.chart.XYDiagram"))
-        || ( 0 == sChartType.reverseCompareTo( "com.sun.star.chart2.ScatterChartType") ) )
+    else if( sChartType == "com.sun.star.chart.XYDiagram"
+             || sChartType == "com.sun.star.chart2.ScatterChartType" )
         eChartTypeId = chart::TYPEID_SCATTER;
-    else if(( 0 == sChartType.reverseCompareTo( "com.sun.star.chart.NetDiagram"))
-        || ( 0 == sChartType.reverseCompareTo( "com.sun.star.chart2.NetChartType") ) )
+    else if( sChartType == "com.sun.star.chart.NetDiagram"
+             || sChartType == "com.sun.star.chart2.NetChartType" )
         eChartTypeId = chart::TYPEID_RADARLINE;
-    else if(( 0 == sChartType.reverseCompareTo( "com.sun.star.chart.FilledNetDiagram"))
-        || ( 0 == sChartType.reverseCompareTo( "com.sun.star.chart2.FilledNetChartType") ) )
+    else if( sChartType == "com.sun.star.chart.FilledNetDiagram"
+             || sChartType == "com.sun.star.chart2.FilledNetChartType" )
         eChartTypeId = chart::TYPEID_RADARAREA;
-    else if(( 0 == sChartType.reverseCompareTo( "com.sun.star.chart.StockDiagram"))
-        || ( 0 == sChartType.reverseCompareTo( "com.sun.star.chart2.CandleStickChartType") ) )
+    else if( sChartType == "com.sun.star.chart.StockDiagram"
+             || sChartType == "com.sun.star.chart2.CandleStickChartType" )
         eChartTypeId = chart::TYPEID_STOCK;
-    else if(( 0 == sChartType.reverseCompareTo( "com.sun.star.chart.BubbleDiagram"))
-        || ( 0 == sChartType.reverseCompareTo( "com.sun.star.chart2.BubbleChartType") ) )
+    else if( sChartType == "com.sun.star.chart.BubbleDiagram"
+             || sChartType == "com.sun.star.chart2.BubbleChartType" )
         eChartTypeId = chart::TYPEID_BUBBLE;
 
     return eChartTypeId;
diff --git a/reportdesign/source/core/api/ReportDefinition.cxx b/reportdesign/source/core/api/ReportDefinition.cxx
index 023b0a9..1afdeb6 100644
--- a/reportdesign/source/core/api/ReportDefinition.cxx
+++ b/reportdesign/source/core/api/ReportDefinition.cxx
@@ -2236,9 +2236,9 @@ uno::Reference< uno::XInterface > SAL_CALL OReportDefinition::createInstance( co
     {
         xShape.set(m_aProps->m_xContext->getServiceManager()->createInstanceWithContext(aServiceSpecifier,m_aProps->m_xContext),uno::UNO_QUERY);
     }
-    else if ( aServiceSpecifier.reverseCompareTo( "com.sun.star.style.PageStyle" ) == 0 ||
-              aServiceSpecifier.reverseCompareTo( "com.sun.star.style.FrameStyle" ) == 0 ||
-              aServiceSpecifier.reverseCompareTo( "com.sun.star.style.GraphicStyle" ) == 0
+    else if ( aServiceSpecifier == "com.sun.star.style.PageStyle" ||
+              aServiceSpecifier == "com.sun.star.style.FrameStyle" ||
+              aServiceSpecifier == "com.sun.star.style.GraphicStyle"
               )
     {
         uno::Reference< style::XStyle> xStyle = new OStyle();
@@ -2249,72 +2249,72 @@ uno::Reference< uno::XInterface > SAL_CALL OReportDefinition::createInstance( co
 
         return xStyle.get();
     }
-    else if ( aServiceSpecifier.reverseCompareTo( "com.sun.star.document.Settings" ) == 0 )
+    else if ( aServiceSpecifier == "com.sun.star.document.Settings" )
     {
         uno::Reference<beans::XPropertySet> xProp = new OStyle();
 
         return xProp.get();
     }
-    else if ( aServiceSpecifier.reverseCompareTo( "com.sun.star.drawing.Defaults" ) == 0 )
+    else if ( aServiceSpecifier == "com.sun.star.drawing.Defaults" )
     {
         uno::Reference<beans::XPropertySet> xProp = new OStyle();
         return xProp.get();
     }
-    else if ( aServiceSpecifier.reverseCompareTo( "com.sun.star.drawing.GradientTable" ) == 0 )
+    else if ( aServiceSpecifier == "com.sun.star.drawing.GradientTable" )
     {
         if ( !m_pImpl->m_xGradientTable.is() )
             m_pImpl->m_xGradientTable.set(SvxUnoGradientTable_createInstance(m_pImpl->m_pReportModel.get()),uno::UNO_QUERY);
         return m_pImpl->m_xGradientTable;
     }
-    else if ( aServiceSpecifier.reverseCompareTo( "com.sun.star.drawing.HatchTable" ) == 0 )
+    else if ( aServiceSpecifier == "com.sun.star.drawing.HatchTable" )
     {
         if ( !m_pImpl->m_xHatchTable.is() )
             m_pImpl->m_xHatchTable.set(SvxUnoHatchTable_createInstance(m_pImpl->m_pReportModel.get()),uno::UNO_QUERY);
         return m_pImpl->m_xHatchTable;
     }
-    else if ( aServiceSpecifier.reverseCompareTo( "com.sun.star.drawing.BitmapTable" ) == 0 )
+    else if ( aServiceSpecifier == "com.sun.star.drawing.BitmapTable"  )
     {
         if ( !m_pImpl->m_xBitmapTable.is() )
             m_pImpl->m_xBitmapTable.set(SvxUnoBitmapTable_createInstance(m_pImpl->m_pReportModel.get()),uno::UNO_QUERY);
         return m_pImpl->m_xBitmapTable;
     }
-    else if ( aServiceSpecifier.reverseCompareTo( "com.sun.star.drawing.TransparencyGradientTable" ) == 0 )
+    else if ( aServiceSpecifier == "com.sun.star.drawing.TransparencyGradientTable" )
     {
         if ( !m_pImpl->m_xTransparencyGradientTable.is() )
             m_pImpl->m_xTransparencyGradientTable.set(SvxUnoTransGradientTable_createInstance(m_pImpl->m_pReportModel.get()),uno::UNO_QUERY);
         return m_pImpl->m_xTransparencyGradientTable;
     }
-    else if ( aServiceSpecifier.reverseCompareTo( "com.sun.star.drawing.DashTable" ) == 0 )
+    else if ( aServiceSpecifier == "com.sun.star.drawing.DashTable" )
     {
         if ( !m_pImpl->m_xDashTable.is() )
             m_pImpl->m_xDashTable.set(SvxUnoDashTable_createInstance(m_pImpl->m_pReportModel.get()),uno::UNO_QUERY);
         return m_pImpl->m_xDashTable;
     }
-    else if( 0 == aServiceSpecifier.reverseCompareTo( "com.sun.star.drawing.MarkerTable" ) )
+    else if( aServiceSpecifier == "com.sun.star.drawing.MarkerTable" )
     {
         if( !m_pImpl->m_xMarkerTable.is() )
             m_pImpl->m_xMarkerTable.set(SvxUnoMarkerTable_createInstance( m_pImpl->m_pReportModel.get() ),uno::UNO_QUERY);
         return m_pImpl->m_xMarkerTable;
     }
-    else if ( aServiceSpecifier.reverseCompareTo( "com.sun.star.document.ImportEmbeddedObjectResolver" ) == 0 )
+    else if ( aServiceSpecifier == "com.sun.star.document.ImportEmbeddedObjectResolver" )
         return static_cast< ::cppu::OWeakObject* >(SvXMLEmbeddedObjectHelper::Create( m_pImpl->m_xStorage,*this, EMBEDDEDOBJECTHELPER_MODE_READ ));
-    else if ( aServiceSpecifier.reverseCompareTo( "com.sun.star.document.ExportEmbeddedObjectResolver" ) == 0 )
+    else if ( aServiceSpecifier == "com.sun.star.document.ExportEmbeddedObjectResolver" )
         return static_cast< ::cppu::OWeakObject* >(SvXMLEmbeddedObjectHelper::Create( m_pImpl->m_xStorage,*this, EMBEDDEDOBJECTHELPER_MODE_WRITE ));
-    else if ( aServiceSpecifier.reverseCompareTo( "com.sun.star.document.ImportGraphicObjectResolver" ) == 0 )
+    else if ( aServiceSpecifier == "com.sun.star.document.ImportGraphicObjectResolver" )
     {
         SvXMLGraphicHelper* pGraphicHelper = SvXMLGraphicHelper::Create(m_pImpl->m_xStorage,GRAPHICHELPER_MODE_WRITE);
         uno::Reference< uno::XInterface> xRet(static_cast< ::cppu::OWeakObject* >(pGraphicHelper));
         pGraphicHelper->release();
         return xRet;
     }
-    else if ( aServiceSpecifier.reverseCompareTo( "com.sun.star.document.ExportGraphicObjectResolver" ) == 0 )
+    else if ( aServiceSpecifier == "com.sun.star.document.ExportGraphicObjectResolver" )
     {
         SvXMLGraphicHelper* pGraphicHelper = SvXMLGraphicHelper::Create(m_pImpl->m_xStorage,GRAPHICHELPER_MODE_WRITE);
         uno::Reference< uno::XInterface> xRet(static_cast< ::cppu::OWeakObject* >(pGraphicHelper));
         pGraphicHelper->release();
         return xRet;
     }
-    else if ( aServiceSpecifier.reverseCompareTo( "com.sun.star.chart2.data.DataProvider" ) == 0 )
+    else if ( aServiceSpecifier == "com.sun.star.chart2.data.DataProvider" )
     {
         uno::Reference<chart2::data::XDatabaseDataProvider> xDataProvider(chart2::data::DatabaseDataProvider::createWithConnection( m_aProps->m_xContext, m_pImpl->m_xActiveConnection ));
         xDataProvider->setRowLimit(10);
@@ -2323,7 +2323,7 @@ uno::Reference< uno::XInterface > SAL_CALL OReportDefinition::createInstance( co
             xChild->setParent(*this);
         return uno::Reference< uno::XInterface >(xDataProvider,uno::UNO_QUERY);
     }
-    else if ( aServiceSpecifier.reverseCompareTo( "com.sun.star.xml.NamespaceMap" ) == 0 )
+    else if ( aServiceSpecifier == "com.sun.star.xml.NamespaceMap" )
     {
         if ( !m_pImpl->m_xXMLNamespaceMap.is() )
             m_pImpl->m_xXMLNamespaceMap = comphelper::NameContainer_createInstance( ::getCppuType( (const OUString*) 0 ) ).get();
diff --git a/sd/source/ui/unoidl/unomodel.cxx b/sd/source/ui/unoidl/unomodel.cxx
index 9d2a011..aaf70b7 100644
--- a/sd/source/ui/unoidl/unomodel.cxx
+++ b/sd/source/ui/unoidl/unomodel.cxx
@@ -824,59 +824,59 @@ css::uno::Reference<css::uno::XInterface> SdXImpressDocument::create(
     if( NULL == mpDoc )
         throw lang::DisposedException();
 
-    if( 0 == aServiceSpecifier.reverseCompareTo( "com.sun.star.drawing.DashTable" ) )
+    if( aServiceSpecifier == "com.sun.star.drawing.DashTable" )
     {
         if( !mxDashTable.is() )
             mxDashTable = SvxUnoDashTable_createInstance( mpDoc );
 
         return mxDashTable;
     }
-    if( 0 == aServiceSpecifier.reverseCompareTo( "com.sun.star.drawing.GradientTable" ) )
+    if( aServiceSpecifier == "com.sun.star.drawing.GradientTable" )
     {
         if( !mxGradientTable.is() )
             mxGradientTable = SvxUnoGradientTable_createInstance( mpDoc );
 
         return mxGradientTable;
     }
-    if( 0 == aServiceSpecifier.reverseCompareTo( "com.sun.star.drawing.HatchTable" ) )
+    if( aServiceSpecifier == "com.sun.star.drawing.HatchTable" )
     {
         if( !mxHatchTable.is() )
             mxHatchTable = SvxUnoHatchTable_createInstance( mpDoc );
 
         return mxHatchTable;
     }
-    if( 0 == aServiceSpecifier.reverseCompareTo( "com.sun.star.drawing.BitmapTable" ) )
+    if( aServiceSpecifier == "com.sun.star.drawing.BitmapTable" )
     {
         if( !mxBitmapTable.is() )
             mxBitmapTable = SvxUnoBitmapTable_createInstance( mpDoc );
 
         return mxBitmapTable;
     }
-    if( 0 == aServiceSpecifier.reverseCompareTo( "com.sun.star.drawing.TransparencyGradientTable" ) )
+    if( aServiceSpecifier == "com.sun.star.drawing.TransparencyGradientTable" )
     {
         if( !mxTransGradientTable.is() )
             mxTransGradientTable = SvxUnoTransGradientTable_createInstance( mpDoc );
 
         return mxTransGradientTable;
     }
-    if( 0 == aServiceSpecifier.reverseCompareTo( "com.sun.star.drawing.MarkerTable" ) )

... etc. - the rest is truncated


More information about the Libreoffice-commits mailing list