From 67b2ba16dd4a06d7820a40eab32c2fc9aa1423dc Mon Sep 17 00:00:00 2001 From: bigguy345 Date: Sat, 20 Dec 2025 14:49:11 +0200 Subject: [PATCH] Documented JavaTextContainer.init --- .../gui/util/script/JavaTextContainer.java | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/main/java/noppes/npcs/client/gui/util/script/JavaTextContainer.java b/src/main/java/noppes/npcs/client/gui/util/script/JavaTextContainer.java index 48b198db5..5b2c96f2d 100644 --- a/src/main/java/noppes/npcs/client/gui/util/script/JavaTextContainer.java +++ b/src/main/java/noppes/npcs/client/gui/util/script/JavaTextContainer.java @@ -65,13 +65,21 @@ public class JavaTextContainer extends TextContainer { for (int lineIndex = 0; lineIndex < split.length; lineIndex++) { String l = split[lineIndex]; StringBuilder line = new StringBuilder(); + // Break the source line `l` into layout-friendly segments using `regexWord`. + // `regexWord` finds word tokens (letters/numbers/underscore/hyphen), newlines + // or the end-of-line. The loop takes substrings from the previous match + // index `i` up to the current `m.start()` so each `word` contains the + // next token plus any following delimiters (spaces, punctuation). + // This lets us measure and wrap at token boundaries rather than mid-word. Matcher m = regexWord.matcher(l); int i = 0; while (m.find()) { String word = l.substring(i, m.start()); if (ClientProxy.Font.width(line + word) > width - 10) { - lines.add(new LineData(line.toString(), totalChars, totalChars + line.length())); - totalChars += line.length(); + // Note: `end` is an exclusive offset into the full text (start..end). + // For wrapped lines we record the current `totalChars` as the start + // and compute the exclusive end as `start + line.length()`. + lines.add(new LineData(line.toString(), totalChars, (totalChars += line.length()))); line = new StringBuilder(); } line.append(word); @@ -88,9 +96,9 @@ public class JavaTextContainer extends TextContainer { continue; } int endOffset = isLastLine ? 0 : 1; - lines.add(new LineData(line.toString(), totalChars, totalChars + line.length() + endOffset)); - - totalChars += line.length() + endOffset; + // Note: `end` is exclusive. For non-last lines we include the trailing + // newline by adding `endOffset` (1), so previous line end == next line start. + lines.add(new LineData(line.toString(), totalChars, (totalChars += line.length() + endOffset))); } linesCount = lines.size(); totalHeight = linesCount * lineHeight;