From af385ac6712e31f16c486b34b9a10a677a36d02e Mon Sep 17 00:00:00 2001 From: Sollace Date: Thu, 1 Sep 2022 20:05:00 +0200 Subject: [PATCH] Add newline character support and fix some text wrapping incorrectly --- .../container/ParagraphWrappingVisitor.java | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/minelittlepony/unicopia/container/ParagraphWrappingVisitor.java b/src/main/java/com/minelittlepony/unicopia/container/ParagraphWrappingVisitor.java index e36ed11f..5190b116 100644 --- a/src/main/java/com/minelittlepony/unicopia/container/ParagraphWrappingVisitor.java +++ b/src/main/java/com/minelittlepony/unicopia/container/ParagraphWrappingVisitor.java @@ -32,15 +32,24 @@ class ParagraphWrappingVisitor implements StyledVisitor { @Override public Optional accept(Style style, String s) { + + int remainingLength = (int)(pageWidth - currentLineCollectedLength); + while (!s.isEmpty()) { - int trimmedLength = handler.getTrimmedLength(s, pageWidth, style); + int trimmedLength = handler.getTrimmedLength(s, remainingLength, style); + int newline = s.indexOf('\n'); + + if (newline >= 0 && newline < trimmedLength) { + trimmedLength = newline; + } else { + newline = -1; + } if (trimmedLength == 0) { trimmedLength = s.length(); } String wrappedFragment = s.substring(0, trimmedLength); - int lastSpace = wrappedFragment.lastIndexOf(' '); trimmedLength = lastSpace > 0 ? Math.min(lastSpace, trimmedLength) : trimmedLength; @@ -53,6 +62,7 @@ class ParagraphWrappingVisitor implements StyledVisitor { if (currentLineCollectedLength > 0) { currentLine.append(" "); + currentLineCollectedLength += handler.getWidth(" "); } currentLine.append(fragment); currentLineCollectedLength += grabbedWidth; @@ -60,6 +70,8 @@ class ParagraphWrappingVisitor implements StyledVisitor { if (trimmedLength <= s.length()) { s = s.substring(trimmedLength, s.length()); } + + remainingLength = pageWidth; } return Optional.empty();