This is an automated email from the ASF dual-hosted git repository.
jbonofre pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/karaf.git
The following commit(s) were added to refs/heads/main by this push:
new 78222c0ae5 [KARAF-7678] Fix ShellTable multiline clipping
new 4281542e82 Merge pull request #1716 from
CMoH/karaf-7678-fix-shelltable-multiline-clipping
78222c0ae5 is described below
commit 78222c0ae567b5b504327cbce8cbabd0904e6edf
Author: Ciprian Ciubotariu <[email protected]>
AuthorDate: Tue Feb 28 02:27:03 2023 +0200
[KARAF-7678] Fix ShellTable multiline clipping
Account for multi-line cell contents when calculating cell width and
clipping the text to maxSize. The cell contents might be either wrapped
or originally split by the caller with \n characters
---
.../org/apache/karaf/shell/support/table/Col.java | 44 ++++++++++++++--------
1 file changed, 28 insertions(+), 16 deletions(-)
diff --git
a/shell/core/src/main/java/org/apache/karaf/shell/support/table/Col.java
b/shell/core/src/main/java/org/apache/karaf/shell/support/table/Col.java
index 410de81283..442e94da11 100644
--- a/shell/core/src/main/java/org/apache/karaf/shell/support/table/Col.java
+++ b/shell/core/src/main/java/org/apache/karaf/shell/support/table/Col.java
@@ -21,6 +21,7 @@ import java.util.List;
import java.util.function.Function;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import java.util.stream.Collectors;
import org.apache.karaf.shell.support.ansi.SimpleAnsi;
@@ -148,8 +149,14 @@ public class Col {
if (fullContent.length() == 0) {
return "";
}
- String finalContent = cut(fullContent,
getClippedSize(fullContent.length()));
- updateSize(finalContent.length());
+ if (wrap && size < fullContent.length()) {
+ // make sure splitLines will have an estimate cell size if wrap is
true
+ updateSize(fullContent.length());
+ }
+ List<String> lines = splitLines(fullContent);
+ int maxLineSize =
lines.stream().mapToInt(String::length).max().getAsInt(); // at least one line
exists due to test above
+ updateSize(maxLineSize); // calls getClippedSize()
+ String finalContent = lines.stream().map(line -> cut(line,
getClippedSize(line.length()))).collect(Collectors.joining("\n"));
return finalContent;
}
@@ -158,14 +165,7 @@ public class Col {
}
String getContent(String content) {
- List<String> lines = new
ArrayList<>(Arrays.asList(content.split("\n")));
- if (wrap) {
- List<String> wrapped = new ArrayList<>();
- for (String line : lines) {
- wrapped.addAll(wrap(line));
- }
- lines = wrapped;
- }
+ List<String> lines = splitLines(content);
String color = null;
if(colorProvider != null) {
@@ -182,17 +182,29 @@ public class Col {
line = SimpleAnsi.INTENSITY_BOLD + line +
SimpleAnsi.INTENSITY_NORMAL;
}
- if(color != null)
- sb.append(color);
-
+ if (color != null)
+ sb.append(color);
+
sb.append(line);
-
- if(color != null)
- sb.append(SimpleAnsi.COLOR_DEFAULT);
+
+ if (color != null)
+ sb.append(SimpleAnsi.COLOR_DEFAULT);
}
return sb.toString();
}
+ private List<String> splitLines(String content) {
+ List<String> lines = new
ArrayList<>(Arrays.asList(content.split("\n")));
+ if (wrap) {
+ List<String> wrapped = new ArrayList<>();
+ for (String line : lines) {
+ wrapped.addAll(wrap(line));
+ }
+ lines = wrapped;
+ }
+ return lines;
+ }
+
protected String cut(String content, int size) {
if (content.length() <= size) {
return content;