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

asf-gitbox-commits pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tapestry-5-site-builder.git

commit 1d97169e9bdccc52f5aa75257bdbc4c573ab7da6
Author: Volker Lamp <[email protected]>
AuthorDate: Tue Jul 2 23:36:52 2024 +0200

    Added 'issue' and 'javadoc' macros; kroki diagrams.
---
 antora-playbook.yml      |  5 ++++
 build.gradle             |  7 ++++++
 lib/issue-processor.js   | 31 +++++++++++++++++++++++
 lib/javadoc-processor.js | 64 ++++++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 107 insertions(+)

diff --git a/antora-playbook.yml b/antora-playbook.yml
index a1f3299..91aaf3c 100644
--- a/antora-playbook.yml
+++ b/antora-playbook.yml
@@ -5,6 +5,11 @@ content:
   sources:
   - url: https://github.com/vjlamp/tapestry-antora-site-poc-content.git
     branches: [main, 5.*]
+asciidoc:
+  extensions:
+  - asciidoctor-kroki
+  - ./lib/issue-processor
+  - ./lib/javadoc-processor
 ui:
   bundle:
     url: 
https://gitlab.com/antora/antora-ui-default/-/jobs/artifacts/HEAD/raw/build/ui-bundle.zip?job=bundle-stable
diff --git a/build.gradle b/build.gradle
index a0e564d..47bbff3 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,3 +1,10 @@
 plugins {
     id 'org.antora' version '1.0.0'
 }
+
+antora {
+    packages = [
+        // '@antora/collector-extension': 'latest'
+        'asciidoctor-kroki' : 'latest'
+    ]
+}
diff --git a/lib/issue-processor.js b/lib/issue-processor.js
new file mode 100644
index 0000000..18d3d89
--- /dev/null
+++ b/lib/issue-processor.js
@@ -0,0 +1,31 @@
+/*
+= Processor for the javadoc: macro
+
+Generates a hyperlink to an issue tracker page.  
+
+== Usage
+issue:<id>[]
+
+where
+* id className is a fully qualified class name
+
+== Example
+issue:1040[]
+
+based on the example 
https://docs.asciidoctor.org/asciidoctor.js/latest/extend/extensions/inline-macro-processor/
+*/
+
+const BASE_URL = 'https://issues.apache.org/jira/browse';
+const ISSUE_PREFIX = 'TAP5-';
+
+module.exports = function (registry) {
+    registry.inlineMacro('issue', function() {
+        var self = this
+        self.process(function (parent, target) {
+            var label = `${ISSUE_PREFIX}${target}`
+            var url = `${BASE_URL}/${label}`
+            var link = `<a href="${url}">${label}</a>`
+            return self.createInline(parent, 'quoted', link)
+        })
+    })
+}
diff --git a/lib/javadoc-processor.js b/lib/javadoc-processor.js
new file mode 100644
index 0000000..005b6e0
--- /dev/null
+++ b/lib/javadoc-processor.js
@@ -0,0 +1,64 @@
+/*
+= Processor for the javadoc: macro
+
+Generates a hyperlink to a Javadoc page.  
+
+== Usage
+javadoc:<className>#<memberName>[<attributes>]
+
+where
+* className is a fully qualified class name
+* memberName (optional) is the name of a member of that class 
+* attributes is a comma-separated list of key-value pairs (key=value)
+
+supported attributes
+version:: the version partial of the url
+label:: the label to 
+
+== Example
+javadoc:org.apache.tapestry5.SymbolConstants#APPLICATION_CATALOG[version=5.3.7]
+
+based on the example 
https://docs.asciidoctor.org/asciidoctor.js/latest/extend/extensions/inline-macro-processor/
+
+*/
+
+const BASE_URL = 'https://tapestry.apache.org';
+
+
+module.exports = function (registry) {
+    registry.inlineMacro('javadoc', function() {
+        var self = this
+        self.process(function (parent, target, attrs) {
+
+            const pattern = /(?<className>[\w\.]*)(#(?<memberName>\w+))?/;
+
+            var matches = target.match(pattern);
+
+            var className = matches.groups.className;
+
+            var memberName = matches.groups.memberName;
+
+            var path = className.replaceAll('.', '/');
+
+            var simpleClassName = className.slice(target.lastIndexOf('.') + 1);
+
+            var version = attrs.version == undefined
+                ? 'current'
+                : attrs.version;
+
+            var memberSuffix = memberName == undefined
+                ? ''
+                : '#' + memberName;
+
+            var url = 
`${BASE_URL}/${version}/apidocs/${path}.html${memberSuffix}`;
+
+            var label = attrs.label == undefined
+                ? simpleClassName + (memberName != null ? ('.' + memberName) : 
'')
+                : attrs.label;
+
+            var link = `<a href="${url}">${label}</a>`;
+
+            return self.createInline(parent, 'quoted', link, {'type' : 
'monospaced'});
+        })
+    })
+}

Reply via email to