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'}); + }) + }) +}
