[Libreoffice-commits] core.git: Branch 'distro/collabora/cp-6.4' - 24 commits - connectivity/source desktop/source download.lst editeng/source external/mdds forms/source i18npool/source icon-themes/colibre icon-themes/colibre_svg include/toolkit officecfg/registry sc/qa sc/source sc/uiconfig svx/source sw/qa sw/source sw/uiconfig toolkit/CppunitTest_toolkit.mk toolkit/qa toolkit/source vcl/source

Caolán McNamara (via logerrit) logerrit at kemper.freedesktop.org
Wed May 13 08:57:45 UTC 2020


 connectivity/source/drivers/firebird/DatabaseMetaData.cxx      |    2 
 connectivity/source/drivers/mysql_jdbc/YTable.cxx              |    2 
 connectivity/source/drivers/mysqlc/mysqlc_databasemetadata.cxx |    2 
 desktop/source/app/app.cxx                                     |    4 
 dev/null                                                       |binary
 download.lst                                                   |    4 
 editeng/source/editeng/impedit2.cxx                            |    9 
 external/mdds/UnpackedTarball_mdds.mk                          |    1 
 external/mdds/Wdeprecated-copy.patch                           |   11 
 forms/source/xforms/submission.cxx                             |    3 
 forms/source/xforms/submission/submission.hxx                  |    6 
 i18npool/source/collator/gencoll_rule.cxx                      |    2 
 icon-themes/colibre/cmd/32/ca/bold.png                         |binary
 icon-themes/colibre/cmd/32/ca/italic.png                       |binary
 icon-themes/colibre/cmd/32/ca/underline.png                    |binary
 icon-themes/colibre/cmd/32/ca/underlinedouble.png              |binary
 icon-themes/colibre/cmd/32/de/bold.png                         |binary
 icon-themes/colibre/cmd/32/de/italic.png                       |binary
 icon-themes/colibre/cmd/32/de/numberformatdecdecimals.png      |binary
 icon-themes/colibre/cmd/32/de/numberformatdecimal.png          |binary
 icon-themes/colibre/cmd/32/de/numberformatincdecimals.png      |binary
 icon-themes/colibre/cmd/32/de/numberformatthousands.png        |binary
 icon-themes/colibre/cmd/32/es/underline.png                    |binary
 icon-themes/colibre/cmd/32/es/underlinedouble.png              |binary
 icon-themes/colibre/cmd/32/fr/bold.png                         |binary
 icon-themes/colibre/cmd/32/hu/italic.png                       |binary
 icon-themes/colibre/cmd/32/hu/underline.png                    |binary
 icon-themes/colibre/cmd/32/hu/underlinedouble.png              |binary
 icon-themes/colibre/cmd/32/km/bold.png                         |binary
 icon-themes/colibre/cmd/32/km/italic.png                       |binary
 icon-themes/colibre/cmd/32/km/underline.png                    |binary
 icon-themes/colibre/cmd/32/km/underlinedouble.png              |binary
 icon-themes/colibre/cmd/32/nl/bold.png                         |binary
 icon-themes/colibre/cmd/32/nl/underline.png                    |binary
 icon-themes/colibre/cmd/32/nl/underlinedouble.png              |binary
 icon-themes/colibre/cmd/32/pl/underline.png                    |binary
 icon-themes/colibre/cmd/32/pl/underlinedouble.png              |binary
 icon-themes/colibre/cmd/32/ru/bold.png                         |binary
 icon-themes/colibre/cmd/32/ru/underline.png                    |binary
 icon-themes/colibre/cmd/32/ru/underlinedouble.png              |binary
 icon-themes/colibre/cmd/32/sl/bold.png                         |binary
 icon-themes/colibre/cmd/32/sl/italic.png                       |binary
 icon-themes/colibre/cmd/32/tr/italic.png                       |binary
 icon-themes/colibre/cmd/de/lc_numberformatdecdecimals.png      |binary
 icon-themes/colibre/cmd/de/lc_numberformatdecimal.png          |binary
 icon-themes/colibre/cmd/de/lc_numberformatincdecimals.png      |binary
 icon-themes/colibre/cmd/de/lc_numberformatthousands.png        |binary
 icon-themes/colibre/cmd/de/sc_numberformatdecdecimals.png      |binary
 icon-themes/colibre/cmd/de/sc_numberformatdecimal.png          |binary
 icon-themes/colibre/cmd/de/sc_numberformatincdecimals.png      |binary
 icon-themes/colibre/cmd/de/sc_numberformatthousands.png        |binary
 icon-themes/colibre/cmd/tr/lc_italic.png                       |binary
 icon-themes/colibre/cmd/tr/lc_underline.png                    |binary
 icon-themes/colibre/cmd/tr/lc_underlinedouble.png              |binary
 icon-themes/colibre/cmd/tr/sc_italic.png                       |binary
 icon-themes/colibre/cmd/tr/sc_underline.png                    |binary
 icon-themes/colibre/cmd/tr/sc_underlinedouble.png              |binary
 icon-themes/colibre/links.txt                                  |  233 ++-
 icon-themes/colibre_svg/cmd/32/ca/bold.svg                     |    1 
 icon-themes/colibre_svg/cmd/32/ca/italic.svg                   |    1 
 icon-themes/colibre_svg/cmd/32/ca/underline.svg                |    1 
 icon-themes/colibre_svg/cmd/32/ca/underlinedouble.svg          |    1 
 icon-themes/colibre_svg/cmd/32/de/bold.svg                     |    1 
 icon-themes/colibre_svg/cmd/32/de/italic.svg                   |    1 
 icon-themes/colibre_svg/cmd/32/de/numberformatdecdecimals.svg  |    1 
 icon-themes/colibre_svg/cmd/32/de/numberformatdecimal.svg      |    1 
 icon-themes/colibre_svg/cmd/32/de/numberformatincdecimals.svg  |    1 
 icon-themes/colibre_svg/cmd/32/de/numberformatthousands.svg    |    1 
 icon-themes/colibre_svg/cmd/32/es/underline.svg                |    1 
 icon-themes/colibre_svg/cmd/32/es/underlinedouble.svg          |    1 
 icon-themes/colibre_svg/cmd/32/fr/bold.svg                     |    1 
 icon-themes/colibre_svg/cmd/32/hu/italic.svg                   |    1 
 icon-themes/colibre_svg/cmd/32/hu/underline.svg                |    1 
 icon-themes/colibre_svg/cmd/32/hu/underlinedouble.svg          |    1 
 icon-themes/colibre_svg/cmd/32/km/bold.svg                     |    1 
 icon-themes/colibre_svg/cmd/32/km/italic.svg                   |    1 
 icon-themes/colibre_svg/cmd/32/km/underline.svg                |    1 
 icon-themes/colibre_svg/cmd/32/km/underlinedouble.svg          |    1 
 icon-themes/colibre_svg/cmd/32/nl/bold.svg                     |    1 
 icon-themes/colibre_svg/cmd/32/nl/underline.svg                |    1 
 icon-themes/colibre_svg/cmd/32/nl/underlinedouble.svg          |    1 
 icon-themes/colibre_svg/cmd/32/pl/underline.svg                |    1 
 icon-themes/colibre_svg/cmd/32/pl/underlinedouble.svg          |    1 
 icon-themes/colibre_svg/cmd/32/ru/bold.svg                     |    1 
 icon-themes/colibre_svg/cmd/32/ru/underline.svg                |    1 
 icon-themes/colibre_svg/cmd/32/ru/underlinedouble.svg          |    1 
 icon-themes/colibre_svg/cmd/32/sl/bold.svg                     |    1 
 icon-themes/colibre_svg/cmd/32/sl/italic.svg                   |    1 
 icon-themes/colibre_svg/cmd/32/tr/italic.svg                   |    1 
 icon-themes/colibre_svg/cmd/es/lc_bold.svg                     |    1 
 icon-themes/colibre_svg/cmd/es/lc_numberformatdecimal.svg      |    1 
 icon-themes/colibre_svg/cmd/es/lc_numberformatthousands.svg    |    1 
 icon-themes/colibre_svg/cmd/es/lc_underline.svg                |    1 
 icon-themes/colibre_svg/cmd/es/lc_underlinedouble.svg          |    1 
 icon-themes/colibre_svg/cmd/es/sc_bold.svg                     |    1 
 icon-themes/colibre_svg/cmd/es/sc_numberformatdecimal.svg      |    1 
 icon-themes/colibre_svg/cmd/es/sc_numberformatthousands.svg    |    1 
 icon-themes/colibre_svg/cmd/es/sc_underline.svg                |    1 
 icon-themes/colibre_svg/cmd/es/sc_underlinedouble.svg          |    1 
 icon-themes/colibre_svg/cmd/fr/lc_underline.svg                |    1 
 icon-themes/colibre_svg/cmd/fr/lc_underlinedouble.svg          |    1 
 icon-themes/colibre_svg/cmd/fr/sc_underline.svg                |    1 
 icon-themes/colibre_svg/cmd/fr/sc_underlinedouble.svg          |    1 
 icon-themes/colibre_svg/cmd/hu/lc_bold.svg                     |    1 
 icon-themes/colibre_svg/cmd/hu/sc_bold.svg                     |    1 
 icon-themes/colibre_svg/cmd/id/lc_numberformatdecimal.svg      |    1 
 icon-themes/colibre_svg/cmd/id/lc_numberformatthousands.svg    |    1 
 icon-themes/colibre_svg/cmd/id/sc_numberformatdecimal.svg      |    1 
 icon-themes/colibre_svg/cmd/id/sc_numberformatthousands.svg    |    1 
 icon-themes/colibre_svg/cmd/it/lc_bold.svg                     |    1 
 icon-themes/colibre_svg/cmd/it/lc_italic.svg                   |    1 
 icon-themes/colibre_svg/cmd/it/lc_underline.svg                |    1 
 icon-themes/colibre_svg/cmd/it/lc_underlinedouble.svg          |    1 
 icon-themes/colibre_svg/cmd/it/sc_bold.svg                     |    1 
 icon-themes/colibre_svg/cmd/it/sc_italic.svg                   |    1 
 icon-themes/colibre_svg/cmd/it/sc_underline.svg                |    1 
 icon-themes/colibre_svg/cmd/it/sc_underlinedouble.svg          |    1 
 icon-themes/colibre_svg/cmd/nl/lc_italic.svg                   |    1 
 icon-themes/colibre_svg/cmd/nl/sc_italic.svg                   |    1 
 icon-themes/colibre_svg/cmd/pl/lc_bold.svg                     |    1 
 icon-themes/colibre_svg/cmd/pl/lc_italic.svg                   |    1 
 icon-themes/colibre_svg/cmd/pl/sc_bold.svg                     |    1 
 icon-themes/colibre_svg/cmd/pl/sc_italic.svg                   |    1 
 icon-themes/colibre_svg/cmd/pt-BR/lc_bold.svg                  |    1 
 icon-themes/colibre_svg/cmd/pt-BR/lc_underline.svg             |    1 
 icon-themes/colibre_svg/cmd/pt-BR/lc_underlinedouble.svg       |    1 
 icon-themes/colibre_svg/cmd/pt-BR/sc_bold.svg                  |    1 
 icon-themes/colibre_svg/cmd/pt-BR/sc_underline.svg             |    1 
 icon-themes/colibre_svg/cmd/pt-BR/sc_underlinedouble.svg       |    1 
 icon-themes/colibre_svg/cmd/pt/lc_bold.svg                     |    1 
 icon-themes/colibre_svg/cmd/pt/lc_underline.svg                |    1 
 icon-themes/colibre_svg/cmd/pt/lc_underlinedouble.svg          |    1 
 icon-themes/colibre_svg/cmd/pt/sc_bold.svg                     |    1 
 icon-themes/colibre_svg/cmd/pt/sc_underline.svg                |    1 
 icon-themes/colibre_svg/cmd/pt/sc_underlinedouble.svg          |    1 
 icon-themes/colibre_svg/cmd/ru/lc_italic.svg                   |    1 
 icon-themes/colibre_svg/cmd/ru/sc_italic.svg                   |    1 
 icon-themes/colibre_svg/cmd/sl/lc_underline.svg                |    1 
 icon-themes/colibre_svg/cmd/sl/lc_underlinedouble.svg          |    1 
 icon-themes/colibre_svg/cmd/sl/sc_underline.svg                |    1 
 icon-themes/colibre_svg/cmd/sl/sc_underlinedouble.svg          |    1 
 icon-themes/colibre_svg/cmd/sv/lc_bold.svg                     |    1 
 icon-themes/colibre_svg/cmd/sv/lc_italic.svg                   |    1 
 icon-themes/colibre_svg/cmd/sv/sc_bold.svg                     |    1 
 icon-themes/colibre_svg/cmd/sv/sc_italic.svg                   |    1 
 icon-themes/colibre_svg/cmd/tr/lc_bold.svg                     |    1 
 icon-themes/colibre_svg/cmd/tr/sc_bold.svg                     |    1 
 include/toolkit/controls/eventcontainer.hxx                    |   20 
 officecfg/registry/schema/org/openoffice/Office/Calc.xcs       |   17 
 sc/qa/unit/data/ods/tdf79998.ods                               |binary
 sc/qa/unit/filters-test.cxx                                    |   20 
 sc/source/core/data/table6.cxx                                 |   10 
 sc/source/core/opencl/formulagroupcl.cxx                       |  770 +++++-----
 sc/source/filter/excel/xestream.cxx                            |  129 +
 sc/source/filter/inc/xestream.hxx                              |    5 
 sc/source/ui/unoobj/cellsuno.cxx                               |    2 
 sc/uiconfig/scalc/ui/notebookbar.ui                            |    2 
 sc/uiconfig/scalc/ui/notebookbar_compact.ui                    |    2 
 svx/source/dialog/docrecovery.cxx                              |    6 
 svx/source/svdraw/svdograf.cxx                                 |    9 
 sw/qa/extras/uiwriter/data/tdf132187.odt                       |binary
 sw/qa/extras/uiwriter/uiwriter.cxx                             |   27 
 sw/source/ui/frmdlg/cption.cxx                                 |   15 
 sw/source/uibase/inc/cption.hxx                                |    1 
 sw/uiconfig/swriter/ui/numparapage.ui                          |    1 
 toolkit/CppunitTest_toolkit.mk                                 |    1 
 toolkit/qa/cppunit/EventContainer.cxx                          |   82 +
 toolkit/source/controls/eventcontainer.cxx                     |   56 
 vcl/source/app/salusereventlist.cxx                            |    4 
 vcl/source/window/bufferdevice.cxx                             |   10 
 vcl/source/window/bufferdevice.hxx                             |    2 
 vcl/source/window/menufloatingwindow.cxx                       |   11 
 172 files changed, 1036 insertions(+), 534 deletions(-)

New commits:
commit f24a3f397c72e1dd4364cf941463b3855fb3b06e
Author:     Caolán McNamara <caolanm at redhat.com>
AuthorDate: Mon May 11 17:02:50 2020 +0100
Commit:     Andras Timar <andras.timar at collabora.com>
CommitDate: Wed May 13 10:56:18 2020 +0200

    use the LinkManager persist to determine the Referer
    
    Change-Id: I4e93878972492a93af368ffa0560412132431a24
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/94061
    Tested-by: Jenkins
    Reviewed-by: Stephan Bergmann <sbergman at redhat.com>

diff --git a/svx/source/svdraw/svdograf.cxx b/svx/source/svdraw/svdograf.cxx
index 7e14a6d3bdd9..53b3e00a35fc 100644
--- a/svx/source/svdraw/svdograf.cxx
+++ b/svx/source/svdraw/svdograf.cxx
@@ -19,8 +19,10 @@
 
 #include <unotools/streamwrap.hxx>
 
+#include <sfx2/docfile.hxx>
 #include <sfx2/lnkbase.hxx>
 #include <math.h>
+#include <sfx2/objsh.hxx>
 #include <tools/helpers.hxx>
 #include <sot/exchange.hxx>
 #include <sot/formats.hxx>
@@ -109,8 +111,13 @@ SdrGraphicLink::SdrGraphicLink(SdrGrafObj& rObj)
     {
         sfx2::LinkManager::GetDisplayNames( this, nullptr, &rGrafObj.aFileName, nullptr, &rGrafObj.aFilterName );
 
+        OUString sReferer(getReferer());
+        SfxObjectShell * sh = pLinkManager->GetPersist();
+        if (sh != nullptr && sh->HasName())
+            sReferer = sh->GetMedium()->GetName();
+
         Graphic aGraphic;
-        if (sfx2::LinkManager::GetGraphicFromAny(rMimeType, rValue, getReferer(), aGraphic, nullptr))
+        if (sfx2::LinkManager::GetGraphicFromAny(rMimeType, rValue, sReferer, aGraphic, nullptr))
         {
             rGrafObj.ImpSetLinkedGraphic(aGraphic);
         }
commit 431b1a258e4304c1e6aae55232cf3faaa3684b76
Author:     Caolán McNamara <caolanm at redhat.com>
AuthorDate: Mon May 11 20:46:43 2020 +0100
Commit:     Andras Timar <andras.timar at collabora.com>
CommitDate: Wed May 13 10:56:17 2020 +0200

    limit forms to http[s]
    
    Change-Id: I3ed0bc626f693ec03f610dc7361f93cad914c9d8
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/93993
    Tested-by: Jenkins
    Reviewed-by: Stephan Bergmann <sbergman at redhat.com>

diff --git a/forms/source/xforms/submission.cxx b/forms/source/xforms/submission.cxx
index f20b72f11973..7e8517e89481 100644
--- a/forms/source/xforms/submission.cxx
+++ b/forms/source/xforms/submission.cxx
@@ -253,6 +253,9 @@ bool Submission::doSubmit( const Reference< XInteractionHandler >& xHandler )
         return false;
     }
 
