[Libreoffice-commits] core.git: sc/source
Andreas Heinisch (via logerrit)
logerrit at kemper.freedesktop.org
Fri Aug 27 09:30:11 UTC 2021
sc/source/core/data/column2.cxx | 57 +++++++++++++++++++++++++++++++++++++---
1 file changed, 53 insertions(+), 4 deletions(-)
New commits:
commit c4709b6192340a4d5a82bf156a7342aba6aa99a1
Author: Andreas Heinisch <andreas.heinisch at yahoo.de>
AuthorDate: Fri Aug 20 09:53:37 2021 +0200
Commit: Eike Rathke <erack at redhat.com>
CommitDate: Fri Aug 27 11:29:35 2021 +0200
tdf#59820 - Search for the longest substring in a multiline string
In order to determine the optimal column width of imported ASCII files
in the simple text mode, search for the longest substring in a multiline
string which is determined by a line break.
Change-Id: I2c606dd97549455009b9f8fad2b8ec4386b7b7db
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/120772
Tested-by: Jenkins
Reviewed-by: Eike Rathke <erack at redhat.com>
diff --git a/sc/source/core/data/column2.cxx b/sc/source/core/data/column2.cxx
index e3f8284d5061..93e16239dfca 100644
--- a/sc/source/core/data/column2.cxx
+++ b/sc/source/core/data/column2.cxx
@@ -614,6 +614,45 @@ class MaxStrLenFinder
OUString maMaxLenStr;
sal_Int32 mnMaxLen;
+ // tdf#59820 - search for the longest substring in a multiline string
+ void checkLineBreak(const OUString& aStrVal)
+ {
+ sal_Int32 nFromIndex = 0;
+ sal_Int32 nToIndex = aStrVal.indexOf('\n', nFromIndex);
+ // if there is no line break, just take the length of the entire string
+ if (nToIndex == -1)
+ {
+ mnMaxLen = aStrVal.getLength();
+ maMaxLenStr = aStrVal;
+ }
+ else
+ {
+ sal_Int32 nMaxLen = 0;
+ // search for the longest substring in the multiline string
+ while (nToIndex != -1)
+ {
+ if (nMaxLen < nToIndex - nFromIndex)
+ {
+ nMaxLen = nToIndex - nFromIndex;
+ }
+ nFromIndex = nToIndex + 1;
+ nToIndex = aStrVal.indexOf('\n', nFromIndex);
+ }
+ // take into consideration the last part of multiline string
+ nToIndex = aStrVal.getLength() - nFromIndex;
+ if (nMaxLen < nToIndex)
+ {
+ nMaxLen = nToIndex;
+ }
+ // assign new maximum including its substring
+ if (mnMaxLen < nMaxLen)
+ {
+ mnMaxLen = nMaxLen;
+ maMaxLenStr = aStrVal.subView(nFromIndex);
+ }
+ }
+ }
+
void checkLength(const ScRefCellValue& rCell)
{
const Color* pColor;
@@ -623,8 +662,19 @@ class MaxStrLenFinder
if (aValStr.getLength() > mnMaxLen)
{
- mnMaxLen = aValStr.getLength();
- maMaxLenStr = aValStr;
+ switch (rCell.meType)
+ {
+ case CELLTYPE_NONE:
+ case CELLTYPE_VALUE:
+ mnMaxLen = aValStr.getLength();
+ maMaxLenStr = aValStr;
+ break;
+ case CELLTYPE_EDIT:
+ case CELLTYPE_STRING:
+ case CELLTYPE_FORMULA:
+ default:
+ checkLineBreak(aValStr);
+ }
}
}
@@ -642,8 +692,7 @@ public:
{
if (rSS.getLength() > mnMaxLen)
{
- mnMaxLen = rSS.getLength();
- maMaxLenStr = rSS.getString();
+ checkLineBreak(rSS.getString());
}
}
More information about the Libreoffice-commits
mailing list