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;
}