This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch v4
in repository https://gitbox.apache.org/repos/asf/causeway.git


The following commit(s) were added to refs/heads/v4 by this push:
     new 120e92be3eb CAUSEWAY-3892: fixes PrismHighlighter; due to some changes 
to how JSoup traverses document nodes
120e92be3eb is described below

commit 120e92be3eb213541ca8c8330d188d97376bd933
Author: Andi Huber <[email protected]>
AuthorDate: Thu Aug 28 19:46:40 2025 +0200

    CAUSEWAY-3892: fixes PrismHighlighter; due to some changes to how JSoup
    traverses document nodes
---
 .../viewer/commons/prism/PrismHighlighter.java         | 18 +++++++++++++++---
 .../causeway/viewer/commons/prism/PrismUtils.java      |  2 +-
 2 files changed, 16 insertions(+), 4 deletions(-)

diff --git 
a/viewers/commons/prism/src/main/java/org/apache/causeway/viewer/commons/prism/PrismHighlighter.java
 
b/viewers/commons/prism/src/main/java/org/apache/causeway/viewer/commons/prism/PrismHighlighter.java
index b590cadcc89..81564e25138 100644
--- 
a/viewers/commons/prism/src/main/java/org/apache/causeway/viewer/commons/prism/PrismHighlighter.java
+++ 
b/viewers/commons/prism/src/main/java/org/apache/causeway/viewer/commons/prism/PrismHighlighter.java
@@ -18,6 +18,7 @@
  */
 package org.apache.causeway.viewer.commons.prism;
 
+import java.util.ArrayList;
 import java.util.function.UnaryOperator;
 
 import org.jsoup.Jsoup;
@@ -27,8 +28,7 @@
 import lombok.extern.slf4j.Slf4j;
 
 @Slf4j
-public record PrismHighlighter(
-        ) implements UnaryOperator<String> {
+public record PrismHighlighter() implements UnaryOperator<String> {
 
     /**
      * Returns the highlighted HTML.
@@ -41,6 +41,8 @@ public String apply(final String htmlContent) {
 
         //var tt = org.apache.causeway.commons.internal.base._Timing.now();
 
+        var replacements = new ArrayList<NodeReplacement>();
+
         doc.traverse((final Node node, final int depth)->{
             if(node instanceof Element element
                 && "code".equals(node.nodeName())) {
@@ -63,13 +65,23 @@ public String apply(final String htmlContent) {
                 //<pre class="highlight language-%s">
                 node.parent().attr("class", "highlight 
language-%s".formatted(prismLanguage.languageId()));
 
-                node.replaceWith(newNode);
+                replacements.add(new NodeReplacement(element, newNode));
             }
         });
 
+        replacements.forEach(NodeReplacement::apply);
+
         //tt.stop();System.err.printf("context took %s%n", tt);
 
         return doc.body().html();
     }
 
+    private record NodeReplacement(
+            Element oldNode,
+            Element newNode) {
+        void apply() {
+            oldNode.replaceWith(newNode);
+        }
+    }
+
 }
diff --git 
a/viewers/commons/prism/src/main/java/org/apache/causeway/viewer/commons/prism/PrismUtils.java
 
b/viewers/commons/prism/src/main/java/org/apache/causeway/viewer/commons/prism/PrismUtils.java
index 9b9256cef26..567920985ec 100644
--- 
a/viewers/commons/prism/src/main/java/org/apache/causeway/viewer/commons/prism/PrismUtils.java
+++ 
b/viewers/commons/prism/src/main/java/org/apache/causeway/viewer/commons/prism/PrismUtils.java
@@ -67,7 +67,7 @@ String mostCommonGrammerAsJs() {
 
     @SneakyThrows
     Context createPrismContext() {
-        var context = Context.newBuilder().engine(ENGINE.get()). build();
+        var context = Context.newBuilder().engine(ENGINE.get()).build();
         context.eval(PRISM_SOURCE.get());
         return context;
     }

Reply via email to