+    if (!xSubmission->IsWebProtocol())
+        return false;
+
     CSubmission::SubmissionResult aResult = xSubmission->submit( xHandler );
 
     if (aResult == CSubmission::SUCCESS)
diff --git a/forms/source/xforms/submission/submission.hxx b/forms/source/xforms/submission/submission.hxx
index 77d59b1f740e..a459f471ba0d 100644
--- a/forms/source/xforms/submission/submission.hxx
+++ b/forms/source/xforms/submission/submission.hxx
@@ -126,6 +126,12 @@ public:
         , m_xContext(::comphelper::getProcessComponentContext())
     {}
 
+    bool IsWebProtocol() const
+    {
+        INetProtocol eProtocol = m_aURLObj.GetProtocol();
+        return eProtocol == INetProtocol::Http || eProtocol == INetProtocol::Https;
+    }
+
     virtual ~CSubmission() {}
 
     virtual SubmissionResult submit(const css::uno::Reference< css::task::XInteractionHandler >& ) = 0;
commit bccf47c288beb136c7132cec1294a8a12bb644b7
Author:     Julien Nabet <serval2412 at yahoo.fr>
AuthorDate: Mon May 11 13:03:24 2020 +0200
Commit:     Andras Timar <andras.timar at collabora.com>
CommitDate: Wed May 13 10:56:17 2020 +0200

    tdf#132939: avoid crash when uninitialized FilterDescriptor
    
    See bt:
    https://bugs.documentfoundation.org/attachment.cgi?id=160656
    
    Change-Id: Ifacce7d39878e1b1d119aa878e7280eb3c9c2228
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/93959
    Tested-by: Jenkins
    Reviewed-by: Julien Nabet <serval2412 at yahoo.fr>
    (cherry picked from commit 3466488ef22752c8f6f47f7b8f1dac5cc0cb27a2)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/93989
    Reviewed-by: Eike Rathke <erack at redhat.com>

