[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