From 7ddcd9be707833f2958da5e8ba839a0cfceefc92 Mon Sep 17 00:00:00 2001 From: Gabriel Arazas Date: Sat, 27 May 2023 16:16:12 +0800 Subject: [PATCH] Add shorthand link macro for F-Droid --- .../fdroid-link-inline-macro/README.adoc | 36 +++++++++++++++++++ .../fdroid-link-inline-macro/extension.rb | 29 +++++++++++++++ lib/asciidoctor/foodogsquared-extensions.rb | 2 ++ 3 files changed, 67 insertions(+) create mode 100644 lib/asciidoctor/fdroid-link-inline-macro/README.adoc create mode 100644 lib/asciidoctor/fdroid-link-inline-macro/extension.rb diff --git a/lib/asciidoctor/fdroid-link-inline-macro/README.adoc b/lib/asciidoctor/fdroid-link-inline-macro/README.adoc new file mode 100644 index 0000000..f3e43f0 --- /dev/null +++ b/lib/asciidoctor/fdroid-link-inline-macro/README.adoc @@ -0,0 +1,36 @@ += F-droid link inline macro +:toc: + + +An inline macro as a shorthand for F-droid links. + + +== Synopsis + +[source, asciidoc] +---- +fdroid:$APP_ID[$CAPTION] +---- + +Where... + +- `$APP_ID` is the application ID of the program (e.g., `org.moire.ultrasonic`). + +- `$CAPTION` is the link text. +By default, it will use the display name of the application from its link:https://gitlab.com/fdroid/fdroiddata/[metadata repository]. +In other words, it will create an additional network request. + + +== Attributes + +- `lang` is the language page to be linked. +By default, it links to the English page of `en`. + + +== Example usage + +- `fdroid:org.moire.ultrasonic[]` should link to the link:https://f-droid.org/en/packages/org.moire.ultrasonic/[F-Droid page for Ultrasonic] with the link text 'Ultrasonic'. + +- `fdroid:org.moire.ultrasonic[Hello there]` is the same as previous item but with the link text replaced with 'Hello there'. + +- `fdroid:org.moire.ultrasonic[lang=it]` is the same as the first list item but links to the link:https://f-droid.org/it/packages/org.moire.ultrasonic/[Italian page]. diff --git a/lib/asciidoctor/fdroid-link-inline-macro/extension.rb b/lib/asciidoctor/fdroid-link-inline-macro/extension.rb new file mode 100644 index 0000000..72ff7b9 --- /dev/null +++ b/lib/asciidoctor/fdroid-link-inline-macro/extension.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true + +require 'open-uri' +require 'open-uri/cached' +require 'yaml' + +class FDroidLinkInlineMacro < Asciidoctor::Extensions::InlineMacroProcessor + use_dsl + + named :fdroid + name_positional_attributes 'caption' + default_attributes 'lang' => 'en' + + def process(parent, target, attrs) + doc = parent.document + + app_id = target + app_metadata_uri = %(https://gitlab.com/fdroid/fdroiddata/-/raw/master/metadata/#{app_id}.yml) + + if attrs['caption'].nil? + metadata = OpenURI.open_uri(app_metadata_uri) { |f| YAML.safe_load(f.read) } + attrs['caption'] = metadata['AutoName'] + end + + url = %(https://f-droid.org/#{attrs['lang']}/packages/#{app_id}) + doc.register :links, url + create_anchor parent, attrs['caption'], type: :link, target: url + end +end diff --git a/lib/asciidoctor/foodogsquared-extensions.rb b/lib/asciidoctor/foodogsquared-extensions.rb index f2ad5ce..f689658 100644 --- a/lib/asciidoctor/foodogsquared-extensions.rb +++ b/lib/asciidoctor/foodogsquared-extensions.rb @@ -16,6 +16,7 @@ require_relative 'chat-block-processor/extension' require_relative 'git-blob-include-processor/extension' require_relative 'wikipedia-inline-macro/extension' require_relative 'package-indices-link-macro/extension' +require_relative 'fdroid-link-inline-macro/extension' Asciidoctor::Extensions.register do inline_macro ManInlineMacro @@ -38,4 +39,5 @@ Asciidoctor::Extensions.register do inline_macro CtanLinkInlineMacro inline_macro PypiLinkInlineMacro inline_macro CratesIOLinkInlineMacro + inline_macro FDroidLinkInlineMacro end