diff --git a/sc/source/ui/unoobj/cellsuno.cxx b/sc/source/ui/unoobj/cellsuno.cxx
index 0f3bf54e3765..c6b8ef1e01d0 100644
--- a/sc/source/ui/unoobj/cellsuno.cxx
+++ b/sc/source/ui/unoobj/cellsuno.cxx
@@ -5406,6 +5406,8 @@ void SAL_CALL ScCellRangeObj::filter( const uno::Reference<sheet::XSheetFilterDe
 {
     SolarMutexGuard aGuard;
 
+    if (!xDescriptor.is()) return;
+
     //  This could be theoretically an unknown object, so only use the
     //  public XSheetFilterDescriptor interface to copy the data into a
     //  ScFilterDescriptor object:
commit f9154c01d7c142c7837a0d642992777662265a36
Author:     Julien Nabet <serval2412 at yahoo.fr>
AuthorDate: Sun May 10 20:44:12 2020 +0200
Commit:     Andras Timar <andras.timar at collabora.com>
CommitDate: Wed May 13 10:56:16 2020 +0200

    tdf#126468: MySQL/MariaDB and Firebird don't require order field in select part
    
    Change-Id: I75f050dd6f38fefe83d24a4886610d421f72826e
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/93937
    Reviewed-by: Lionel Elie Mamane <lionel at mamane.lu>
    Tested-by: Julien Nabet <serval2412 at yahoo.fr>
    (cherry picked from commit 572c9db0440d9aba4945fb1761ec7f83e717c2f0)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/93801
    Tested-by: Jenkins

diff --git a/connectivity/source/drivers/firebird/DatabaseMetaData.cxx b/connectivity/source/drivers/firebird/DatabaseMetaData.cxx
index 3d0401678d60..88fec644527b 100644
--- a/connectivity/source/drivers/firebird/DatabaseMetaData.cxx
+++ b/connectivity/source/drivers/firebird/DatabaseMetaData.cxx
@@ -513,7 +513,7 @@ sal_Bool SAL_CALL ODatabaseMetaData::supportsLikeEscapeClause(  )
 
 sal_Bool SAL_CALL ODatabaseMetaData::supportsOrderByUnrelated(  )
 {
-    return false;
+    return true;
 }
 
 sal_Bool SAL_CALL ODatabaseMetaData::supportsUnion(  )
diff --git a/connectivity/source/drivers/mysqlc/mysqlc_databasemetadata.cxx b/connectivity/source/drivers/mysqlc/mysqlc_databasemetadata.cxx
index d9c7f81f9139..2b14104ff02b 100644
--- a/connectivity/source/drivers/mysqlc/mysqlc_databasemetadata.cxx
+++ b/connectivity/source/drivers/mysqlc/mysqlc_databasemetadata.cxx
@@ -286,7 +286,7 @@ sal_Bool SAL_CALL ODatabaseMetaData::supportsMultipleResultSets() { return false
 
 sal_Bool SAL_CALL ODatabaseMetaData::supportsLikeEscapeClause() { return true; }
 
-sal_Bool SAL_CALL ODatabaseMetaData::supportsOrderByUnrelated() { return false; }
+sal_Bool SAL_CALL ODatabaseMetaData::supportsOrderByUnrelated() { return true; }
 
 sal_Bool SAL_CALL ODatabaseMetaData::supportsUnion()
 {
commit 72431c4ce465a5772695a52f305e86ebb12155cd
Author:     Stephan Bergmann <sbergman at redhat.com>
AuthorDate: Fri Dec 6 17:04:11 2019 +0100
Commit:     Andras Timar <andras.timar at collabora.com>
CommitDate: Wed May 13 10:56:15 2020 +0200

    Incomplete OpAverage, OpCount must not be used in dynamic_cast
    
    ...even in template code (which compilers often only analyze late during
    compilation, but which Clang trunk now apparently processes more aggressively,
    presumably since <https://github.com/llvm/llvm-project/commit/
    878a24ee244a24c39d1c57e9af2e88c621f7cce9> "Reapply 'Fix crash on switch
    conditions of non-integer types in templates'", emitting errors about incomplete
    types)
    
    Change-Id: I851d266007f72cc4063f299412eadacbc6084f70
    Reviewed-on: https://gerrit.libreoffice.org/84657
    Tested-by: Jenkins
    Reviewed-by: Stephan Bergmann <sbergman at redhat.com>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/93699
    Reviewed-by: Michael Weghorn <m.weghorn at posteo.de>

diff --git a/sc/source/core/opencl/formulagroupcl.cxx b/sc/source/core/opencl/formulagroupcl.cxx
index 233ebaea14a3..27f3d2674ab7 100644
--- a/sc/source/core/opencl/formulagroupcl.cxx
+++ b/sc/source/core/opencl/formulagroupcl.cxx
@@ -1032,9 +1032,6 @@ protected:
 /// Handling a Double Vector that is used as a sliding window input
 /// to either a sliding window average or sum-of-products
 /// Generate a sequential loop for reductions
-class OpAverage;
-class OpCount;
-
 template<class Base>
 class DynamicKernelSlidingArgument : public Base
 {
@@ -1345,185 +1342,7 @@ public:
     }
 
     /// Emit the definition for the auxiliary reduction kernel
-    virtual void GenSlidingWindowFunction( std::stringstream& ss )
-    {
-        if (!dynamic_cast<OpAverage*>(mpCodeGen.get()))
-        {
-            std::string name = Base::GetName();
-            ss << "__kernel void " << name;
-            ss << "_reduction(__global double* A, "
-                "__global double *result,int arrayLength,int windowSize){\n";
-            ss << "    double tmp, current_result =" <<
-                mpCodeGen->GetBottom();
-            ss << ";\n";
-            ss << "    int writePos = get_group_id(1);\n";
-            ss << "    int lidx = get_local_id(0);\n";
-            ss << "    __local double shm_buf[256];\n";
-            if (mpDVR->IsStartFixed())
-                ss << "    int offset = 0;\n";
-            else // if (!mpDVR->IsStartFixed())
-                ss << "    int offset = get_group_id(1);\n";
-            if (mpDVR->IsStartFixed() && mpDVR->IsEndFixed())
-                ss << "    int end = windowSize;\n";
-            else if (!mpDVR->IsStartFixed() && !mpDVR->IsEndFixed())
-                ss << "    int end = offset + windowSize;\n";
-            else if (mpDVR->IsStartFixed() && !mpDVR->IsEndFixed())
-                ss << "    int end = windowSize + get_group_id(1);\n";
-            else if (!mpDVR->IsStartFixed() && mpDVR->IsEndFixed())
-                ss << "    int end = windowSize;\n";
-            ss << "    end = min(end, arrayLength);\n";
-
-            ss << "    barrier(CLK_LOCAL_MEM_FENCE);\n";
-            ss << "    int loop = arrayLength/512 + 1;\n";
-            ss << "    for (int l=0; l<loop; l++){\n";
-            ss << "    tmp = " << mpCodeGen->GetBottom() << ";\n";
-            ss << "    int loopOffset = l*512;\n";
-            ss << "    if((loopOffset + lidx + offset + 256) < end) {\n";
-            ss << "        tmp = legalize(" << mpCodeGen->Gen2(
-                "A[loopOffset + lidx + offset]", "tmp") << ", tmp);\n";
-            ss << "        tmp = legalize(" << mpCodeGen->Gen2(
-                "A[loopOffset + lidx + offset + 256]", "tmp") << ", tmp);\n";
-            ss << "    } else if ((loopOffset + lidx + offset) < end)\n";
-            ss << "        tmp = legalize(" << mpCodeGen->Gen2(
-                "A[loopOffset + lidx + offset]", "tmp") << ", tmp);\n";
-            ss << "    shm_buf[lidx] = tmp;\n";
-            ss << "    barrier(CLK_LOCAL_MEM_FENCE);\n";
-            ss << "    for (int i = 128; i >0; i/=2) {\n";
-            ss << "        if (lidx < i)\n";
-            ss << "            shm_buf[lidx] = ";
-            // Special case count
-            if (dynamic_cast<OpCount*>(mpCodeGen.get()))
-                ss << "shm_buf[lidx] + shm_buf[lidx + i];\n";
-            else
-                ss << mpCodeGen->Gen2("shm_buf[lidx]", "shm_buf[lidx + i]") << ";\n";
-            ss << "        barrier(CLK_LOCAL_MEM_FENCE);\n";
-            ss << "    }\n";
-            ss << "        if (lidx == 0)\n";
-            ss << "            current_result =";
-            if (dynamic_cast<OpCount*>(mpCodeGen.get()))
-                ss << "current_result + shm_buf[0]";
-            else
-                ss << mpCodeGen->Gen2("current_result", "shm_buf[0]");
-            ss << ";\n";
-            ss << "        barrier(CLK_LOCAL_MEM_FENCE);\n";
-            ss << "    }\n";
-            ss << "    if (lidx == 0)\n";
-            ss << "        result[writePos] = current_result;\n";
-            ss << "}\n";
-        }
-        else
-        {
-            std::string name = Base::GetName();
-            /*sum reduction*/
-            ss << "__kernel void " << name << "_sum";
-            ss << "_reduction(__global double* A, "
-                "__global double *result,int arrayLength,int windowSize){\n";
-            ss << "    double tmp, current_result =" <<
-                mpCodeGen->GetBottom();
-            ss << ";\n";
-            ss << "    int writePos = get_group_id(1);\n";
-            ss << "    int lidx = get_local_id(0);\n";
-            ss << "    __local double shm_buf[256];\n";
-            if (mpDVR->IsStartFixed())
-                ss << "    int offset = 0;\n";
-            else // if (!mpDVR->IsStartFixed())
-                ss << "    int offset = get_group_id(1);\n";
-            if (mpDVR->IsStartFixed() && mpDVR->IsEndFixed())
-                ss << "    int end = windowSize;\n";
-            else if (!mpDVR->IsStartFixed() && !mpDVR->IsEndFixed())
-                ss << "    int end = offset + windowSize;\n";
-            else if (mpDVR->IsStartFixed() && !mpDVR->IsEndFixed())
-                ss << "    int end = windowSize + get_group_id(1);\n";
-            else if (!mpDVR->IsStartFixed() && mpDVR->IsEndFixed())
-                ss << "    int end = windowSize;\n";
-            ss << "    end = min(end, arrayLength);\n";
-            ss << "    barrier(CLK_LOCAL_MEM_FENCE);\n";
-            ss << "    int loop = arrayLength/512 + 1;\n";
-            ss << "    for (int l=0; l<loop; l++){\n";
-            ss << "    tmp = " << mpCodeGen->GetBottom() << ";\n";
-            ss << "    int loopOffset = l*512;\n";
-            ss << "    if((loopOffset + lidx + offset + 256) < end) {\n";
-            ss << "        tmp = legalize(";
-            ss << "(A[loopOffset + lidx + offset]+ tmp)";
-            ss << ", tmp);\n";
-            ss << "        tmp = legalize((A[loopOffset + lidx + offset + 256]+ tmp)";
-            ss << ", tmp);\n";
-            ss << "    } else if ((loopOffset + lidx + offset) < end)\n";
-            ss << "        tmp = legalize((A[loopOffset + lidx + offset] + tmp)";
-            ss << ", tmp);\n";
-            ss << "    shm_buf[lidx] = tmp;\n";
-            ss << "    barrier(CLK_LOCAL_MEM_FENCE);\n";
-            ss << "    for (int i = 128; i >0; i/=2) {\n";
-            ss << "        if (lidx < i)\n";
-            ss << "            shm_buf[lidx] = ";
-            ss << "shm_buf[lidx] + shm_buf[lidx + i];\n";
-            ss << "        barrier(CLK_LOCAL_MEM_FENCE);\n";
-            ss << "    }\n";
-            ss << "        if (lidx == 0)\n";
-            ss << "            current_result =";
-            ss << "current_result + shm_buf[0]";
-            ss << ";\n";
-            ss << "        barrier(CLK_LOCAL_MEM_FENCE);\n";
-            ss << "    }\n";
-            ss << "    if (lidx == 0)\n";
-            ss << "        result[writePos] = current_result;\n";
-            ss << "}\n";
-            /*count reduction*/
-            ss << "__kernel void " << name << "_count";
-            ss << "_reduction(__global double* A, "
-                "__global double *result,int arrayLength,int windowSize){\n";
-            ss << "    double tmp, current_result =" <<
-                mpCodeGen->GetBottom();
-            ss << ";\n";
-            ss << "    int writePos = get_group_id(1);\n";
-            ss << "    int lidx = get_local_id(0);\n";
-            ss << "    __local double shm_buf[256];\n";
-            if (mpDVR->IsStartFixed())
-                ss << "    int offset = 0;\n";
-            else // if (!mpDVR->IsStartFixed())
-                ss << "    int offset = get_group_id(1);\n";
-            if (mpDVR->IsStartFixed() && mpDVR->IsEndFixed())
-                ss << "    int end = windowSize;\n";
-            else if (!mpDVR->IsStartFixed() && !mpDVR->IsEndFixed())
-                ss << "    int end = offset + windowSize;\n";
-            else if (mpDVR->IsStartFixed() && !mpDVR->IsEndFixed())
-                ss << "    int end = windowSize + get_group_id(1);\n";
-            else if (!mpDVR->IsStartFixed() && mpDVR->IsEndFixed())
-                ss << "    int end = windowSize;\n";
-            ss << "    end = min(end, arrayLength);\n";
-            ss << "    barrier(CLK_LOCAL_MEM_FENCE);\n";
-            ss << "    int loop = arrayLength/512 + 1;\n";
-            ss << "    for (int l=0; l<loop; l++){\n";
-            ss << "    tmp = " << mpCodeGen->GetBottom() << ";\n";
-            ss << "    int loopOffset = l*512;\n";
-            ss << "    if((loopOffset + lidx + offset + 256) < end) {\n";
-            ss << "        tmp = legalize((isnan(A[loopOffset + lidx + offset])?tmp:tmp+1.0)";
-            ss << ", tmp);\n";
-            ss << "        tmp = legalize((isnan(A[loopOffset + lidx + offset+256])?tmp:tmp+1.0)";
-            ss << ", tmp);\n";
-            ss << "    } else if ((loopOffset + lidx + offset) < end)\n";
-            ss << "        tmp = legalize((isnan(A[loopOffset + lidx + offset])?tmp:tmp+1.0)";
-            ss << ", tmp);\n";
-            ss << "    shm_buf[lidx] = tmp;\n";
-            ss << "    barrier(CLK_LOCAL_MEM_FENCE);\n";
-            ss << "    for (int i = 128; i >0; i/=2) {\n";
-            ss << "        if (lidx < i)\n";
-            ss << "            shm_buf[lidx] = ";
-            ss << "shm_buf[lidx] + shm_buf[lidx + i];\n";
-            ss << "        barrier(CLK_LOCAL_MEM_FENCE);\n";
-            ss << "    }\n";
-            ss << "        if (lidx == 0)\n";
-            ss << "            current_result =";
-            ss << "current_result + shm_buf[0];";
-            ss << ";\n";
-            ss << "        barrier(CLK_LOCAL_MEM_FENCE);\n";
-            ss << "    }\n";
-            ss << "    if (lidx == 0)\n";
-            ss << "        result[writePos] = current_result;\n";
-            ss << "}\n";
-        }
-
-    }
+    virtual void GenSlidingWindowFunction( std::stringstream& ss );
 
     virtual std::string GenSlidingWindowDeclRef( bool ) const
     {
@@ -1537,194 +1356,9 @@ public:
 
     /// Controls how the elements in the DoubleVectorRef are traversed
     size_t GenReductionLoopHeader(
-        std::stringstream& ss, int nResultSize, bool& needBody )
-    {
-        assert(mpDVR);
-        size_t nCurWindowSize = mpDVR->GetRefRowSize();
-        std::string temp = Base::GetName() + "[gid0]";
-        ss << "tmp = ";
-        // Special case count
-        if (dynamic_cast<OpAverage*>(mpCodeGen.get()))
-        {
-            ss << mpCodeGen->Gen2(temp, "tmp") << ";\n";
-            ss << "nCount = nCount-1;\n";
-            ss << "nCount = nCount +"; /*re-assign nCount from count reduction*/
-            ss << Base::GetName() << "[gid0+" << nResultSize << "]" << ";\n";
-        }
-        else if (dynamic_cast<OpCount*>(mpCodeGen.get()))
-            ss << temp << "+ tmp";
-        else
-            ss << mpCodeGen->Gen2(temp, "tmp");
-        ss << ";\n\t";
-        needBody = false;
-        return nCurWindowSize;
-    }
+        std::stringstream& ss, int nResultSize, bool& needBody );
 
-    virtual size_t Marshal( cl_kernel k, int argno, int w, cl_program mpProgram )
-    {
-        assert(Base::mpClmem == nullptr);
-
-        openclwrapper::KernelEnv kEnv;
-        openclwrapper::setKernelEnv(&kEnv);
-        cl_int err;
-        size_t nInput = mpDVR->GetArrayLength();
-        size_t nCurWindowSize = mpDVR->GetRefRowSize();
-        // create clmem buffer
-        if (mpDVR->GetArrays()[Base::mnIndex].mpNumericArray == nullptr)
-            throw Unhandled(__FILE__, __LINE__);
-        double* pHostBuffer = const_cast<double*>(
-            mpDVR->GetArrays()[Base::mnIndex].mpNumericArray);
-        size_t szHostBuffer = nInput * sizeof(double);
-        Base::mpClmem = clCreateBuffer(kEnv.mpkContext,
-            cl_mem_flags(CL_MEM_READ_ONLY) | CL_MEM_USE_HOST_PTR,
-            szHostBuffer,
-            pHostBuffer, &err);
-        SAL_INFO("sc.opencl", "Created buffer " << Base::mpClmem << " size " << nInput << "*" << sizeof(double) << "=" << szHostBuffer << " using host buffer " << pHostBuffer);
-
-        mpClmem2 = clCreateBuffer(kEnv.mpkContext,
-            CL_MEM_READ_WRITE | CL_MEM_ALLOC_HOST_PTR,
-            sizeof(double) * w, nullptr, nullptr);
-        if (CL_SUCCESS != err)
-            throw OpenCLError("clCreateBuffer", err, __FILE__, __LINE__);
-        SAL_INFO("sc.opencl", "Created buffer " << mpClmem2 << " size " << sizeof(double) << "*" << w << "=" << (sizeof(double)*w));
-
-        // reproduce the reduction function name
-        std::string kernelName;
-        if (!dynamic_cast<OpAverage*>(mpCodeGen.get()))
-            kernelName = Base::GetName() + "_reduction";
-        else
-            kernelName = Base::GetName() + "_sum_reduction";
-        cl_kernel redKernel = clCreateKernel(mpProgram, kernelName.c_str(), &err);
-        if (err != CL_SUCCESS)
-            throw OpenCLError("clCreateKernel", err, __FILE__, __LINE__);
-        SAL_INFO("sc.opencl", "Created kernel " << redKernel << " with name " << kernelName << " in program " << mpProgram);
-
-        // set kernel arg of reduction kernel
-        // TODO(Wei Wei): use unique name for kernel
-        cl_mem buf = Base::GetCLBuffer();
-        SAL_INFO("sc.opencl", "Kernel " << redKernel << " arg " << 0 << ": cl_mem: " << buf);
-        err = clSetKernelArg(redKernel, 0, sizeof(cl_mem),
-            static_cast<void*>(&buf));
-        if (CL_SUCCESS != err)
-            throw OpenCLError("clSetKernelArg", err, __FILE__, __LINE__);
-
-        SAL_INFO("sc.opencl", "Kernel " << redKernel << " arg " << 1 << ": cl_mem: " << mpClmem2);
-        err = clSetKernelArg(redKernel, 1, sizeof(cl_mem), &mpClmem2);
-        if (CL_SUCCESS != err)
-            throw OpenCLError("clSetKernelArg", err, __FILE__, __LINE__);
-
-        SAL_INFO("sc.opencl", "Kernel " << redKernel << " arg " << 2 << ": cl_int: " << nInput);
-        err = clSetKernelArg(redKernel, 2, sizeof(cl_int), static_cast<void*>(&nInput));
-        if (CL_SUCCESS != err)
-            throw OpenCLError("clSetKernelArg", err, __FILE__, __LINE__);
-
-        SAL_INFO("sc.opencl", "Kernel " << redKernel << " arg " << 3 << ": cl_int: " << nCurWindowSize);
-        err = clSetKernelArg(redKernel, 3, sizeof(cl_int), static_cast<void*>(&nCurWindowSize));
-        if (CL_SUCCESS != err)
-            throw OpenCLError("clSetKernelArg", err, __FILE__, __LINE__);
-
-        // set work group size and execute
-        size_t global_work_size[] = { 256, static_cast<size_t>(w) };
-        size_t const local_work_size[] = { 256, 1 };
-        SAL_INFO("sc.opencl", "Enqueuing kernel " << redKernel);
-        err = clEnqueueNDRangeKernel(kEnv.mpkCmdQueue, redKernel, 2, nullptr,
-            global_work_size, local_work_size, 0, nullptr, nullptr);
-        if (CL_SUCCESS != err)
-            throw OpenCLError("clEnqueueNDRangeKernel", err, __FILE__, __LINE__);
-        err = clFinish(kEnv.mpkCmdQueue);
-        if (CL_SUCCESS != err)
-            throw OpenCLError("clFinish", err, __FILE__, __LINE__);
-        if (dynamic_cast<OpAverage*>(mpCodeGen.get()))
-        {
-            /*average need more reduction kernel for count computing*/
-            std::unique_ptr<double[]> pAllBuffer(new double[2 * w]);
-            double* resbuf = static_cast<double*>(clEnqueueMapBuffer(kEnv.mpkCmdQueue,
-                mpClmem2,
-                CL_TRUE, CL_MAP_READ, 0,
-                sizeof(double) * w, 0, nullptr, nullptr,
-                &err));
-            if (err != CL_SUCCESS)
-                throw OpenCLError("clEnqueueMapBuffer", err, __FILE__, __LINE__);
-
-            for (int i = 0; i < w; i++)
-                pAllBuffer[i] = resbuf[i];
-            err = clEnqueueUnmapMemObject(kEnv.mpkCmdQueue, mpClmem2, resbuf, 0, nullptr, nullptr);
-            if (err != CL_SUCCESS)
-                throw OpenCLError("clEnqueueUnmapMemObject", err, __FILE__, __LINE__);
-
-            kernelName = Base::GetName() + "_count_reduction";
-            redKernel = clCreateKernel(mpProgram, kernelName.c_str(), &err);
-            if (err != CL_SUCCESS)
-                throw OpenCLError("clCreateKernel", err, __FILE__, __LINE__);
-            SAL_INFO("sc.opencl", "Created kernel " << redKernel << " with name " << kernelName << " in program " << mpProgram);
-
-            // set kernel arg of reduction kernel
-            buf = Base::GetCLBuffer();
-            SAL_INFO("sc.opencl", "Kernel " << redKernel << " arg " << 0 << ": cl_mem: " << buf);
-            err = clSetKernelArg(redKernel, 0, sizeof(cl_mem),
-                static_cast<void*>(&buf));
-            if (CL_SUCCESS != err)
-                throw OpenCLError("clSetKernelArg", err, __FILE__, __LINE__);
-
-            SAL_INFO("sc.opencl", "Kernel " << redKernel << " arg " << 1 << ": cl_mem: " << mpClmem2);
-            err = clSetKernelArg(redKernel, 1, sizeof(cl_mem), &mpClmem2);
-            if (CL_SUCCESS != err)
-                throw OpenCLError("clSetKernelArg", err, __FILE__, __LINE__);
-
-            SAL_INFO("sc.opencl", "Kernel " << redKernel << " arg " << 2 << ": cl_int: " << nInput);
-            err = clSetKernelArg(redKernel, 2, sizeof(cl_int), static_cast<void*>(&nInput));
-            if (CL_SUCCESS != err)
-                throw OpenCLError("clSetKernelArg", err, __FILE__, __LINE__);
-
-            SAL_INFO("sc.opencl", "Kernel " << redKernel << " arg " << 3 << ": cl_int: " << nCurWindowSize);
-            err = clSetKernelArg(redKernel, 3, sizeof(cl_int), static_cast<void*>(&nCurWindowSize));
-            if (CL_SUCCESS != err)
-                throw OpenCLError("clSetKernelArg", err, __FILE__, __LINE__);
-
-            // set work group size and execute
-            size_t global_work_size1[] = { 256, static_cast<size_t>(w) };
-            size_t const local_work_size1[] = { 256, 1 };
-            SAL_INFO("sc.opencl", "Enqueuing kernel " << redKernel);
-            err = clEnqueueNDRangeKernel(kEnv.mpkCmdQueue, redKernel, 2, nullptr,
-                global_work_size1, local_work_size1, 0, nullptr, nullptr);
-            if (CL_SUCCESS != err)
-                throw OpenCLError("clEnqueueNDRangeKernel", err, __FILE__, __LINE__);
-            err = clFinish(kEnv.mpkCmdQueue);
-            if (CL_SUCCESS != err)
-                throw OpenCLError("clFinish", err, __FILE__, __LINE__);
-            resbuf = static_cast<double*>(clEnqueueMapBuffer(kEnv.mpkCmdQueue,
-                mpClmem2,
-                CL_TRUE, CL_MAP_READ, 0,
-                sizeof(double) * w, 0, nullptr, nullptr,
-                &err));
-            if (err != CL_SUCCESS)
-                throw OpenCLError("clEnqueueMapBuffer", err, __FILE__, __LINE__);
-            for (int i = 0; i < w; i++)
-                pAllBuffer[i + w] = resbuf[i];
-            err = clEnqueueUnmapMemObject(kEnv.mpkCmdQueue, mpClmem2, resbuf, 0, nullptr, nullptr);
-            // FIXME: Is it intentional to not throw an OpenCLError even if the clEnqueueUnmapMemObject() fails?
-            if (CL_SUCCESS != err)
-                SAL_WARN("sc.opencl", "clEnqueueUnmapMemObject failed: " << openclwrapper::errorString(err));
-            if (mpClmem2)
-            {
-                err = clReleaseMemObject(mpClmem2);
-                SAL_WARN_IF(err != CL_SUCCESS, "sc.opencl", "clReleaseMemObject failed: " << openclwrapper::errorString(err));
-                mpClmem2 = nullptr;
-            }
-            mpClmem2 = clCreateBuffer(kEnv.mpkContext,
-                cl_mem_flags(CL_MEM_READ_WRITE) | CL_MEM_COPY_HOST_PTR,
-                w * sizeof(double) * 2, pAllBuffer.get(), &err);
-            if (CL_SUCCESS != err)
-                throw OpenCLError("clCreateBuffer", err, __FILE__, __LINE__);
-            SAL_INFO("sc.opencl", "Created buffer " << mpClmem2 << " size " << w << "*" << sizeof(double) << "=" << (w*sizeof(double)) << " copying host buffer " << pAllBuffer.get());
-        }
-        // set kernel arg
-        SAL_INFO("sc.opencl", "Kernel " << k << " arg " << argno << ": cl_mem: " << mpClmem2);
-        err = clSetKernelArg(k, argno, sizeof(cl_mem), &mpClmem2);
-        if (CL_SUCCESS != err)
-            throw OpenCLError("clSetKernelArg", err, __FILE__, __LINE__);
-        return 1;
-    }
+    virtual size_t Marshal( cl_kernel k, int argno, int w, cl_program mpProgram );
 
     ~ParallelReductionVectorRef()
     {
@@ -2327,6 +1961,379 @@ public:
     virtual std::string BinFuncName() const override { return "fsop"; }
 };
 
+template<class Base>
+void ParallelReductionVectorRef<Base>::GenSlidingWindowFunction( std::stringstream& ss )
+{
+    if (!dynamic_cast<OpAverage*>(mpCodeGen.get()))
+    {
+        std::string name = Base::GetName();
+        ss << "__kernel void " << name;
+        ss << "_reduction(__global double* A, "
+            "__global double *result,int arrayLength,int windowSize){\n";
+        ss << "    double tmp, current_result =" <<
+            mpCodeGen->GetBottom();
+        ss << ";\n";
+        ss << "    int writePos = get_group_id(1);\n";
+        ss << "    int lidx = get_local_id(0);\n";
+        ss << "    __local double shm_buf[256];\n";
+        if (mpDVR->IsStartFixed())
+            ss << "    int offset = 0;\n";
+        else // if (!mpDVR->IsStartFixed())
+            ss << "    int offset = get_group_id(1);\n";
+        if (mpDVR->IsStartFixed() && mpDVR->IsEndFixed())
+            ss << "    int end = windowSize;\n";
+        else if (!mpDVR->IsStartFixed() && !mpDVR->IsEndFixed())
+            ss << "    int end = offset + windowSize;\n";
+        else if (mpDVR->IsStartFixed() && !mpDVR->IsEndFixed())
+            ss << "    int end = windowSize + get_group_id(1);\n";
+        else if (!mpDVR->IsStartFixed() && mpDVR->IsEndFixed())
+            ss << "    int end = windowSize;\n";
+        ss << "    end = min(end, arrayLength);\n";
+
+        ss << "    barrier(CLK_LOCAL_MEM_FENCE);\n";
+        ss << "    int loop = arrayLength/512 + 1;\n";
+        ss << "    for (int l=0; l<loop; l++){\n";
+        ss << "    tmp = " << mpCodeGen->GetBottom() << ";\n";
+        ss << "    int loopOffset = l*512;\n";
+        ss << "    if((loopOffset + lidx + offset + 256) < end) {\n";
+        ss << "        tmp = legalize(" << mpCodeGen->Gen2(
+            "A[loopOffset + lidx + offset]", "tmp") << ", tmp);\n";
+        ss << "        tmp = legalize(" << mpCodeGen->Gen2(
+            "A[loopOffset + lidx + offset + 256]", "tmp") << ", tmp);\n";
+        ss << "    } else if ((loopOffset + lidx + offset) < end)\n";
+        ss << "        tmp = legalize(" << mpCodeGen->Gen2(
+            "A[loopOffset + lidx + offset]", "tmp") << ", tmp);\n";
+        ss << "    shm_buf[lidx] = tmp;\n";
+        ss << "    barrier(CLK_LOCAL_MEM_FENCE);\n";
+        ss << "    for (int i = 128; i >0; i/=2) {\n";
+        ss << "        if (lidx < i)\n";
+        ss << "            shm_buf[lidx] = ";
+        // Special case count
+        if (dynamic_cast<OpCount*>(mpCodeGen.get()))
+            ss << "shm_buf[lidx] + shm_buf[lidx + i];\n";
+        else
+            ss << mpCodeGen->Gen2("shm_buf[lidx]", "shm_buf[lidx + i]") << ";\n";
+        ss << "        barrier(CLK_LOCAL_MEM_FENCE);\n";
+        ss << "    }\n";
+        ss << "        if (lidx == 0)\n";
+        ss << "            current_result =";
+        if (dynamic_cast<OpCount*>(mpCodeGen.get()))
+            ss << "current_result + shm_buf[0]";
+        else
+            ss << mpCodeGen->Gen2("current_result", "shm_buf[0]");
+        ss << ";\n";
+        ss << "        barrier(CLK_LOCAL_MEM_FENCE);\n";
+        ss << "    }\n";
+        ss << "    if (lidx == 0)\n";
+        ss << "        result[writePos] = current_result;\n";
+        ss << "}\n";
+    }
+    else
+    {
+        std::string name = Base::GetName();
+        /*sum reduction*/
+        ss << "__kernel void " << name << "_sum";
+        ss << "_reduction(__global double* A, "
+            "__global double *result,int arrayLength,int windowSize){\n";
+        ss << "    double tmp, current_result =" <<
+            mpCodeGen->GetBottom();
+        ss << ";\n";
+        ss << "    int writePos = get_group_id(1);\n";
+        ss << "    int lidx = get_local_id(0);\n";
+        ss << "    __local double shm_buf[256];\n";
+        if (mpDVR->IsStartFixed())
+            ss << "    int offset = 0;\n";
+        else // if (!mpDVR->IsStartFixed())
+            ss << "    int offset = get_group_id(1);\n";
+        if (mpDVR->IsStartFixed() && mpDVR->IsEndFixed())
+            ss << "    int end = windowSize;\n";
+        else if (!mpDVR->IsStartFixed() && !mpDVR->IsEndFixed())
+            ss << "    int end = offset + windowSize;\n";
+        else if (mpDVR->IsStartFixed() && !mpDVR->IsEndFixed())
+            ss << "    int end = windowSize + get_group_id(1);\n";
+        else if (!mpDVR->IsStartFixed() && mpDVR->IsEndFixed())
+            ss << "    int end = windowSize;\n";
+        ss << "    end = min(end, arrayLength);\n";
+        ss << "    barrier(CLK_LOCAL_MEM_FENCE);\n";
+        ss << "    int loop = arrayLength/512 + 1;\n";
+        ss << "    for (int l=0; l<loop; l++){\n";
+        ss << "    tmp = " << mpCodeGen->GetBottom() << ";\n";
+        ss << "    int loopOffset = l*512;\n";
+        ss << "    if((loopOffset + lidx + offset + 256) < end) {\n";
+        ss << "        tmp = legalize(";
+        ss << "(A[loopOffset + lidx + offset]+ tmp)";
+        ss << ", tmp);\n";
+        ss << "        tmp = legalize((A[loopOffset + lidx + offset + 256]+ tmp)";
+        ss << ", tmp);\n";
+        ss << "    } else if ((loopOffset + lidx + offset) < end)\n";
+        ss << "        tmp = legalize((A[loopOffset + lidx + offset] + tmp)";
+        ss << ", tmp);\n";
+        ss << "    shm_buf[lidx] = tmp;\n";
+        ss << "    barrier(CLK_LOCAL_MEM_FENCE);\n";
+        ss << "    for (int i = 128; i >0; i/=2) {\n";
+        ss << "        if (lidx < i)\n";
+        ss << "            shm_buf[lidx] = ";
+        ss << "shm_buf[lidx] + shm_buf[lidx + i];\n";
+        ss << "        barrier(CLK_LOCAL_MEM_FENCE);\n";
+        ss << "    }\n";
+        ss << "        if (lidx == 0)\n";
+        ss << "            current_result =";
+        ss << "current_result + shm_buf[0]";
+        ss << ";\n";
+        ss << "        barrier(CLK_LOCAL_MEM_FENCE);\n";
+        ss << "    }\n";
+        ss << "    if (lidx == 0)\n";
+        ss << "        result[writePos] = current_result;\n";
+        ss << "}\n";
+        /*count reduction*/
+        ss << "__kernel void " << name << "_count";
+        ss << "_reduction(__global double* A, "
+            "__global double *result,int arrayLength,int windowSize){\n";
+        ss << "    double tmp, current_result =" <<
+            mpCodeGen->GetBottom();
+        ss << ";\n";
+        ss << "    int writePos = get_group_id(1);\n";
+        ss << "    int lidx = get_local_id(0);\n";
+        ss << "    __local double shm_buf[256];\n";
+        if (mpDVR->IsStartFixed())
+            ss << "    int offset = 0;\n";
+        else // if (!mpDVR->IsStartFixed())
+            ss << "    int offset = get_group_id(1);\n";
+        if (mpDVR->IsStartFixed() && mpDVR->IsEndFixed())
+            ss << "    int end = windowSize;\n";
+        else if (!mpDVR->IsStartFixed() && !mpDVR->IsEndFixed())
+            ss << "    int end = offset + windowSize;\n";
+        else if (mpDVR->IsStartFixed() && !mpDVR->IsEndFixed())
+            ss << "    int end = windowSize + get_group_id(1);\n";
+        else if (!mpDVR->IsStartFixed() && mpDVR->IsEndFixed())
+            ss << "    int end = windowSize;\n";
+        ss << "    end = min(end, arrayLength);\n";
+        ss << "    barrier(CLK_LOCAL_MEM_FENCE);\n";
+        ss << "    int loop = arrayLength/512 + 1;\n";
+        ss << "    for (int l=0; l<loop; l++){\n";
+        ss << "    tmp = " << mpCodeGen->GetBottom() << ";\n";
+        ss << "    int loopOffset = l*512;\n";
+        ss << "    if((loopOffset + lidx + offset + 256) < end) {\n";
+        ss << "        tmp = legalize((isnan(A[loopOffset + lidx + offset])?tmp:tmp+1.0)";
+        ss << ", tmp);\n";
+        ss << "        tmp = legalize((isnan(A[loopOffset + lidx + offset+256])?tmp:tmp+1.0)";
+        ss << ", tmp);\n";
+        ss << "    } else if ((loopOffset + lidx + offset) < end)\n";
+        ss << "        tmp = legalize((isnan(A[loopOffset + lidx + offset])?tmp:tmp+1.0)";
+        ss << ", tmp);\n";
+        ss << "    shm_buf[lidx] = tmp;\n";
+        ss << "    barrier(CLK_LOCAL_MEM_FENCE);\n";
+        ss << "    for (int i = 128; i >0; i/=2) {\n";
+        ss << "        if (lidx < i)\n";
+        ss << "            shm_buf[lidx] = ";
+        ss << "shm_buf[lidx] + shm_buf[lidx + i];\n";
+        ss << "        barrier(CLK_LOCAL_MEM_FENCE);\n";
+        ss << "    }\n";
+        ss << "        if (lidx == 0)\n";
+        ss << "            current_result =";
+        ss << "current_result + shm_buf[0];";
+        ss << ";\n";
+        ss << "        barrier(CLK_LOCAL_MEM_FENCE);\n";
+        ss << "    }\n";
+        ss << "    if (lidx == 0)\n";
+        ss << "        result[writePos] = current_result;\n";
+        ss << "}\n";
+    }
+
+}
+
+template<class Base>
+size_t ParallelReductionVectorRef<Base>::GenReductionLoopHeader(
+    std::stringstream& ss, int nResultSize, bool& needBody )
+{
+    assert(mpDVR);
+    size_t nCurWindowSize = mpDVR->GetRefRowSize();
+    std::string temp = Base::GetName() + "[gid0]";
+    ss << "tmp = ";
+    // Special case count
+    if (dynamic_cast<OpAverage*>(mpCodeGen.get()))
+    {
+        ss << mpCodeGen->Gen2(temp, "tmp") << ";\n";
+        ss << "nCount = nCount-1;\n";
+        ss << "nCount = nCount +"; /*re-assign nCount from count reduction*/
+        ss << Base::GetName() << "[gid0+" << nResultSize << "]" << ";\n";
+    }
+    else if (dynamic_cast<OpCount*>(mpCodeGen.get()))
+        ss << temp << "+ tmp";
+    else
+        ss << mpCodeGen->Gen2(temp, "tmp");
+    ss << ";\n\t";
+    needBody = false;
+    return nCurWindowSize;
+}
+
+template<class Base>
+size_t ParallelReductionVectorRef<Base>::Marshal( cl_kernel k, int argno, int w, cl_program mpProgram )
+{
+    assert(Base::mpClmem == nullptr);
+
+    openclwrapper::KernelEnv kEnv;
+    openclwrapper::setKernelEnv(&kEnv);
+    cl_int err;
+    size_t nInput = mpDVR->GetArrayLength();
+    size_t nCurWindowSize = mpDVR->GetRefRowSize();
+    // create clmem buffer
+    if (mpDVR->GetArrays()[Base::mnIndex].mpNumericArray == nullptr)
+        throw Unhandled(__FILE__, __LINE__);
+    double* pHostBuffer = const_cast<double*>(
+        mpDVR->GetArrays()[Base::mnIndex].mpNumericArray);
+    size_t szHostBuffer = nInput * sizeof(double);
+    Base::mpClmem = clCreateBuffer(kEnv.mpkContext,
+        cl_mem_flags(CL_MEM_READ_ONLY) | CL_MEM_USE_HOST_PTR,
+        szHostBuffer,
+        pHostBuffer, &err);
+    SAL_INFO("sc.opencl", "Created buffer " << Base::mpClmem << " size " << nInput << "*" << sizeof(double) << "=" << szHostBuffer << " using host buffer " << pHostBuffer);
+
+    mpClmem2 = clCreateBuffer(kEnv.mpkContext,
+        CL_MEM_READ_WRITE | CL_MEM_ALLOC_HOST_PTR,
+        sizeof(double) * w, nullptr, nullptr);
+    if (CL_SUCCESS != err)
+        throw OpenCLError("clCreateBuffer", err, __FILE__, __LINE__);
+    SAL_INFO("sc.opencl", "Created buffer " << mpClmem2 << " size " << sizeof(double) << "*" << w << "=" << (sizeof(double)*w));
+
+    // reproduce the reduction function name
+    std::string kernelName;
+    if (!dynamic_cast<OpAverage*>(mpCodeGen.get()))
+        kernelName = Base::GetName() + "_reduction";
+    else
+        kernelName = Base::GetName() + "_sum_reduction";
+    cl_kernel redKernel = clCreateKernel(mpProgram, kernelName.c_str(), &err);
+    if (err != CL_SUCCESS)
+        throw OpenCLError("clCreateKernel", err, __FILE__, __LINE__);
+    SAL_INFO("sc.opencl", "Created kernel " << redKernel << " with name " << kernelName << " in program " << mpProgram);
+
+    // set kernel arg of reduction kernel
+    // TODO(Wei Wei): use unique name for kernel
+    cl_mem buf = Base::GetCLBuffer();
+    SAL_INFO("sc.opencl", "Kernel " << redKernel << " arg " << 0 << ": cl_mem: " << buf);
+    err = clSetKernelArg(redKernel, 0, sizeof(cl_mem),
+        static_cast<void*>(&buf));
+    if (CL_SUCCESS != err)
+        throw OpenCLError("clSetKernelArg", err, __FILE__, __LINE__);
+
+    SAL_INFO("sc.opencl", "Kernel " << redKernel << " arg " << 1 << ": cl_mem: " << mpClmem2);
+    err = clSetKernelArg(redKernel, 1, sizeof(cl_mem), &mpClmem2);
+    if (CL_SUCCESS != err)
+        throw OpenCLError("clSetKernelArg", err, __FILE__, __LINE__);
+
+    SAL_INFO("sc.opencl", "Kernel " << redKernel << " arg " << 2 << ": cl_int: " << nInput);
+    err = clSetKernelArg(redKernel, 2, sizeof(cl_int), static_cast<void*>(&nInput));
+    if (CL_SUCCESS != err)
+        throw OpenCLError("clSetKernelArg", err, __FILE__, __LINE__);
+
+    SAL_INFO("sc.opencl", "Kernel " << redKernel << " arg " << 3 << ": cl_int: " << nCurWindowSize);
+    err = clSetKernelArg(redKernel, 3, sizeof(cl_int), static_cast<void*>(&nCurWindowSize));
+    if (CL_SUCCESS != err)
+        throw OpenCLError("clSetKernelArg", err, __FILE__, __LINE__);
+
+    // set work group size and execute
+    size_t global_work_size[] = { 256, static_cast<size_t>(w) };
+    size_t const local_work_size[] = { 256, 1 };
+    SAL_INFO("sc.opencl", "Enqueuing kernel " << redKernel);
+    err = clEnqueueNDRangeKernel(kEnv.mpkCmdQueue, redKernel, 2, nullptr,
+        global_work_size, local_work_size, 0, nullptr, nullptr);
+    if (CL_SUCCESS != err)
+        throw OpenCLError("clEnqueueNDRangeKernel", err, __FILE__, __LINE__);
+    err = clFinish(kEnv.mpkCmdQueue);
+    if (CL_SUCCESS != err)
+        throw OpenCLError("clFinish", err, __FILE__, __LINE__);
+    if (dynamic_cast<OpAverage*>(mpCodeGen.get()))
+    {
+        /*average need more reduction kernel for count computing*/
+        std::unique_ptr<double[]> pAllBuffer(new double[2 * w]);
+        double* resbuf = static_cast<double*>(clEnqueueMapBuffer(kEnv.mpkCmdQueue,
+            mpClmem2,
+            CL_TRUE, CL_MAP_READ, 0,
+            sizeof(double) * w, 0, nullptr, nullptr,
+            &err));
+        if (err != CL_SUCCESS)
+            throw OpenCLError("clEnqueueMapBuffer", err, __FILE__, __LINE__);
+
+        for (int i = 0; i < w; i++)
+            pAllBuffer[i] = resbuf[i];
+        err = clEnqueueUnmapMemObject(kEnv.mpkCmdQueue, mpClmem2, resbuf, 0, nullptr, nullptr);
+        if (err != CL_SUCCESS)
+            throw OpenCLError("clEnqueueUnmapMemObject", err, __FILE__, __LINE__);
+
+        kernelName = Base::GetName() + "_count_reduction";
+        redKernel = clCreateKernel(mpProgram, kernelName.c_str(), &err);
+        if (err != CL_SUCCESS)
+            throw OpenCLError("clCreateKernel", err, __FILE__, __LINE__);
+        SAL_INFO("sc.opencl", "Created kernel " << redKernel << " with name " << kernelName << " in program " << mpProgram);
+
+        // set kernel arg of reduction kernel
+        buf = Base::GetCLBuffer();
+        SAL_INFO("sc.opencl", "Kernel " << redKernel << " arg " << 0 << ": cl_mem: " << buf);
+        err = clSetKernelArg(redKernel, 0, sizeof(cl_mem),
+            static_cast<void*>(&buf));
+        if (CL_SUCCESS != err)
+            throw OpenCLError("clSetKernelArg", err, __FILE__, __LINE__);
+
+        SAL_INFO("sc.opencl", "Kernel " << redKernel << " arg " << 1 << ": cl_mem: " << mpClmem2);
+        err = clSetKernelArg(redKernel, 1, sizeof(cl_mem), &mpClmem2);
+        if (CL_SUCCESS != err)
+            throw OpenCLError("clSetKernelArg", err, __FILE__, __LINE__);
+
+        SAL_INFO("sc.opencl", "Kernel " << redKernel << " arg " << 2 << ": cl_int: " << nInput);
+        err = clSetKernelArg(redKernel, 2, sizeof(cl_int), static_cast<void*>(&nInput));
+        if (CL_SUCCESS != err)
+            throw OpenCLError("clSetKernelArg", err, __FILE__, __LINE__);
+
+        SAL_INFO("sc.opencl", "Kernel " << redKernel << " arg " << 3 << ": cl_int: " << nCurWindowSize);
+        err = clSetKernelArg(redKernel, 3, sizeof(cl_int), static_cast<void*>(&nCurWindowSize));
+        if (CL_SUCCESS != err)
+            throw OpenCLError("clSetKernelArg", err, __FILE__, __LINE__);
+
+        // set work group size and execute
+        size_t global_work_size1[] = { 256, static_cast<size_t>(w) };
+        size_t const local_work_size1[] = { 256, 1 };
+        SAL_INFO("sc.opencl", "Enqueuing kernel " << redKernel);
+        err = clEnqueueNDRangeKernel(kEnv.mpkCmdQueue, redKernel, 2, nullptr,
+            global_work_size1, local_work_size1, 0, nullptr, nullptr);
+        if (CL_SUCCESS != err)
+            throw OpenCLError("clEnqueueNDRangeKernel", err, __FILE__, __LINE__);
+        err = clFinish(kEnv.mpkCmdQueue);
+        if (CL_SUCCESS != err)
+            throw OpenCLError("clFinish", err, __FILE__, __LINE__);
+        resbuf = static_cast<double*>(clEnqueueMapBuffer(kEnv.mpkCmdQueue,
+            mpClmem2,
+            CL_TRUE, CL_MAP_READ, 0,
+            sizeof(double) * w, 0, nullptr, nullptr,
+            &err));
+        if (err != CL_SUCCESS)
+            throw OpenCLError("clEnqueueMapBuffer", err, __FILE__, __LINE__);
+        for (int i = 0; i < w; i++)
+            pAllBuffer[i + w] = resbuf[i];
+        err = clEnqueueUnmapMemObject(kEnv.mpkCmdQueue, mpClmem2, resbuf, 0, nullptr, nullptr);
+        // FIXME: Is it intentional to not throw an OpenCLError even if the clEnqueueUnmapMemObject() fails?
+        if (CL_SUCCESS != err)
+            SAL_WARN("sc.opencl", "clEnqueueUnmapMemObject failed: " << openclwrapper::errorString(err));
+        if (mpClmem2)
+        {
+            err = clReleaseMemObject(mpClmem2);
+            SAL_WARN_IF(err != CL_SUCCESS, "sc.opencl", "clReleaseMemObject failed: " << openclwrapper::errorString(err));
+            mpClmem2 = nullptr;
+        }
+        mpClmem2 = clCreateBuffer(kEnv.mpkContext,
+            cl_mem_flags(CL_MEM_READ_WRITE) | CL_MEM_COPY_HOST_PTR,
+            w * sizeof(double) * 2, pAllBuffer.get(), &err);
+        if (CL_SUCCESS != err)
+            throw OpenCLError("clCreateBuffer", err, __FILE__, __LINE__);
+        SAL_INFO("sc.opencl", "Created buffer " << mpClmem2 << " size " << w << "*" << sizeof(double) << "=" << (w*sizeof(double)) << " copying host buffer " << pAllBuffer.get());
+    }
+    // set kernel arg
+    SAL_INFO("sc.opencl", "Kernel " << k << " arg " << argno << ": cl_mem: " << mpClmem2);
+    err = clSetKernelArg(k, argno, sizeof(cl_mem), &mpClmem2);
+    if (CL_SUCCESS != err)
+        throw OpenCLError("clSetKernelArg", err, __FILE__, __LINE__);
+    return 1;
+}
+
 struct SumIfsArgs
 {
     explicit SumIfsArgs(cl_mem x) : mCLMem(x), mConst(0.0) { }
commit 2722860cb3b6c858e38a295a0f323ec435af6231
Author:     Stephan Bergmann <sbergman at redhat.com>
AuthorDate: Mon Nov 25 17:01:03 2019 +0100
Commit:     Andras Timar <andras.timar at collabora.com>
CommitDate: Wed May 13 10:56:15 2020 +0200

    external/mdds: -Werror,-Wdeprecated-copy
    
    > In file included from sc/source/core/data/cellvalues.cxx:12:
    > In file included from sc/inc/column.hxx:28:
    > In file included from sc/inc/mtvelements.hxx:30:
    > In file included from workdir/UnpackedTarball/mdds/include/mdds/multi_type_vector.hpp:33:
    > workdir/UnpackedTarball/mdds/include/mdds/multi_type_vector_itr.hpp:74:9: error: definition of implicit copy assignment operator for 'private_data' is deprecated because it has a user-declared copy constructor [-Werror,-Wdeprecated-copy]
    >         private_data(const private_data& other) :
    >         ^
    > workdir/UnpackedTarball/mdds/include/mdds/multi_type_vector_itr.hpp:44:8: note: in implicit copy assignment operator for 'mdds::detail::mtv::iterator_value_node<unsigned long, mdds::mtv::base_element_block>::private_data' first required here
    > struct iterator_value_node
    >        ^
    > workdir/UnpackedTarball/mdds/include/mdds/multi_type_vector_itr.hpp:219:20: note: in implicit copy assignment operator for 'mdds::detail::mtv::iterator_value_node<unsigned long, mdds::mtv::base_element_block>' first required here
    >         m_cur_node = other.m_cur_node;
    >                    ^
    > workdir/UnpackedTarball/mdds/include/mdds/multi_type_vector_itr.hpp:238:7: note: in instantiation of member function 'mdds::detail::mtv::iterator_common_base<mdds::multi_type_vector<mdds::mtv::custom_block_func3<mdds::mtv::default_element_block<52, svl::SharedString>, mdds::mtv::noncopyable_managed_element_block<53, EditTextObject>, mdds::mtv::noncopyable_managed_element_block<54, ScFormulaCell> >, sc::CellStoreEvent>::iterator_trait>::operator=' requested here
    > class iterator_base : public iterator_common_base<_Trait>
    >       ^
    
    with recent Clang 10 trunk, similar to
    <https://gerrit.libreoffice.org/#/c/83698/> "Remove some redundantly
    user-declared copy ctors and assignment ops"
    
    Change-Id: I156674bad367ca68404c3c75d61ec72b401c6305
    Reviewed-on: https://gerrit.libreoffice.org/83700
    Tested-by: Jenkins
    Reviewed-by: Stephan Bergmann <sbergman at redhat.com>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/93695
    Reviewed-by: Michael Weghorn <m.weghorn at posteo.de>

diff --git a/external/mdds/UnpackedTarball_mdds.mk b/external/mdds/UnpackedTarball_mdds.mk
index c015f4c13f5a..c5ca78bd368c 100644
--- a/external/mdds/UnpackedTarball_mdds.mk
+++ b/external/mdds/UnpackedTarball_mdds.mk
@@ -14,6 +14,7 @@ $(eval $(call gb_UnpackedTarball_set_tarball,mdds,$(MDDS_TARBALL)))
 $(eval $(call gb_UnpackedTarball_set_patchlevel,mdds,0))
 
 $(eval $(call gb_UnpackedTarball_add_patches,mdds,\
+    external/mdds/Wdeprecated-copy.patch \
 ))
 
 # vim: set noet sw=4 ts=4:
diff --git a/external/mdds/Wdeprecated-copy.patch b/external/mdds/Wdeprecated-copy.patch
new file mode 100644
index 000000000000..edcb2ddaa9ec
--- /dev/null
+++ b/external/mdds/Wdeprecated-copy.patch
@@ -0,0 +1,11 @@
+--- include/mdds/multi_type_vector_itr.hpp
++++ include/mdds/multi_type_vector_itr.hpp
+@@ -71,8 +71,6 @@
+         private_data() : block_index(0) {}
+         private_data(size_type _block_index) :
+             block_index(_block_index) {}
+-        private_data(const private_data& other) :
+-            block_index(other.block_index) {}
+ 
+         void swap(private_data& other)
+         {
commit d994a17ffc7466d0b992c17965527f28ef4da782
Author:     Stephan Bergmann <sbergman at redhat.com>
AuthorDate: Tue Nov 19 16:32:49 2019 +0100
Commit:     Andras Timar <andras.timar at collabora.com>
CommitDate: Wed May 13 10:56:14 2020 +0200

    Extend loplugin:external to warn about classes
    
    Just for a single file in this change, to make another cherry-picked
    fix to it apply cleanly.
    
    Change-Id: Ic04ba454102753d1c8958597af293aadfab6280a
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/93698
    Tested-by: Jenkins
    Reviewed-by: Michael Weghorn <m.weghorn at posteo.de>

diff --git a/sc/source/core/opencl/formulagroupcl.cxx b/sc/source/core/opencl/formulagroupcl.cxx
index cb1d01361fde..233ebaea14a3 100644
--- a/sc/source/core/opencl/formulagroupcl.cxx
+++ b/sc/source/core/opencl/formulagroupcl.cxx
@@ -345,6 +345,8 @@ size_t VectorRef::Marshal( cl_kernel k, int argno, int, cl_program )
 /// automatically disables use of OpenCL for a formula group. If at some point there are resources
 /// to drain the OpenCL swamp, this should go away.
 
+namespace {
+
 class ConstStringArgument : public DynamicKernelArgument
 {
 public:
@@ -875,6 +877,8 @@ public:
     virtual size_t Marshal( cl_kernel, int, int, cl_program ) override;
 };
 
+}
+
 /// Marshal a string vector reference
 size_t DynamicKernelStringArgument::Marshal( cl_kernel k, int argno, int, cl_program )
 {
@@ -964,6 +968,8 @@ size_t DynamicKernelStringArgument::Marshal( cl_kernel k, int argno, int, cl_pro
     return 1;
 }
 
+namespace {
+
 /// A mixed string/numeric vector
 class DynamicKernelMixedArgument : public VectorRef
 {
@@ -1304,6 +1310,8 @@ private:
     std::vector<DynamicKernelArgumentRef> mParams;
 };
 
+}
+
 void SymbolTable::Marshal( cl_kernel k, int nVectorWidth, cl_program pProgram )
 {
     int i = 1; //The first argument is reserved for results
@@ -1313,6 +1321,8 @@ void SymbolTable::Marshal( cl_kernel k, int nVectorWidth, cl_program pProgram )
     }
 }
 
+namespace {
+
 /// Handling a Double Vector that is used as a sliding window input
 /// Performs parallel reduction based on given operator
 template<class Base>
@@ -2316,7 +2326,7 @@ public:
     }
     virtual std::string BinFuncName() const override { return "fsop"; }
 };
-namespace {
+
 struct SumIfsArgs
 {
     explicit SumIfsArgs(cl_mem x) : mCLMem(x), mConst(0.0) { }
@@ -2324,7 +2334,6 @@ struct SumIfsArgs
     cl_mem mCLMem;
     double mConst;
 };
-}
 
 /// Helper functions that have multiple buffers
 class DynamicKernelSoPArguments : public DynamicKernelArgument
@@ -2619,6 +2628,8 @@ private:
     cl_mem mpClmem2;
 };
 
+}
+
 static DynamicKernelArgumentRef SoPHelper( const ScCalcConfig& config,
     const std::string& ts, const FormulaTreeNodeRef& ft, SlidingFunctionBase* pCodeGen,
     int nResultSize )
@@ -3793,6 +3804,8 @@ DynamicKernelSoPArguments::DynamicKernelSoPArguments(const ScCalcConfig& config,
     }
 }
 
+namespace {
+
 class DynamicKernel : public CompiledFormula
 {
 public:
@@ -3833,6 +3846,8 @@ private:
     int const mnResultSize;
 };
 
+}
+
 DynamicKernel::DynamicKernel( const ScCalcConfig& config, const FormulaTreeNodeRef& r, int nResultSize ) :
     mCalcConfig(config),
     mpRoot(r),
commit 0822d9c115143b00f5533a3e7d53cfa9e223b831
Author:     Andrea Gelmini <andrea.gelmini at gelma.net>
AuthorDate: Fri Nov 22 21:16:54 2019 +0100
Commit:     Andras Timar <andras.timar at collabora.com>
CommitDate: Wed May 13 10:56:14 2020 +0200

    Fix typo
    
    Change-Id: Ibf2e90ff53f201d7b1f279c11eb8238eb403c05e
    Reviewed-on: https://gerrit.libreoffice.org/83533
    Tested-by: Jenkins
    Reviewed-by: Julien Nabet <serval2412 at yahoo.fr>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/93697
    Reviewed-by: Michael Weghorn <m.weghorn at posteo.de>

diff --git a/sc/source/core/opencl/formulagroupcl.cxx b/sc/source/core/opencl/formulagroupcl.cxx
index 24815b4937b1..cb1d01361fde 100644
--- a/sc/source/core/opencl/formulagroupcl.cxx
+++ b/sc/source/core/opencl/formulagroupcl.cxx
@@ -1616,7 +1616,7 @@ public:
         // set work group size and execute
         size_t global_work_size[] = { 256, static_cast<size_t>(w) };
         size_t const local_work_size[] = { 256, 1 };
-        SAL_INFO("sc.opencl", "Enqueing kernel " << redKernel);
+        SAL_INFO("sc.opencl", "Enqueuing kernel " << redKernel);
         err = clEnqueueNDRangeKernel(kEnv.mpkCmdQueue, redKernel, 2, nullptr,
             global_work_size, local_work_size, 0, nullptr, nullptr);
         if (CL_SUCCESS != err)
@@ -1674,7 +1674,7 @@ public:
             // set work group size and execute
             size_t global_work_size1[] = { 256, static_cast<size_t>(w) };
             size_t const local_work_size1[] = { 256, 1 };
-            SAL_INFO("sc.opencl", "Enqueing kernel " << redKernel);
+            SAL_INFO("sc.opencl", "Enqueuing kernel " << redKernel);
             err = clEnqueueNDRangeKernel(kEnv.mpkCmdQueue, redKernel, 2, nullptr,
                 global_work_size1, local_work_size1, 0, nullptr, nullptr);
             if (CL_SUCCESS != err)
@@ -2389,7 +2389,7 @@ public:
             // set work group size and execute
             size_t global_work_size[] = { 256, static_cast<size_t>(nVectorWidth) };
             size_t const local_work_size[] = { 256, 1 };
-            SAL_INFO("sc.opencl", "Enqueing kernel " << redKernel);
+            SAL_INFO("sc.opencl", "Enqueuing kernel " << redKernel);
             err = clEnqueueNDRangeKernel(kEnv.mpkCmdQueue, redKernel, 2, nullptr,
                 global_work_size, local_work_size, 0, nullptr, nullptr);
             if (CL_SUCCESS != err)
@@ -2472,7 +2472,7 @@ public:
                 // set work group size and execute
                 size_t global_work_size[] = { 256, static_cast<size_t>(nVectorWidth) };
                 size_t const local_work_size[] = { 256, 1 };
-                SAL_INFO("sc.opencl", "Enqueing kernel " << redKernel);
+                SAL_INFO("sc.opencl", "Enqueuing kernel " << redKernel);
                 err = clEnqueueNDRangeKernel(kEnv.mpkCmdQueue, redKernel, 2, nullptr,
                     global_work_size, local_work_size, 0, nullptr, nullptr);
                 if (CL_SUCCESS != err)
@@ -4068,7 +4068,7 @@ void DynamicKernel::Launch( size_t nr )
     // The rest of buffers
     mSyms.Marshal(mpKernel, nr, mpProgram);
     size_t global_work_size[] = { nr };
-    SAL_INFO("sc.opencl", "Enqueing kernel " << mpKernel);
+    SAL_INFO("sc.opencl", "Enqueuing kernel " << mpKernel);
     err = clEnqueueNDRangeKernel(kEnv.mpkCmdQueue, mpKernel, 1, nullptr,
         global_work_size, nullptr, 0, nullptr, nullptr);
     if (CL_SUCCESS != err)
commit 1deb690eb3693e98c081953df422d0f7751178ad
Author:     Julien Nabet <serval2412 at yahoo.fr>
AuthorDate: Sun May 10 11:22:06 2020 +0200
Commit:     Andras Timar <andras.timar at collabora.com>
CommitDate: Wed May 13 10:56:13 2020 +0200

    tdf#132814: fix put autovalue to Yes in gui for Mysql/MariaDB
    
    See part of bt:
    https://bugs.documentfoundation.org/show_bug.cgi?id=132814#c3
    
    Like this since at least:
    https://cgit.freedesktop.org/libreoffice/core/commit/?id=b2cefc2e36925b4384eb0aea54aa2c6bcfb018a8
    author  Tamas Bunth <tamas.bunth at collabora.co.uk>       2018-10-08 11:04:48 +0200
    committer       Tamás Bunth <btomi96 at gmail.com> 2018-10-14 22:16:05 +0200
    commit  b2cefc2e36925b4384eb0aea54aa2c6bcfb018a8 (patch)
    tree    f1ab6e9fec3c66f0a3285b3ffffcbae38dc7185d
    parent  ba6723431afa843232fadf44e12ddab44e85c9f0 (diff)
    Revert removal of mysql jdbc connector
    And also make some minor fixes so it cooperates with the new mysqlc
    library.
    
    Change-Id: Id328c8378be1555fb5934c738def7fcd62f7a14b
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/93915
    Tested-by: Jenkins
    Reviewed-by: Lionel Elie Mamane <lionel at mamane.lu>
    Reviewed-by: Julien Nabet <serval2412 at yahoo.fr>
    (cherry picked from commit f8c62ed408ae9b390d8268b43f4d49c2c6057227)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/93794
    Reviewed-by: Michael Weghorn <m.weghorn at posteo.de>

diff --git a/connectivity/source/drivers/mysql_jdbc/YTable.cxx b/connectivity/source/drivers/mysql_jdbc/YTable.cxx
index 6eeaf3a23897..67b166d0e13e 100644
--- a/connectivity/source/drivers/mysql_jdbc/YTable.cxx
+++ b/connectivity/source/drivers/mysql_jdbc/YTable.cxx
@@ -208,6 +208,8 @@ void SAL_CALL OMySQLTable::alterColumnByName(const OUString& colName,
                     if (sTypeName.indexOf(s_sAutoIncrement) == -1)
                     {
                         sTypeName += OUStringLiteral(" ") + s_sAutoIncrement;
+                        descriptor->setPropertyValue(rProp.getNameByIndex(PROPERTY_ID_TYPENAME),
+                                                     makeAny(sTypeName));
                     }
                 }
                 else
commit d67327c0bf1c69982d94ba324371116dd32d7b38
Author:     Caolán McNamara <caolanm at redhat.com>
AuthorDate: Sat May 9 19:28:40 2020 +0100
Commit:     Andras Timar <andras.timar at collabora.com>
CommitDate: Wed May 13 10:56:13 2020 +0200

    Resolves: tdf#132626 entry_insert_text works on the newly typed region
    
    but in this case we want to work on the whole entry string to see
    if it forms a legal result
    
    Change-Id: I818c7d6b8efc53d00a7ea68b2e1e0ad386ed0b20
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/93796
    Tested-by: Jenkins
    Reviewed-by: Michael Weghorn <m.weghorn at posteo.de>

diff --git a/sw/source/ui/frmdlg/cption.cxx b/sw/source/ui/frmdlg/cption.cxx
index 4320d71aa4f8..b12a89696d19 100644
--- a/sw/source/ui/frmdlg/cption.cxx
+++ b/sw/source/ui/frmdlg/cption.cxx
@@ -97,12 +97,6 @@ OUString TextFilterAutoConvert::filter(const OUString &rText)
     return rText;
 }
 
-IMPL_LINK(SwCaptionDialog, TextFilterHdl, OUString&, rTest, bool)
-{
-    rTest = m_aTextFilter.filter(rTest);
-    return true;
-}
-
 SwCaptionDialog::SwCaptionDialog(weld::Window *pParent, SwView &rV)
     : SfxDialogController(pParent, "modules/swriter/ui/insertcaption.ui", "InsertCaptionDialog")
     , m_sNone(SwResId(SW_STR_NONE))
@@ -126,8 +120,6 @@ SwCaptionDialog::SwCaptionDialog(weld::Window *pParent, SwView &rV)
     , m_xOptionButton(m_xBuilder->weld_button("options"))
     , m_xPreview(new weld::CustomWeld(*m_xBuilder, "preview", m_aPreview))
 {
-    m_xCategoryBox->connect_entry_insert_text(LINK(this, SwCaptionDialog, TextFilterHdl));
-
     //#i61007# order of captions
     ApplyCaptionOrder();
     SwWrtShell &rSh = rView.GetWrtShell();
@@ -366,6 +358,13 @@ IMPL_LINK_NOARG(SwCaptionDialog, ModifyEntryHdl, weld::Entry&, void)
 
 IMPL_LINK_NOARG(SwCaptionDialog, ModifyComboHdl, weld::ComboBox&, void)
 {
+    OUString sText = m_xCategoryBox->get_active_text();
+    OUString sAllowedText = m_aTextFilter.filter(sText);
+    if (sText != sAllowedText)
+    {
+        m_xCategoryBox->set_entry_text(sAllowedText);
+        m_xCategoryBox->select_entry_region(sAllowedText.getLength(), sAllowedText.getLength());
+    }
     ModifyHdl();
 }
 
diff --git a/sw/source/uibase/inc/cption.hxx b/sw/source/uibase/inc/cption.hxx
index 58fffc2dce37..e12244ec49e9 100644
--- a/sw/source/uibase/inc/cption.hxx
+++ b/sw/source/uibase/inc/cption.hxx
@@ -64,7 +64,6 @@ class SwCaptionDialog : public SfxDialogController
     DECL_LINK(ModifyComboHdl, weld::ComboBox&, void);
     DECL_LINK(OptionHdl, weld::Button&, void);
     DECL_LINK(CaptionHdl, weld::Button&, void);
-    DECL_LINK(TextFilterHdl, OUString&, bool);
 
     void Apply();
 
commit c0ef5e9f0f103dd0e5b85701e5a907378b61c74b
Author:     Rizal Muttaqin <riz_17_oke at yahoo.co.id>
AuthorDate: Wed May 6 17:35:34 2020 +0700
Commit:     Andras Timar <andras.timar at collabora.com>
CommitDate: Wed May 13 10:56:12 2020 +0200

    Colibre: tdf#132749 Add extra large localized icons
    
    Change-Id: Ie4e869697e827f9a5262375258eb9ff0288f0dec
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/93560
    Tested-by: Jenkins
    Reviewed-by: Rizal Muttaqin <riz_17_oke at yahoo.co.id>
    (cherry picked from commit 7823443a8048618cbffc367e092c7856d28c3c7e)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/93528

diff --git a/icon-themes/colibre/cmd/32/ca/bold.png b/icon-themes/colibre/cmd/32/ca/bold.png
new file mode 100644
index 000000000000..37cf34ef4fe2
Binary files /dev/null and b/icon-themes/colibre/cmd/32/ca/bold.png differ
diff --git a/icon-themes/colibre/cmd/32/ca/italic.png b/icon-themes/colibre/cmd/32/ca/italic.png
new file mode 100644
index 000000000000..a72bd58002f7
Binary files /dev/null and b/icon-themes/colibre/cmd/32/ca/italic.png differ
diff --git a/icon-themes/colibre/cmd/32/ca/underline.png b/icon-themes/colibre/cmd/32/ca/underline.png
new file mode 100644
index 000000000000..12ae0208fe97
Binary files /dev/null and b/icon-themes/colibre/cmd/32/ca/underline.png differ
diff --git a/icon-themes/colibre/cmd/32/ca/underlinedouble.png b/icon-themes/colibre/cmd/32/ca/underlinedouble.png
new file mode 100644
index 000000000000..6821b3263db9
Binary files /dev/null and b/icon-themes/colibre/cmd/32/ca/underlinedouble.png differ
diff --git a/icon-themes/colibre/cmd/32/de/bold.png b/icon-themes/colibre/cmd/32/de/bold.png
new file mode 100644
index 000000000000..cb28623eac7a
Binary files /dev/null and b/icon-themes/colibre/cmd/32/de/bold.png differ
diff --git a/icon-themes/colibre/cmd/32/de/italic.png b/icon-themes/colibre/cmd/32/de/italic.png
new file mode 100644
index 000000000000..2046ae9eff91
Binary files /dev/null and b/icon-themes/colibre/cmd/32/de/italic.png differ
diff --git a/icon-themes/colibre/cmd/32/de/numberformatdecdecimals.png b/icon-themes/colibre/cmd/32/de/numberformatdecdecimals.png
new file mode 100644
index 000000000000..e35336f5f891
Binary files /dev/null and b/icon-themes/colibre/cmd/32/de/numberformatdecdecimals.png differ
diff --git a/icon-themes/colibre/cmd/32/de/numberformatdecimal.png b/icon-themes/colibre/cmd/32/de/numberformatdecimal.png
new file mode 100644
index 000000000000..a100ae70cab9
Binary files /dev/null and b/icon-themes/colibre/cmd/32/de/numberformatdecimal.png differ
diff --git a/icon-themes/colibre/cmd/32/de/numberformatincdecimals.png b/icon-themes/colibre/cmd/32/de/numberformatincdecimals.png
new file mode 100644
index 000000000000..3f0c40903d63
Binary files /dev/null and b/icon-themes/colibre/cmd/32/de/numberformatincdecimals.png differ
diff --git a/icon-themes/colibre/cmd/32/de/numberformatthousands.png b/icon-themes/colibre/cmd/32/de/numberformatthousands.png
new file mode 100644
index 000000000000..2928fd231839
Binary files /dev/null and b/icon-themes/colibre/cmd/32/de/numberformatthousands.png differ
diff --git a/icon-themes/colibre/cmd/32/es/underline.png b/icon-themes/colibre/cmd/32/es/underline.png
new file mode 100644
index 000000000000..12ae0208fe97
Binary files /dev/null and b/icon-themes/colibre/cmd/32/es/underline.png differ
diff --git a/icon-themes/colibre/cmd/32/es/underlinedouble.png b/icon-themes/colibre/cmd/32/es/underlinedouble.png
new file mode 100644
index 000000000000..6821b3263db9
Binary files /dev/null and b/icon-themes/colibre/cmd/32/es/underlinedouble.png differ
diff --git a/icon-themes/colibre/cmd/32/fr/bold.png b/icon-themes/colibre/cmd/32/fr/bold.png
new file mode 100644
index 000000000000..baf34cecf639
Binary files /dev/null and b/icon-themes/colibre/cmd/32/fr/bold.png differ
diff --git a/icon-themes/colibre/cmd/32/hu/italic.png b/icon-themes/colibre/cmd/32/hu/italic.png
new file mode 100644
index 000000000000..6e76b9a4a526
Binary files /dev/null and b/icon-themes/colibre/cmd/32/hu/italic.png differ
diff --git a/icon-themes/colibre/cmd/32/hu/underline.png b/icon-themes/colibre/cmd/32/hu/underline.png
new file mode 100644
index 000000000000..30b63168e91c
Binary files /dev/null and b/icon-themes/colibre/cmd/32/hu/underline.png differ
diff --git a/icon-themes/colibre/cmd/32/hu/underlinedouble.png b/icon-themes/colibre/cmd/32/hu/underlinedouble.png
new file mode 100644
index 000000000000..d192e1aa83ae
Binary files /dev/null and b/icon-themes/colibre/cmd/32/hu/underlinedouble.png differ
diff --git a/icon-themes/colibre/cmd/32/km/bold.png b/icon-themes/colibre/cmd/32/km/bold.png
new file mode 100644
index 000000000000..c3468d004dc3
Binary files /dev/null and b/icon-themes/colibre/cmd/32/km/bold.png differ
diff --git a/icon-themes/colibre/cmd/32/km/italic.png b/icon-themes/colibre/cmd/32/km/italic.png
new file mode 100644
index 000000000000..de7341cfb902
Binary files /dev/null and b/icon-themes/colibre/cmd/32/km/italic.png differ
diff --git a/icon-themes/colibre/cmd/32/km/underline.png b/icon-themes/colibre/cmd/32/km/underline.png
new file mode 100644
index 000000000000..671bc35220a9
Binary files /dev/null and b/icon-themes/colibre/cmd/32/km/underline.png differ
diff --git a/icon-themes/colibre/cmd/32/km/underlinedouble.png b/icon-themes/colibre/cmd/32/km/underlinedouble.png
new file mode 100644
index 000000000000..7fd126c41c4f
Binary files /dev/null and b/icon-themes/colibre/cmd/32/km/underlinedouble.png differ
diff --git a/icon-themes/colibre/cmd/32/nl/bold.png b/icon-themes/colibre/cmd/32/nl/bold.png
new file mode 100644
index 000000000000..4158f7c2a08d
Binary files /dev/null and b/icon-themes/colibre/cmd/32/nl/bold.png differ
diff --git a/icon-themes/colibre/cmd/32/nl/underline.png b/icon-themes/colibre/cmd/32/nl/underline.png
new file mode 100644
index 000000000000..683304de58bb
Binary files /dev/null and b/icon-themes/colibre/cmd/32/nl/underline.png differ
diff --git a/icon-themes/colibre/cmd/32/nl/underlinedouble.png b/icon-themes/colibre/cmd/32/nl/underlinedouble.png
new file mode 100644
index 000000000000..167eecdbed6e
Binary files /dev/null and b/icon-themes/colibre/cmd/32/nl/underlinedouble.png differ
diff --git a/icon-themes/colibre/cmd/32/pl/underline.png b/icon-themes/colibre/cmd/32/pl/underline.png
new file mode 100644
index 000000000000..1cb01e7563dc
Binary files /dev/null and b/icon-themes/colibre/cmd/32/pl/underline.png differ
diff --git a/icon-themes/colibre/cmd/32/pl/underlinedouble.png b/icon-themes/colibre/cmd/32/pl/underlinedouble.png
new file mode 100644
index 000000000000..b04e7f77ade3
Binary files /dev/null and b/icon-themes/colibre/cmd/32/pl/underlinedouble.png differ
diff --git a/icon-themes/colibre/cmd/32/ru/bold.png b/icon-themes/colibre/cmd/32/ru/bold.png
new file mode 100644
index 000000000000..71e9124dd653
Binary files /dev/null and b/icon-themes/colibre/cmd/32/ru/bold.png differ
diff --git a/icon-themes/colibre/cmd/32/ru/underline.png b/icon-themes/colibre/cmd/32/ru/underline.png
new file mode 100644
index 000000000000..20d64de0db88
Binary files /dev/null and b/icon-themes/colibre/cmd/32/ru/underline.png differ
diff --git a/icon-themes/colibre/cmd/32/ru/underlinedouble.png b/icon-themes/colibre/cmd/32/ru/underlinedouble.png
new file mode 100644
index 000000000000..3df91ff5163e
Binary files /dev/null and b/icon-themes/colibre/cmd/32/ru/underlinedouble.png differ
diff --git a/icon-themes/colibre/cmd/32/sl/bold.png b/icon-themes/colibre/cmd/32/sl/bold.png
new file mode 100644
index 000000000000..dae19cbfb443
Binary files /dev/null and b/icon-themes/colibre/cmd/32/sl/bold.png differ
diff --git a/icon-themes/colibre/cmd/32/sl/italic.png b/icon-themes/colibre/cmd/32/sl/italic.png
new file mode 100644
index 000000000000..7b099916667b
Binary files /dev/null and b/icon-themes/colibre/cmd/32/sl/italic.png differ
diff --git a/icon-themes/colibre/cmd/32/tr/italic.png b/icon-themes/colibre/cmd/32/tr/italic.png
new file mode 100644
index 000000000000..ceb77dab94ce
Binary files /dev/null and b/icon-themes/colibre/cmd/32/tr/italic.png differ
diff --git a/icon-themes/colibre/cmd/de/lc_numberformatdecdecimals.png b/icon-themes/colibre/cmd/de/lc_numberformatdecdecimals.png
new file mode 100644
index 000000000000..8ac062609e78
Binary files /dev/null and b/icon-themes/colibre/cmd/de/lc_numberformatdecdecimals.png differ
diff --git a/icon-themes/colibre/cmd/de/lc_numberformatdecimal.png b/icon-themes/colibre/cmd/de/lc_numberformatdecimal.png
index afa45a1dc892..c20fefab5b5e 100644
Binary files a/icon-themes/colibre/cmd/de/lc_numberformatdecimal.png and b/icon-themes/colibre/cmd/de/lc_numberformatdecimal.png differ
diff --git a/icon-themes/colibre/cmd/id/lc_numberformatincdecimals.png b/icon-themes/colibre/cmd/de/lc_numberformatincdecimals.png
similarity index 80%
rename from icon-themes/colibre/cmd/id/lc_numberformatincdecimals.png
rename to icon-themes/colibre/cmd/de/lc_numberformatincdecimals.png
index 397d83205934..cb8349bec0e2 100644
Binary files a/icon-themes/colibre/cmd/id/lc_numberformatincdecimals.png and b/icon-themes/colibre/cmd/de/lc_numberformatincdecimals.png differ
diff --git a/icon-themes/colibre/cmd/de/lc_numberformatthousands.png b/icon-themes/colibre/cmd/de/lc_numberformatthousands.png
index e6e7b32d1177..3d7f6cbbb6fb 100644
Binary files a/icon-themes/colibre/cmd/de/lc_numberformatthousands.png and b/icon-themes/colibre/cmd/de/lc_numberformatthousands.png differ
diff --git a/icon-themes/colibre/cmd/id/sc_numberformatdecdecimals.png b/icon-themes/colibre/cmd/de/sc_numberformatdecdecimals.png
similarity index 89%
rename from icon-themes/colibre/cmd/id/sc_numberformatdecdecimals.png
rename to icon-themes/colibre/cmd/de/sc_numberformatdecdecimals.png
index f9623d54241d..517411356adb 100644
Binary files a/icon-themes/colibre/cmd/id/sc_numberformatdecdecimals.png and b/icon-themes/colibre/cmd/de/sc_numberformatdecdecimals.png differ
diff --git a/icon-themes/colibre/cmd/de/sc_numberformatdecimal.png b/icon-themes/colibre/cmd/de/sc_numberformatdecimal.png
index 125aac7815aa..d27a79f95b73 100644
Binary files a/icon-themes/colibre/cmd/de/sc_numberformatdecimal.png and b/icon-themes/colibre/cmd/de/sc_numberformatdecimal.png differ
diff --git a/icon-themes/colibre/cmd/id/sc_numberformatincdecimals.png b/icon-themes/colibre/cmd/de/sc_numberformatincdecimals.png
similarity index 79%
rename from icon-themes/colibre/cmd/id/sc_numberformatincdecimals.png
rename to icon-themes/colibre/cmd/de/sc_numberformatincdecimals.png
index 9675f2eb5d2e..9b1af06b0bc0 100644
Binary files a/icon-themes/colibre/cmd/id/sc_numberformatincdecimals.png and b/icon-themes/colibre/cmd/de/sc_numberformatincdecimals.png differ
diff --git a/icon-themes/colibre/cmd/de/sc_numberformatthousands.png b/icon-themes/colibre/cmd/de/sc_numberformatthousands.png
index 0d7a426c6184..38605b14e852 100644
Binary files a/icon-themes/colibre/cmd/de/sc_numberformatthousands.png and b/icon-themes/colibre/cmd/de/sc_numberformatthousands.png differ
diff --git a/icon-themes/colibre/cmd/es/lc_bold.png b/icon-themes/colibre/cmd/es/lc_bold.png
deleted file mode 100644
index ee74cba9419f..000000000000
Binary files a/icon-themes/colibre/cmd/es/lc_bold.png and /dev/null differ
diff --git a/icon-themes/colibre/cmd/es/lc_numberformatdecimal.png b/icon-themes/colibre/cmd/es/lc_numberformatdecimal.png
deleted file mode 100644
index afa45a1dc892..000000000000
Binary files a/icon-themes/colibre/cmd/es/lc_numberformatdecimal.png and /dev/null differ
diff --git a/icon-themes/colibre/cmd/es/lc_numberformatthousands.png b/icon-themes/colibre/cmd/es/lc_numberformatthousands.png
deleted file mode 100644
index e6e7b32d1177..000000000000
Binary files a/icon-themes/colibre/cmd/es/lc_numberformatthousands.png and /dev/null differ
diff --git a/icon-themes/colibre/cmd/es/lc_underline.png b/icon-themes/colibre/cmd/es/lc_underline.png
deleted file mode 100644
index 687e8b9d9716..000000000000
Binary files a/icon-themes/colibre/cmd/es/lc_underline.png and /dev/null differ
diff --git a/icon-themes/colibre/cmd/es/lc_underlinedouble.png b/icon-themes/colibre/cmd/es/lc_underlinedouble.png
deleted file mode 100644
index 929142b9225f..000000000000
Binary files a/icon-themes/colibre/cmd/es/lc_underlinedouble.png and /dev/null differ
diff --git a/icon-themes/colibre/cmd/es/sc_bold.png b/icon-themes/colibre/cmd/es/sc_bold.png
deleted file mode 100644
index 55345381712b..000000000000
Binary files a/icon-themes/colibre/cmd/es/sc_bold.png and /dev/null differ
diff --git a/icon-themes/colibre/cmd/es/sc_numberformatdecimal.png b/icon-themes/colibre/cmd/es/sc_numberformatdecimal.png
deleted file mode 100644
index 125aac7815aa..000000000000
Binary files a/icon-themes/colibre/cmd/es/sc_numberformatdecimal.png and /dev/null differ
diff --git a/icon-themes/colibre/cmd/es/sc_numberformatthousands.png b/icon-themes/colibre/cmd/es/sc_numberformatthousands.png
deleted file mode 100644
index 0d7a426c6184..000000000000
Binary files a/icon-themes/colibre/cmd/es/sc_numberformatthousands.png and /dev/null differ
diff --git a/icon-themes/colibre/cmd/es/sc_underline.png b/icon-themes/colibre/cmd/es/sc_underline.png
deleted file mode 100644
index 112e4e92837b..000000000000
Binary files a/icon-themes/colibre/cmd/es/sc_underline.png and /dev/null differ
diff --git a/icon-themes/colibre/cmd/es/sc_underlinedouble.png b/icon-themes/colibre/cmd/es/sc_underlinedouble.png
deleted file mode 100644
index 1f11d7be244d..000000000000
Binary files a/icon-themes/colibre/cmd/es/sc_underlinedouble.png and /dev/null differ
diff --git a/icon-themes/colibre/cmd/fr/lc_underline.png b/icon-themes/colibre/cmd/fr/lc_underline.png
deleted file mode 100644
index 687e8b9d9716..000000000000
Binary files a/icon-themes/colibre/cmd/fr/lc_underline.png and /dev/null differ
diff --git a/icon-themes/colibre/cmd/fr/lc_underlinedouble.png b/icon-themes/colibre/cmd/fr/lc_underlinedouble.png
deleted file mode 100644
index 929142b9225f..000000000000
Binary files a/icon-themes/colibre/cmd/fr/lc_underlinedouble.png and /dev/null differ
diff --git a/icon-themes/colibre/cmd/fr/sc_underline.png b/icon-themes/colibre/cmd/fr/sc_underline.png
deleted file mode 100644
index 112e4e92837b..000000000000
Binary files a/icon-themes/colibre/cmd/fr/sc_underline.png and /dev/null differ
diff --git a/icon-themes/colibre/cmd/fr/sc_underlinedouble.png b/icon-themes/colibre/cmd/fr/sc_underlinedouble.png
deleted file mode 100644
index 1f11d7be244d..000000000000
Binary files a/icon-themes/colibre/cmd/fr/sc_underlinedouble.png and /dev/null differ
diff --git a/icon-themes/colibre/cmd/hu/lc_bold.png b/icon-themes/colibre/cmd/hu/lc_bold.png
deleted file mode 100644
index d0e479c6a51b..000000000000
Binary files a/icon-themes/colibre/cmd/hu/lc_bold.png and /dev/null differ
diff --git a/icon-themes/colibre/cmd/hu/sc_bold.png b/icon-themes/colibre/cmd/hu/sc_bold.png
deleted file mode 100644
index 2f236ae04489..000000000000
Binary files a/icon-themes/colibre/cmd/hu/sc_bold.png and /dev/null differ
diff --git a/icon-themes/colibre/cmd/id/lc_numberformatdecdecimals.png b/icon-themes/colibre/cmd/id/lc_numberformatdecdecimals.png
deleted file mode 100644
index 0b14094c6cbb..000000000000
Binary files a/icon-themes/colibre/cmd/id/lc_numberformatdecdecimals.png and /dev/null differ
diff --git a/icon-themes/colibre/cmd/id/lc_numberformatdecimal.png b/icon-themes/colibre/cmd/id/lc_numberformatdecimal.png
deleted file mode 100644
index afa45a1dc892..000000000000
Binary files a/icon-themes/colibre/cmd/id/lc_numberformatdecimal.png and /dev/null differ
diff --git a/icon-themes/colibre/cmd/id/lc_numberformatthousands.png b/icon-themes/colibre/cmd/id/lc_numberformatthousands.png
deleted file mode 100644
index e6e7b32d1177..000000000000
Binary files a/icon-themes/colibre/cmd/id/lc_numberformatthousands.png and /dev/null differ
diff --git a/icon-themes/colibre/cmd/id/sc_numberformatdecimal.png b/icon-themes/colibre/cmd/id/sc_numberformatdecimal.png
deleted file mode 100644
index 125aac7815aa..000000000000
Binary files a/icon-themes/colibre/cmd/id/sc_numberformatdecimal.png and /dev/null differ
diff --git a/icon-themes/colibre/cmd/id/sc_numberformatthousands.png b/icon-themes/colibre/cmd/id/sc_numberformatthousands.png
deleted file mode 100644
index 0d7a426c6184..000000000000
Binary files a/icon-themes/colibre/cmd/id/sc_numberformatthousands.png and /dev/null differ
diff --git a/icon-themes/colibre/cmd/it/lc_bold.png b/icon-themes/colibre/cmd/it/lc_bold.png
deleted file mode 100644
index 6ea0a79c65f3..000000000000
Binary files a/icon-themes/colibre/cmd/it/lc_bold.png and /dev/null differ
diff --git a/icon-themes/colibre/cmd/it/lc_italic.png b/icon-themes/colibre/cmd/it/lc_italic.png
deleted file mode 100644
index e1a33363abb1..000000000000
Binary files a/icon-themes/colibre/cmd/it/lc_italic.png and /dev/null differ
diff --git a/icon-themes/colibre/cmd/it/lc_underline.png b/icon-themes/colibre/cmd/it/lc_underline.png
deleted file mode 100644
index 687e8b9d9716..000000000000
Binary files a/icon-themes/colibre/cmd/it/lc_underline.png and /dev/null differ
diff --git a/icon-themes/colibre/cmd/it/lc_underlinedouble.png b/icon-themes/colibre/cmd/it/lc_underlinedouble.png
deleted file mode 100644
index 929142b9225f..000000000000
Binary files a/icon-themes/colibre/cmd/it/lc_underlinedouble.png and /dev/null differ
diff --git a/icon-themes/colibre/cmd/it/sc_bold.png b/icon-themes/colibre/cmd/it/sc_bold.png
deleted file mode 100644
index 74fd71af9669..000000000000
Binary files a/icon-themes/colibre/cmd/it/sc_bold.png and /dev/null differ
diff --git a/icon-themes/colibre/cmd/it/sc_italic.png b/icon-themes/colibre/cmd/it/sc_italic.png
deleted file mode 100644
index 561293ec7efe..000000000000
Binary files a/icon-themes/colibre/cmd/it/sc_italic.png and /dev/null differ
diff --git a/icon-themes/colibre/cmd/it/sc_underline.png b/icon-themes/colibre/cmd/it/sc_underline.png
deleted file mode 100644
index 112e4e92837b..000000000000
Binary files a/icon-themes/colibre/cmd/it/sc_underline.png and /dev/null differ
diff --git a/icon-themes/colibre/cmd/it/sc_underlinedouble.png b/icon-themes/colibre/cmd/it/sc_underlinedouble.png
deleted file mode 100644
index 1f11d7be244d..000000000000
Binary files a/icon-themes/colibre/cmd/it/sc_underlinedouble.png and /dev/null differ
diff --git a/icon-themes/colibre/cmd/nl/lc_italic.png b/icon-themes/colibre/cmd/nl/lc_italic.png
deleted file mode 100644
index e1a33363abb1..000000000000
Binary files a/icon-themes/colibre/cmd/nl/lc_italic.png and /dev/null differ
diff --git a/icon-themes/colibre/cmd/nl/sc_italic.png b/icon-themes/colibre/cmd/nl/sc_italic.png
deleted file mode 100644
index 561293ec7efe..000000000000
Binary files a/icon-themes/colibre/cmd/nl/sc_italic.png and /dev/null differ
diff --git a/icon-themes/colibre/cmd/pl/lc_bold.png b/icon-themes/colibre/cmd/pl/lc_bold.png
deleted file mode 100644
index 6ea0a79c65f3..000000000000
Binary files a/icon-themes/colibre/cmd/pl/lc_bold.png and /dev/null differ
diff --git a/icon-themes/colibre/cmd/pl/lc_italic.png b/icon-themes/colibre/cmd/pl/lc_italic.png
deleted file mode 100644
index f8ba647e0977..000000000000
Binary files a/icon-themes/colibre/cmd/pl/lc_italic.png and /dev/null differ
diff --git a/icon-themes/colibre/cmd/pl/sc_bold.png b/icon-themes/colibre/cmd/pl/sc_bold.png
deleted file mode 100644
index 74fd71af9669..000000000000
Binary files a/icon-themes/colibre/cmd/pl/sc_bold.png and /dev/null differ
diff --git a/icon-themes/colibre/cmd/pl/sc_italic.png b/icon-themes/colibre/cmd/pl/sc_italic.png
deleted file mode 100644
index a6e283d4bf24..000000000000
Binary files a/icon-themes/colibre/cmd/pl/sc_italic.png and /dev/null differ
diff --git a/icon-themes/colibre/cmd/pt-BR/lc_bold.png b/icon-themes/colibre/cmd/pt-BR/lc_bold.png
deleted file mode 100644
index ee74cba9419f..000000000000
Binary files a/icon-themes/colibre/cmd/pt-BR/lc_bold.png and /dev/null differ
diff --git a/icon-themes/colibre/cmd/pt-BR/lc_underline.png b/icon-themes/colibre/cmd/pt-BR/lc_underline.png
deleted file mode 100644
index 687e8b9d9716..000000000000
Binary files a/icon-themes/colibre/cmd/pt-BR/lc_underline.png and /dev/null differ
diff --git a/icon-themes/colibre/cmd/pt-BR/lc_underlinedouble.png b/icon-themes/colibre/cmd/pt-BR/lc_underlinedouble.png
deleted file mode 100644
index 929142b9225f..000000000000
Binary files a/icon-themes/colibre/cmd/pt-BR/lc_underlinedouble.png and /dev/null differ
diff --git a/icon-themes/colibre/cmd/pt-BR/sc_bold.png b/icon-themes/colibre/cmd/pt-BR/sc_bold.png
deleted file mode 100644
index 55345381712b..000000000000
Binary files a/icon-themes/colibre/cmd/pt-BR/sc_bold.png and /dev/null differ
diff --git a/icon-themes/colibre/cmd/pt-BR/sc_underline.png b/icon-themes/colibre/cmd/pt-BR/sc_underline.png
deleted file mode 100644
index 112e4e92837b..000000000000
Binary files a/icon-themes/colibre/cmd/pt-BR/sc_underline.png and /dev/null differ
diff --git a/icon-themes/colibre/cmd/pt-BR/sc_underlinedouble.png b/icon-themes/colibre/cmd/pt-BR/sc_underlinedouble.png
deleted file mode 100644
index 1f11d7be244d..000000000000
Binary files a/icon-themes/colibre/cmd/pt-BR/sc_underlinedouble.png and /dev/null differ
diff --git a/icon-themes/colibre/cmd/pt/lc_bold.png b/icon-themes/colibre/cmd/pt/lc_bold.png
deleted file mode 100644
index ee74cba9419f..000000000000
Binary files a/icon-themes/colibre/cmd/pt/lc_bold.png and /dev/null differ
diff --git a/icon-themes/colibre/cmd/pt/lc_underline.png b/icon-themes/colibre/cmd/pt/lc_underline.png
deleted file mode 100644
index 687e8b9d9716..000000000000
Binary files a/icon-themes/colibre/cmd/pt/lc_underline.png and /dev/null differ
diff --git a/icon-themes/colibre/cmd/pt/lc_underlinedouble.png b/icon-themes/colibre/cmd/pt/lc_underlinedouble.png
deleted file mode 100644
index 929142b9225f..000000000000
Binary files a/icon-themes/colibre/cmd/pt/lc_underlinedouble.png and /dev/null differ
diff --git a/icon-themes/colibre/cmd/pt/sc_bold.png b/icon-themes/colibre/cmd/pt/sc_bold.png
deleted file mode 100644
index 55345381712b..000000000000
Binary files a/icon-themes/colibre/cmd/pt/sc_bold.png and /dev/null differ
diff --git a/icon-themes/colibre/cmd/pt/sc_underline.png b/icon-themes/colibre/cmd/pt/sc_underline.png
deleted file mode 100644
index 112e4e92837b..000000000000
Binary files a/icon-themes/colibre/cmd/pt/sc_underline.png and /dev/null differ
diff --git a/icon-themes/colibre/cmd/pt/sc_underlinedouble.png b/icon-themes/colibre/cmd/pt/sc_underlinedouble.png
deleted file mode 100644
index 1f11d7be244d..000000000000
Binary files a/icon-themes/colibre/cmd/pt/sc_underlinedouble.png and /dev/null differ
diff --git a/icon-themes/colibre/cmd/ru/lc_italic.png b/icon-themes/colibre/cmd/ru/lc_italic.png
deleted file mode 100644
index f8ba647e0977..000000000000
Binary files a/icon-themes/colibre/cmd/ru/lc_italic.png and /dev/null differ
diff --git a/icon-themes/colibre/cmd/ru/sc_italic.png b/icon-themes/colibre/cmd/ru/sc_italic.png
deleted file mode 100644
index a6e283d4bf24..000000000000
Binary files a/icon-themes/colibre/cmd/ru/sc_italic.png and /dev/null differ
diff --git a/icon-themes/colibre/cmd/sv/lc_bold.png b/icon-themes/colibre/cmd/sv/lc_bold.png
deleted file mode 100644
index d0e479c6a51b..000000000000
Binary files a/icon-themes/colibre/cmd/sv/lc_bold.png and /dev/null differ
diff --git a/icon-themes/colibre/cmd/sv/lc_italic.png b/icon-themes/colibre/cmd/sv/lc_italic.png
deleted file mode 100644
index f8ba647e0977..000000000000
Binary files a/icon-themes/colibre/cmd/sv/lc_italic.png and /dev/null differ
diff --git a/icon-themes/colibre/cmd/sv/sc_bold.png b/icon-themes/colibre/cmd/sv/sc_bold.png
deleted file mode 100644
index 2f236ae04489..000000000000
Binary files a/icon-themes/colibre/cmd/sv/sc_bold.png and /dev/null differ
diff --git a/icon-themes/colibre/cmd/sv/sc_italic.png b/icon-themes/colibre/cmd/sv/sc_italic.png
deleted file mode 100644
index a6e283d4bf24..000000000000
Binary files a/icon-themes/colibre/cmd/sv/sc_italic.png and /dev/null differ
diff --git a/icon-themes/colibre/cmd/tr/lc_bold.png b/icon-themes/colibre/cmd/tr/lc_bold.png
deleted file mode 100644
index 1e112fc80aaf..000000000000
Binary files a/icon-themes/colibre/cmd/tr/lc_bold.png and /dev/null differ
diff --git a/icon-themes/colibre/cmd/tr/lc_italic.png b/icon-themes/colibre/cmd/tr/lc_italic.png
index 9f7ac80cb016..e39f91ef54e3 100644
Binary files a/icon-themes/colibre/cmd/tr/lc_italic.png and b/icon-themes/colibre/cmd/tr/lc_italic.png differ
diff --git a/icon-themes/colibre/cmd/tr/lc_underline.png b/icon-themes/colibre/cmd/tr/lc_underline.png
index 3461d8a455e9..2ed21cb61791 100644
Binary files a/icon-themes/colibre/cmd/tr/lc_underline.png and b/icon-themes/colibre/cmd/tr/lc_underline.png differ
diff --git a/icon-themes/colibre/cmd/tr/lc_underlinedouble.png b/icon-themes/colibre/cmd/tr/lc_underlinedouble.png
index d5d78e0dc08c..d05319c58466 100644
Binary files a/icon-themes/colibre/cmd/tr/lc_underlinedouble.png and b/icon-themes/colibre/cmd/tr/lc_underlinedouble.png differ
diff --git a/icon-themes/colibre/cmd/tr/sc_bold.png b/icon-themes/colibre/cmd/tr/sc_bold.png
deleted file mode 100644
index 190c604ecafb..000000000000
Binary files a/icon-themes/colibre/cmd/tr/sc_bold.png and /dev/null differ
diff --git a/icon-themes/colibre/cmd/tr/sc_italic.png b/icon-themes/colibre/cmd/tr/sc_italic.png
index 458edec18f85..c6ed89d91631 100644
Binary files a/icon-themes/colibre/cmd/tr/sc_italic.png and b/icon-themes/colibre/cmd/tr/sc_italic.png differ
diff --git a/icon-themes/colibre/cmd/tr/sc_underline.png b/icon-themes/colibre/cmd/tr/sc_underline.png
index 8b96d81a8234..d3a74f605289 100644
Binary files a/icon-themes/colibre/cmd/tr/sc_underline.png and b/icon-themes/colibre/cmd/tr/sc_underline.png differ
diff --git a/icon-themes/colibre/cmd/tr/sc_underlinedouble.png b/icon-themes/colibre/cmd/tr/sc_underlinedouble.png
index 67877e0e7d89..4ec150084376 100644
Binary files a/icon-themes/colibre/cmd/tr/sc_underlinedouble.png and b/icon-themes/colibre/cmd/tr/sc_underlinedouble.png differ
diff --git a/icon-themes/colibre/links.txt b/icon-themes/colibre/links.txt
index b94bb5c77186..fdd64618f814 100644
--- a/icon-themes/colibre/links.txt
+++ b/icon-themes/colibre/links.txt
@@ -406,13 +406,73 @@ cmd/32/ar/numberliststyle.png cmd/32/ar/defaultnumbering.png
 cmd/32/ar/recundo.png cmd/32/redo.png
 cmd/32/ar/redo.png cmd/32/undo.png
 cmd/32/ar/undo.png cmd/32/redo.png
+cmd/32/ca/underlinesimple.png cmd/32/ca/underline.png
+cmd/32/es/bold.png cmd/32/ca/bold.png
 cmd/32/es/italic.png cmd/32/de/italic.png
+cmd/32/es/numberformatdecdecimals.png cmd/32/de/numberformatdecdecimals.png
+cmd/32/es/numberformatdecimal.png cmd/32/de/numberformatdecimal.png
+cmd/32/es/numberformatincdecimals.png cmd/32/de/numberformatincdecimals.png
+cmd/32/es/numberformatthousands.png cmd/32/de/numberformatthousands.png
+cmd/32/es/underline.png cmd/32/ca/underline.png
+cmd/32/es/underlinedouble.png cmd/32/ca/underlinedouble.png
+cmd/32/es/underlinesimple.png cmd/32/ca/underline.png
 cmd/32/fa/recundo.png cmd/32/redo.png
 cmd/32/fa/redo.png cmd/32/undo.png	
 cmd/32/fa/undo.png cmd/32/redo.png
+cmd/32/fr/numberformatdecdecimals.png cmd/32/de/numberformatdecdecimals.png
+cmd/32/fr/numberformatdecimal.png cmd/32/de/numberformatdecimal.png
+cmd/32/fr/numberformatincdecimals.png cmd/32/de/numberformatincdecimals.png
+cmd/32/fr/numberformatthousands.png cmd/32/de/numberformatthousands.png
+cmd/32/fr/underline.png cmd/32/ca/underline.png
+cmd/32/fr/underlinedouble.png cmd/32/ca/underlinedouble.png
+cmd/32/fr/underlinesimple.png cmd/32/ca/underline.png
 cmd/32/he/recundo.png cmd/32/redo.png
 cmd/32/he/redo.png cmd/32/undo.png
 cmd/32/he/undo.png cmd/32/redo.png
+cmd/32/hu/bold.png cmd/32/de/bold.png
+cmd/32/hu/underlinesimple.png cmd/32/hu/underline.png
+cmd/32/id/numberformatdecdecimals.png cmd/32/de/numberformatdecdecimals.png
+cmd/32/id/numberformatdecimal.png cmd/32/de/numberformatdecimal.png
+cmd/32/id/numberformatincdecimals.png cmd/32/de/numberformatincdecimals.png
+cmd/32/id/numberformatthousands.png cmd/32/de/numberformatthousands.png
+cmd/32/it/bold.png cmd/32/fr/bold.png
+cmd/32/it/italic.png cmd/32/ca/italic.png
+cmd/32/it/underline.png cmd/32/ca/underline.png
+cmd/32/it/underlinedouble.png cmd/32/ca/underlinedouble.png
+cmd/32/it/underlinesimple.png cmd/32/ca/underline.png
+cmd/32/km/underlinesimple.png cmd/32/km/underline.png
+cmd/32/ko/drawtext.png cmd/32/ko/text.png
+cmd/32/ko/fontcolor.png cmd/32/ko/color.png
+cmd/32/ko/formattextmenu.png cmd/32/ko/text.png
+cmd/32/ko/ordercrit.png cmd/32/ko/datasort.png
+cmd/32/ko/sortdown.png cmd/32/ko/sortdescending.png
+cmd/32/ko/sortup.png cmd/32/ko/sortascending.png
+cmd/32/ko/underlinesimple.png cmd/32/ko/underline.png
+cmd/32/nl/italic.png cmd/32/ca/italic.png
+cmd/32/nl/underlinesimple.png cmd/32/nl/underline.png
+cmd/32/pl/bold.png cmd/32/fr/bold.png
+cmd/32/pl/italic.png cmd/32/de/italic.png
+cmd/32/pl/underlinesimple.png cmd/32/pl/underline.png
+cmd/32/pt-BR/bold.png cmd/32/ca/bold.png
+cmd/32/pt-BR/underline.png cmd/32/ca/underline.png
+cmd/32/pt-BR/underlinedouble.png cmd/32/ca/underlinedouble.png
+cmd/32/pt-BR/underlinesimple.png cmd/32/ca/underline.png
+cmd/32/pt/bold.png cmd/32/ca/bold.png
+cmd/32/pt/underline.png cmd/32/ca/underline.png
+cmd/32/pt/underlinedouble.png cmd/32/ca/underlinedouble.png
+cmd/32/pt/underlinesimple.png cmd/32/ca/underline.png
+cmd/32/ru/italic.png cmd/32/de/italic.png
+cmd/32/ru/underlinesimple.png cmd/32/ru/underline.png
+cmd/32/sl/underline.png cmd/32/pl/underline.png
+cmd/32/sl/underlinedouble.png cmd/32/pl/underlinedouble.png
+cmd/32/sl/underlinesimple.png cmd/32/pl/underline.png
+cmd/32/sv/bold.png cmd/32/de/bold.png
+cmd/32/sv/italic.png cmd/32/de/italic.png
+cmd/32/tr/bold.png cmd/32/sl/bold.png
+cmd/32/tr/underline.png cmd/32/hu/underline.png
+cmd/32/tr/underlinedouble.png cmd/32/hu/underlinedouble.png
+cmd/32/tr/underlinesimple.png cmd/32/hu/underline.png
+cmd/32/underlinesimple.png cmd/32/underline.png
 cmd/32/ur/recundo.png cmd/32/redo.png
 cmd/32/ur/redo.png cmd/32/undo.png
 cmd/32/ur/undo.png cmd/32/redo.png
@@ -426,20 +486,140 @@ cmd/ar/sc_defaultparastyle.png cmd/ar/sc_controlcodes.png
 cmd/ar/sc_numberliststyle.png cmd/ar/sc_defaultnumbering.png
 cmd/ar/sc_redo.png cmd/sc_undo.png
 cmd/ar/sc_undo.png cmd/sc_redo.png
+cmd/ca/lc_underlinesimple.png cmd/ca/lc_underline.png
+cmd/ca/sc_underlinesimple.png cmd/ca/sc_underline.png
+cmd/es/lc_bold.png cmd/ca/lc_bold.png
 cmd/es/lc_italic.png cmd/de/lc_italic.png
+cmd/es/lc_numberformatdecdecimals.png cmd/de/lc_numberformatdecdecimals.png
+cmd/es/lc_numberformatdecimal.png cmd/de/lc_numberformatdecimal.png
+cmd/es/lc_numberformatincdecimals.png cmd/de/lc_numberformatincdecimals.png
+cmd/es/lc_numberformatthousands.png cmd/de/lc_numberformatthousands.png
+cmd/es/lc_underline.png cmd/ca/lc_underline.png
+cmd/es/lc_underlinedouble.png cmd/ca/lc_underlinedouble.png
+cmd/es/lc_underlinesimple.png cmd/ca/lc_underline.png
+cmd/es/sc_bold.png cmd/ca/sc_bold.png
 cmd/es/sc_italic.png cmd/de/sc_italic.png
+cmd/es/sc_numberformatdecdecimals.png cmd/de/sc_numberformatdecdecimals.png
+cmd/es/sc_numberformatdecimal.png cmd/de/sc_numberformatdecimal.png
+cmd/es/sc_numberformatincdecimals.png cmd/de/sc_numberformatincdecimals.png
+cmd/es/sc_numberformatthousands.png cmd/de/sc_numberformatthousands.png
+cmd/es/sc_underline.png cmd/ca/sc_underline.png
+cmd/es/sc_underlinedouble.png cmd/ca/sc_underlinedouble.png
+cmd/es/sc_underlinesimple.png cmd/ca/sc_underline.png
 cmd/fa/lc_recundo.png cmd/lc_redo.png
 cmd/fa/lc_redo.png cmd/lc_undo.png
 cmd/fa/lc_undo.png cmd/lc_redo.png
 cmd/fa/sc_recundo.png cmd/sc_redo.png
 cmd/fa/sc_redo.png cmd/sc_undo.png
 cmd/fa/sc_undo.png cmd/sc_redo.png
+cmd/fr/lc_numberformatdecdecimals.png cmd/de/lc_numberformatdecdecimals.png
+cmd/fr/lc_numberformatdecimal.png cmd/de/lc_numberformatdecimal.png
+cmd/fr/lc_numberformatincdecimals.png cmd/de/lc_numberformatincdecimals.png
+cmd/fr/lc_numberformatthousands.png cmd/de/lc_numberformatthousands.png
+cmd/fr/lc_underline.png cmd/ca/lc_underline.png
+cmd/fr/lc_underlinedouble.png cmd/ca/lc_underlinedouble.png
+cmd/fr/lc_underlinesimple.png cmd/ca/lc_underline.png
+cmd/fr/sc_numberformatdecdecimals.png cmd/de/sc_numberformatdecdecimals.png
+cmd/fr/sc_numberformatdecimal.png cmd/de/sc_numberformatdecimal.png
+cmd/fr/sc_numberformatincdecimals.png cmd/de/sc_numberformatincdecimals.png
+cmd/fr/sc_numberformatthousands.png cmd/de/sc_numberformatthousands.png
+cmd/fr/sc_underline.png cmd/ca/sc_underline.png
+cmd/fr/sc_underlinedouble.png cmd/ca/sc_underlinedouble.png
+cmd/fr/sc_underlinesimple.png cmd/ca/sc_underline.png
 cmd/he/lc_recundo.png cmd/lc_redo.png
 cmd/he/lc_redo.png cmd/lc_undo.png
 cmd/he/lc_undo.png cmd/lc_redo.png
 cmd/he/sc_recundo.png cmd/sc_redo.png
 cmd/he/sc_redo.png cmd/sc_undo.png
 cmd/he/sc_undo.png cmd/sc_redo.png
+cmd/hu/lc_bold.png cmd/de/lc_bold.png
+cmd/hu/lc_underlinesimple.png cmd/hu/lc_underline.png
+cmd/hu/sc_bold.png cmd/de/sc_bold.png
+cmd/hu/sc_underlinesimple.png cmd/hu/sc_underline.png
+cmd/id/lc_numberformatdecdecimals.png cmd/de/lc_numberformatdecdecimals.png
+cmd/id/lc_numberformatdecimal.png cmd/de/lc_numberformatdecimal.png
+cmd/id/lc_numberformatincdecimals.png cmd/de/lc_numberformatincdecimals.png
+cmd/id/lc_numberformatthousands.png cmd/de/lc_numberformatthousands.png
+cmd/id/sc_numberformatdecdecimals.png cmd/de/sc_numberformatdecdecimals.png
+cmd/id/sc_numberformatdecimal.png cmd/de/sc_numberformatdecimal.png
+cmd/id/sc_numberformatincdecimals.png cmd/de/sc_numberformatincdecimals.png
+cmd/id/sc_numberformatthousands.png cmd/de/sc_numberformatthousands.png
+cmd/it/lc_bold.png cmd/fr/lc_bold.png
+cmd/it/lc_italic.png cmd/ca/lc_italic.png
+cmd/it/lc_underline.png cmd/ca/lc_underline.png
+cmd/it/lc_underlinedouble.png cmd/ca/lc_underlinedouble.png
+cmd/it/lc_underlinesimple.png cmd/ca/lc_underline.png
+cmd/it/sc_bold.png cmd/fr/sc_bold.png
+cmd/it/sc_italic.png cmd/ca/sc_italic.png
+cmd/it/sc_underline.png cmd/ca/sc_underline.png
+cmd/it/sc_underlinedouble.png cmd/ca/sc_underlinedouble.png
+cmd/it/sc_underlinesimple.png cmd/ca/sc_underline.png
+cmd/km/lc_underlinesimple.png cmd/km/lc_underline.png
+cmd/km/sc_underlinesimple.png cmd/km/sc_underline.png
+cmd/ko/lc_drawtext.png cmd/ko/lc_text.png
+cmd/ko/lc_fontcolor.png cmd/ko/lc_color.png
+cmd/ko/lc_formattextmenu.png cmd/ko/lc_text.png
+cmd/ko/lc_ordercrit.png cmd/ko/lc_datasort.png
+cmd/ko/lc_sortdown.png cmd/ko/lc_sortdescending.png
+cmd/ko/lc_sortup.png cmd/ko/lc_sortascending.png
+cmd/ko/lc_underlinesimple.png cmd/ko/lc_underline.png
+cmd/ko/sc_drawtext.png cmd/ko/sc_text.png
+cmd/ko/sc_fontcolor.png cmd/ko/sc_color.png
+cmd/ko/sc_formattextmenu.png cmd/ko/sc_text.png
+cmd/ko/sc_ordercrit.png cmd/ko/sc_datasort.png
+cmd/ko/sc_sortdown.png cmd/ko/sc_sortdescending.png
+cmd/ko/sc_sortup.png cmd/ko/sc_sortascending.png
+cmd/ko/sc_underlinesimple.png cmd/ko/sc_underline.png
+cmd/lc_underlinesimple.png cmd/lc_underline.png
+cmd/nl/lc_italic.png cmd/ca/lc_italic.png
+cmd/nl/lc_underlinesimple.png cmd/nl/lc_underline.png
+cmd/nl/sc_italic.png cmd/ca/sc_italic.png
+cmd/nl/sc_underlinesimple.png cmd/nl/sc_underline.png
+cmd/pl/lc_bold.png cmd/fr/lc_bold.png
+cmd/pl/lc_italic.png cmd/de/lc_italic.png
+cmd/pl/lc_underlinesimple.png cmd/pl/lc_underline.png
+cmd/pl/sc_bold.png cmd/fr/sc_bold.png
+cmd/pl/sc_italic.png cmd/de/sc_italic.png
+cmd/pl/sc_underlinesimple.png cmd/pl/sc_underline.png
+cmd/pt-BR/lc_bold.png cmd/ca/lc_bold.png
+cmd/pt-BR/lc_underline.png cmd/ca/lc_underline.png
+cmd/pt-BR/lc_underlinedouble.png cmd/ca/lc_underlinedouble.png
+cmd/pt-BR/lc_underlinesimple.png cmd/ca/lc_underline.png
+cmd/pt-BR/sc_bold.png cmd/ca/sc_bold.png
+cmd/pt-BR/sc_underline.png cmd/ca/sc_underline.png
+cmd/pt-BR/sc_underlinedouble.png cmd/ca/sc_underlinedouble.png
+cmd/pt-BR/sc_underlinesimple.png cmd/ca/sc_underline.png
+cmd/pt/lc_bold.png cmd/ca/lc_bold.png
+cmd/pt/lc_underline.png cmd/ca/lc_underline.png
+cmd/pt/lc_underlinedouble.png cmd/ca/lc_underlinedouble.png
+cmd/pt/lc_underlinesimple.png cmd/ca/lc_underline.png
+cmd/pt/sc_bold.png cmd/ca/sc_bold.png
+cmd/pt/sc_underline.png cmd/ca/sc_underline.png
+cmd/pt/sc_underlinedouble.png cmd/ca/sc_underlinedouble.png
+cmd/pt/sc_underlinesimple.png cmd/ca/sc_underline.png
+cmd/ru/lc_italic.png cmd/de/lc_italic.png
+cmd/ru/lc_underlinesimple.png cmd/ru/lc_underline.png
+cmd/ru/sc_italic.png cmd/de/sc_italic.png
+cmd/ru/sc_underlinesimple.png cmd/ru/sc_underline.png
+cmd/sc_underlinesimple.png cmd/sc_underline.png
+cmd/sl/lc_underline.png cmd/pl/lc_underline.png
+cmd/sl/lc_underlinedouble.png cmd/pl/lc_underlinedouble.png
+cmd/sl/lc_underlinesimple.png cmd/pl/lc_underline.png
+cmd/sl/sc_underline.png cmd/pl/sc_underline.png
+cmd/sl/sc_underlinedouble.png cmd/pl/sc_underlinedouble.png
+cmd/sl/sc_underlinesimple.png cmd/pl/sc_underline.png
+cmd/sv/lc_bold.png cmd/de/lc_bold.png
+cmd/sv/lc_italic.png cmd/de/lc_italic.png
+cmd/sv/sc_bold.png cmd/de/sc_bold.png
+cmd/sv/sc_italic.png cmd/de/sc_italic.png
+cmd/tr/lc_bold.png cmd/sl/lc_bold.png
+cmd/tr/lc_underline.png cmd/hu/lc_underline.png
+cmd/tr/lc_underlinedouble.png cmd/hu/lc_underlinedouble.png
+cmd/tr/lc_underlinesimple.png cmd/hu/lc_underline.png
+cmd/tr/sc_bold.png cmd/sl/sc_bold.png
+cmd/tr/sc_underline.png cmd/hu/sc_underline.png
+cmd/tr/sc_underlinedouble.png cmd/hu/sc_underlinedouble.png
+cmd/tr/sc_underlinesimple.png cmd/hu/sc_underline.png
 cmd/ur/lc_recundo.png cmd/lc_redo.png
 cmd/ur/lc_redo.png cmd/lc_undo.png
 cmd/ur/lc_undo.png cmd/lc_redo.png
@@ -1578,59 +1758,6 @@ cmd/sc_sbabrwinsert.png cmd/sc_insertfieldctrl.png
 cmd/sc_showbrowser.png cmd/sc_controlproperties.png
 cmd/sc_showpropbrowser.png cmd/sc_controlproperties.png
 
-# Underline include language support
-cmd/lc_underlinesimple.png cmd/lc_underline.png
-cmd/sc_underlinesimple.png cmd/sc_underline.png
-cmd/32/underlinesimple.png cmd/32/underline.png

... etc. - the rest is truncated


More information about the Libreoffice-commits mailing list