From f2421c1e8ed0a0c8392b179435d638ff55fe1551 Mon Sep 17 00:00:00 2001 From: Vitaly Takmazov Date: Sat, 27 Apr 2024 19:54:16 +0300 Subject: Fix text truncation in reply quotes and Twitter posts --- .../juick/util/formatters/PlainTextFormatter.java | 25 +++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) (limited to 'src/main/java/com/juick/util/formatters/PlainTextFormatter.java') diff --git a/src/main/java/com/juick/util/formatters/PlainTextFormatter.java b/src/main/java/com/juick/util/formatters/PlainTextFormatter.java index 9a885bca..2e7722e7 100644 --- a/src/main/java/com/juick/util/formatters/PlainTextFormatter.java +++ b/src/main/java/com/juick/util/formatters/PlainTextFormatter.java @@ -22,6 +22,7 @@ import com.juick.util.MessageUtils; import org.apache.commons.lang3.StringUtils; import org.ocpsoft.prettytime.PrettyTime; +import java.text.BreakIterator; import java.util.Date; import java.util.Locale; @@ -62,7 +63,7 @@ public class PlainTextFormatter { sb.append(attachmentUrl).append("\n"); } if (txt.length() >= cropLength) { - sb.append(StringUtils.substring(txt, 0, cropLength)).append(" [...]"); + sb.append(PlainTextFormatter.truncateText(txt, cropLength)).append(" [...]"); } else { sb.append(txt); } @@ -97,4 +98,26 @@ public class PlainTextFormatter { public static String formatTwitterCard(Message jmsg) { return MessageUtils.getMessageHashTags(jmsg) + StringUtils.defaultString(jmsg.getText()); } + /** + * Truncate text to the nearest word, up to a maximum length specified. + * + * @param text + * @param maxLength + * @return + */ + public static String truncateText(String text, int maxLength) { + if(text != null && text.length() > maxLength) { + BreakIterator bi = BreakIterator.getWordInstance(); + bi.setText(text); + + if(bi.isBoundary(maxLength-1)) { + return text.substring(0, maxLength-2); + } else { + int preceding = bi.preceding(maxLength-1); + return text.substring(0, preceding-1); + } + } else { + return text; + } + } } -- cgit v1.2.3