This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch v3
in repository https://gitbox.apache.org/repos/asf/causeway.git
The following commit(s) were added to refs/heads/v3 by this push:
new 5f96fa61fc8 cherry picks commit
120e92be3eb213541ca8c8330d188d97376bd933 from main
5f96fa61fc8 is described below
commit 5f96fa61fc85ecfd1516dcba4359be0de14dab51
Author: Andi Huber <[email protected]>
AuthorDate: Thu Aug 28 19:46:40 2025 +0200
cherry picks commit 120e92be3eb213541ca8c8330d188d97376bd933 from main
fixes prism syntax highlighter infinite loop
---
.../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 8c20a684a3a..5c8b7f8849e 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;
@@ -26,8 +27,7 @@
import lombok.extern.log4j.Log4j2;
@Log4j2
-public record PrismHighlighter(
- ) implements UnaryOperator<String> {
+public record PrismHighlighter() implements UnaryOperator<String> {
/**
* Returns the highlighted HTML.
@@ -40,6 +40,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())) {
@@ -62,13 +64,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;
}