From c0479da9467322231c4fa22fe9591f860e5e6fbb Mon Sep 17 00:00:00 2001 From: Jeremy Landis Date: Sun, 31 Oct 2021 23:25:45 -0400 Subject: [PATCH] [alignment] Fix alignment issues so repeated processing works properly --- src/main/java/org/jsoup/nodes/Node.java | 4 ++++ src/main/java/org/jsoup/nodes/TextNode.java | 11 +++++++++-- src/test/java/org/jsoup/nodes/ElementTest.java | 2 +- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/jsoup/nodes/Node.java b/src/main/java/org/jsoup/nodes/Node.java index 993139579f..3dc936e74b 100644 --- a/src/main/java/org/jsoup/nodes/Node.java +++ b/src/main/java/org/jsoup/nodes/Node.java @@ -696,6 +696,10 @@ public String toString() { return outerHtml(); } + protected void indent(Appendable accum, int depth, Document.OutputSettings out, int lessSpace) throws IOException { + accum.append('\n').append(StringUtil.padding((depth * out.indentAmount()) - lessSpace, out.maxPaddingWidth())); + } + protected void indent(Appendable accum, int depth, Document.OutputSettings out) throws IOException { accum.append('\n').append(StringUtil.padding(depth * out.indentAmount(), out.maxPaddingWidth())); } diff --git a/src/main/java/org/jsoup/nodes/TextNode.java b/src/main/java/org/jsoup/nodes/TextNode.java index a7e3cd51fe..74da258dc9 100644 --- a/src/main/java/org/jsoup/nodes/TextNode.java +++ b/src/main/java/org/jsoup/nodes/TextNode.java @@ -89,8 +89,15 @@ void outerHtmlHead(Appendable accum, int depth, Document.OutputSettings out) thr if (parentIndent && StringUtil.startsWithNewline(coreValue()) && blank) // we are skippable whitespace return; - if (prettyPrint && ((siblingIndex == 0 && parent != null && parent.tag().formatAsBlock() && !blank) || (out.outline() && siblingNodes().size()>0 && !blank) )) - indent(accum, depth, out); + if (prettyPrint && ((siblingIndex() == 0 && parent != null && parent.tag().formatAsBlock() && !blank) || (out.outline() && !siblingNodes().isEmpty() && !blank) )) { + String normalized = StringUtil.normaliseWhitespace(coreValue()); + boolean startsWithSpace = normalized.startsWith(" "); + if (startsWithSpace) { + indent(accum, depth, out, 1); + } else { + indent(accum, depth, out); + } + } final boolean normaliseWhite = prettyPrint && !Element.preserveWhitespace(parentNode); final boolean stripWhite = prettyPrint && parentNode instanceof Document; diff --git a/src/test/java/org/jsoup/nodes/ElementTest.java b/src/test/java/org/jsoup/nodes/ElementTest.java index f1a6556f71..50736e9cdd 100644 --- a/src/test/java/org/jsoup/nodes/ElementTest.java +++ b/src/test/java/org/jsoup/nodes/ElementTest.java @@ -499,7 +499,7 @@ public void testPrettyAndOutlineWithEnDashBody() { Document document = Jsoup.parse(html); document.outputSettings().outline(true); - assertEquals("
\n 1:15\n –\n 2:15\n  p.m.\n
", document.body().html()); + assertEquals("
\n 1:15\n –\n 2:15\n p.m.\n
", document.body().html()); } @Test