This is an automated email from the ASF dual-hosted git repository. Cole-Greer pushed a commit to branch docs-3.7 in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
commit 0b762576d86b9944a1dece3d6d51b8e61366458c Author: Cole Greer <[email protected]> AuthorDate: Thu May 21 17:24:32 2026 -0700 Strip callouts before CodeRay and re-inject as HTML conums CodeRay was escaping/mangling callout markers (<1>, <2>) during highlighting. Now callouts are extracted before highlighting, CodeRay processes clean source, and callout HTML is re-injected into the highlighted output at the correct line positions. --- .../gremlin/docs/GremlinTreeprocessor.java | 39 ++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/tools/tinkerpop-docs/src/main/java/org/apache/tinkerpop/gremlin/docs/GremlinTreeprocessor.java b/tools/tinkerpop-docs/src/main/java/org/apache/tinkerpop/gremlin/docs/GremlinTreeprocessor.java index ef2d4827ae..82ab272fbd 100644 --- a/tools/tinkerpop-docs/src/main/java/org/apache/tinkerpop/gremlin/docs/GremlinTreeprocessor.java +++ b/tools/tinkerpop-docs/src/main/java/org/apache/tinkerpop/gremlin/docs/GremlinTreeprocessor.java @@ -277,6 +277,45 @@ public class GremlinTreeprocessor extends Treeprocessor { private String highlightAsSource(final StructuralNode parent, final String lang, final String source) { if (source == null || source.isEmpty()) return ""; + // Strip callouts before highlighting, re-inject after + final String[] lines = source.split("\\r?\\n"); + final String[] calloutMarkers = new String[lines.length]; + final StringBuilder cleanSource = new StringBuilder(); + for (int i = 0; i < lines.length; i++) { + final java.util.regex.Matcher m = java.util.regex.Pattern + .compile("\\s*((<\\d+>\\s*)+)$").matcher(lines[i]); + if (m.find()) { + calloutMarkers[i] = m.group(1); + if (i > 0) cleanSource.append("\n"); + cleanSource.append(lines[i], 0, m.start()); + } else { + calloutMarkers[i] = null; + if (i > 0) cleanSource.append("\n"); + cleanSource.append(lines[i]); + } + } + + String highlighted = doHighlight(parent, lang, cleanSource.toString()); + + // Re-inject callouts as HTML conums + final String[] highlightedLines = highlighted.split("\\n", -1); + final StringBuilder result = new StringBuilder(); + for (int i = 0; i < highlightedLines.length; i++) { + if (i > 0) result.append("\n"); + result.append(highlightedLines[i]); + if (i < calloutMarkers.length && calloutMarkers[i] != null) { + final java.util.regex.Matcher nums = java.util.regex.Pattern + .compile("<(\\d+)>").matcher(calloutMarkers[i]); + while (nums.find()) { + result.append(" <span class=\"hide-when-copy\">//</span> <b class=\"conum invisible\">(") + .append(nums.group(1)).append(")</b>"); + } + } + } + return result.toString(); + } + + private String doHighlight(final StructuralNode parent, final String lang, final String source) { try { final org.jruby.Ruby ruby = org.asciidoctor.jruby.internal.JRubyRuntimeContext.get(parent); if (ruby == null) return escapeHtml(source);
