asciidoctor-foodogsquared-extensions 1.0.1 → 1.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.adoc +52 -0
- data/asciidoctor-foodogsquared-extensions.gemspec +3 -1
- data/lib/asciidoctor/foodogsquared/converter.rb +31 -0
- data/lib/asciidoctor/foodogsquared/extensions/chat-block.rb +26 -0
- data/lib/asciidoctor/foodogsquared/extensions/fdroid-inline-macro.rb +28 -0
- data/lib/asciidoctor/foodogsquared/extensions/flathub-inline-macro.rb +35 -0
- data/lib/asciidoctor/foodogsquared/extensions/git-blob-include-processor.rb +68 -0
- data/lib/asciidoctor/foodogsquared/extensions/github-include-processor.rb +70 -0
- data/lib/asciidoctor/foodogsquared/extensions/github-inline-macro.rb +38 -0
- data/lib/asciidoctor/foodogsquared/extensions/gitlab-include-processor.rb +60 -0
- data/lib/asciidoctor/foodogsquared/extensions/gitlab-inline-macro.rb +39 -0
- data/lib/asciidoctor/foodogsquared/extensions/ietf-rfc-inline-macro.rb +18 -0
- data/lib/asciidoctor/foodogsquared/extensions/man-inline-macro.rb +54 -0
- data/lib/asciidoctor/foodogsquared/extensions/musicbrainz-inline-macro.rb +47 -0
- data/lib/asciidoctor/foodogsquared/extensions/package-indices-macro.rb +58 -0
- data/lib/asciidoctor/foodogsquared/extensions/repology-inline-macro.rb +20 -0
- data/lib/asciidoctor/foodogsquared/extensions/swhid-include-processor.rb +55 -0
- data/lib/asciidoctor/foodogsquared/extensions/swhid-inline-macro.rb +28 -0
- data/lib/asciidoctor/foodogsquared/extensions/wikipedia-inline-macro.rb +23 -0
- data/lib/asciidoctor/foodogsquared/extensions.rb +56 -0
- data/lib/asciidoctor/foodogsquared/helpers.rb +26 -0
- data/lib/asciidoctor-foodogsquared-extensions.rb +2 -1
- metadata +35 -35
- data/lib/asciidoctor/chat-block-processor/README.adoc +0 -115
- data/lib/asciidoctor/chat-block-processor/extension.rb +0 -57
- data/lib/asciidoctor/fdroid-link-inline-macro/README.adoc +0 -36
- data/lib/asciidoctor/fdroid-link-inline-macro/extension.rb +0 -28
- data/lib/asciidoctor/flathub-link-inline-macro/README.adoc +0 -28
- data/lib/asciidoctor/flathub-link-inline-macro/extension.rb +0 -35
- data/lib/asciidoctor/foodogsquared-extensions.rb +0 -56
- data/lib/asciidoctor/git-blob-include-processor/README.adoc +0 -68
- data/lib/asciidoctor/git-blob-include-processor/extension.rb +0 -79
- data/lib/asciidoctor/github-link-inline-macro/README.adoc +0 -49
- data/lib/asciidoctor/github-link-inline-macro/extension.rb +0 -36
- data/lib/asciidoctor/github-raw-content-include-processor/README.adoc +0 -40
- data/lib/asciidoctor/github-raw-content-include-processor/extension.rb +0 -68
- data/lib/asciidoctor/gitlab-link-inline-macro/README.adoc +0 -37
- data/lib/asciidoctor/gitlab-link-inline-macro/extension.rb +0 -31
- data/lib/asciidoctor/gitlab-raw-content-include-processor/README.adoc +0 -44
- data/lib/asciidoctor/gitlab-raw-content-include-processor/extension.rb +0 -66
- data/lib/asciidoctor/helpers.rb +0 -20
- data/lib/asciidoctor/ietf-rfc-link-inline-macro/README.adoc +0 -27
- data/lib/asciidoctor/ietf-rfc-link-inline-macro/extension.rb +0 -16
- data/lib/asciidoctor/man-inline-macro/README.adoc +0 -51
- data/lib/asciidoctor/man-inline-macro/extension.rb +0 -45
- data/lib/asciidoctor/musicbrainz-link-inline-macro/README.adoc +0 -45
- data/lib/asciidoctor/musicbrainz-link-inline-macro/extension.rb +0 -47
- data/lib/asciidoctor/package-indices-link-macro/extension.rb +0 -56
- data/lib/asciidoctor/repology-link-inline-macro/README.adoc +0 -27
- data/lib/asciidoctor/repology-link-inline-macro/extension.rb +0 -18
- data/lib/asciidoctor/swhid-include-processor/README.adoc +0 -44
- data/lib/asciidoctor/swhid-include-processor/extension.rb +0 -53
- data/lib/asciidoctor/swhid-inline-macro/README.adoc +0 -54
- data/lib/asciidoctor/swhid-inline-macro/extension.rb +0 -26
- data/lib/asciidoctor/wikipedia-inline-macro/README.adoc +0 -30
- data/lib/asciidoctor/wikipedia-inline-macro/extension.rb +0 -21
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Asciidoctor::Foodogsquared::Extensions
|
4
|
+
class RepologyInlineMacro < Asciidoctor::Extensions::InlineMacroProcessor
|
5
|
+
use_dsl
|
6
|
+
|
7
|
+
named :repology
|
8
|
+
name_positional_attributes 'caption'
|
9
|
+
|
10
|
+
def process(parent, target, attrs)
|
11
|
+
doc = parent.document
|
12
|
+
text = attrs['caption'] || target
|
13
|
+
url = %(https://repology.org/project/#{target})
|
14
|
+
|
15
|
+
doc.register :links, url
|
16
|
+
|
17
|
+
create_anchor parent, text, type: :link, target: url
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'json'
|
4
|
+
require 'open-uri'
|
5
|
+
require 'uri'
|
6
|
+
|
7
|
+
module Asciidoctor::Foodogsquared::Extensions
|
8
|
+
class SWHIncludeProcessor < Asciidoctor::Extensions::IncludeProcessor
|
9
|
+
def handles?(target)
|
10
|
+
target.start_with? 'swh:'
|
11
|
+
end
|
12
|
+
|
13
|
+
def process(doc, reader, target, attributes)
|
14
|
+
swhid = target
|
15
|
+
swhid_core_identifier = swhid.split(';').at(0)
|
16
|
+
swhid_object_type = (swhid_core_identifier.split ':').at 2
|
17
|
+
|
18
|
+
unless (doc.safe <= Asciidoctor::SafeMode::SERVER) && (doc.attr? 'allow-uri-read')
|
19
|
+
raise %('swh:' include cannot be used in safe mode level > SERVER and without attribute 'allow-uri-read')
|
20
|
+
end
|
21
|
+
|
22
|
+
# We're already going to throw out anything that is not content object type
|
23
|
+
# just to make the later pipelines easier to construct.
|
24
|
+
if swhid_object_type != 'cnt'
|
25
|
+
warn %(SWHID '#{swhid_core_identifier}' is not of 'cnt' type; ignoring)
|
26
|
+
return reader
|
27
|
+
end
|
28
|
+
|
29
|
+
version = '1'
|
30
|
+
|
31
|
+
content = begin
|
32
|
+
uri = URI.parse %(https://archive.softwareheritage.org/api/#{version}/resolve/#{target}/)
|
33
|
+
|
34
|
+
headers = {
|
35
|
+
'Accept' => 'application/json'
|
36
|
+
}
|
37
|
+
|
38
|
+
headers['Authorization'] = "Bearer #{ENV['SWH_API_BEARER_TOKEN']}" if ENV['SWH_API_BEARER_TOKEN']
|
39
|
+
|
40
|
+
metadata = OpenURI.open_uri(uri, headers) { |f| JSON.parse(f.read) }
|
41
|
+
object_hash = metadata['object_id']
|
42
|
+
|
43
|
+
uri = URI.parse %(https://archive.softwareheritage.org/api/#{version}/content/sha1_git:#{object_hash}/raw/)
|
44
|
+
OpenURI.open_uri(uri, headers, &:read)
|
45
|
+
rescue OpenURI::HTTPError => e
|
46
|
+
warning = %(error while getting '#{swhid_core_identifier}': #{e})
|
47
|
+
warn warning
|
48
|
+
warning
|
49
|
+
end
|
50
|
+
|
51
|
+
reader.push_include content, target, target, 1, attributes
|
52
|
+
reader
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Asciidoctor::Foodogsquared::Extensions
|
4
|
+
class SWHInlineMacro < Asciidoctor::Extensions::InlineMacroProcessor
|
5
|
+
use_dsl
|
6
|
+
|
7
|
+
named :swh
|
8
|
+
name_positional_attributes 'caption'
|
9
|
+
|
10
|
+
def process(parent, target, attrs)
|
11
|
+
doc = parent.document
|
12
|
+
|
13
|
+
# We're only considering `swh:` starting with the scheme version. Also, it
|
14
|
+
# looks nice aesthetically.
|
15
|
+
swhid = target.start_with?('swh:') ? target : %(swh:#{target})
|
16
|
+
default_caption = if attrs.key? 'full-option'
|
17
|
+
swhid
|
18
|
+
else
|
19
|
+
swhid.split(';').at(0)
|
20
|
+
end
|
21
|
+
text = attrs['caption'] || default_caption
|
22
|
+
target = %(https://archive.softwareheritage.org/#{swhid})
|
23
|
+
|
24
|
+
doc.register :links, target
|
25
|
+
create_anchor parent, text, type: :link, target: target
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'uri'
|
4
|
+
|
5
|
+
module Asciidoctor::Foodogsquared::Extensions
|
6
|
+
class WikipediaInlineMacro < Asciidoctor::Extensions::InlineMacroProcessor
|
7
|
+
use_dsl
|
8
|
+
|
9
|
+
named :wikipedia
|
10
|
+
name_positional_attributes 'caption'
|
11
|
+
default_attributes 'lang' => 'en'
|
12
|
+
|
13
|
+
def process(parent, target, attrs)
|
14
|
+
caption = attrs['caption'] || target
|
15
|
+
parser = URI::Parser.new
|
16
|
+
page = parser.escape target
|
17
|
+
link = %(https://#{attrs['lang']}.wikipedia.org/wiki/#{page})
|
18
|
+
node = create_anchor parent, caption, type: :link, target: link
|
19
|
+
|
20
|
+
create_inline parent, :quoted, node.convert
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'asciidoctor'
|
4
|
+
require 'asciidoctor/extensions'
|
5
|
+
|
6
|
+
require_relative 'helpers'
|
7
|
+
|
8
|
+
require_relative 'extensions/man-inline-macro'
|
9
|
+
require_relative 'extensions/swhid-inline-macro'
|
10
|
+
require_relative 'extensions/swhid-include-processor'
|
11
|
+
require_relative 'extensions/github-inline-macro'
|
12
|
+
require_relative 'extensions/github-include-processor'
|
13
|
+
require_relative 'extensions/gitlab-inline-macro'
|
14
|
+
require_relative 'extensions/gitlab-include-processor'
|
15
|
+
require_relative 'extensions/chat-block'
|
16
|
+
require_relative 'extensions/git-blob-include-processor'
|
17
|
+
require_relative 'extensions/wikipedia-inline-macro'
|
18
|
+
require_relative 'extensions/package-indices-macro'
|
19
|
+
require_relative 'extensions/fdroid-inline-macro'
|
20
|
+
require_relative 'extensions/musicbrainz-inline-macro'
|
21
|
+
require_relative 'extensions/flathub-inline-macro'
|
22
|
+
require_relative 'extensions/repology-inline-macro'
|
23
|
+
require_relative 'extensions/ietf-rfc-inline-macro'
|
24
|
+
|
25
|
+
include Asciidoctor::Foodogsquared::Extensions
|
26
|
+
Asciidoctor::Extensions.register do
|
27
|
+
inline_macro ManInlineMacro
|
28
|
+
inline_macro IETFRFCInlineMacro
|
29
|
+
block ChatBlock if @document.basebackend? 'html'
|
30
|
+
|
31
|
+
inline_macro SWHInlineMacro
|
32
|
+
include_processor SWHIncludeProcessor
|
33
|
+
|
34
|
+
inline_macro GitHubInlineMacro
|
35
|
+
include_processor GitHubIncludeProcessor
|
36
|
+
|
37
|
+
inline_macro GitLabInlineMacro
|
38
|
+
include_processor GitLabIncludeProcessor
|
39
|
+
|
40
|
+
include_processor GitBlobIncludeProcessor
|
41
|
+
|
42
|
+
inline_macro WikipediaInlineMacro
|
43
|
+
|
44
|
+
# Package indices
|
45
|
+
inline_macro CtanInlineMacro
|
46
|
+
inline_macro PypiInlineMacro
|
47
|
+
inline_macro CratesIOInlineMacro
|
48
|
+
|
49
|
+
# App stores
|
50
|
+
inline_macro FDroidInlineMacro
|
51
|
+
inline_macro FlathubInlineMacro
|
52
|
+
|
53
|
+
# Databases
|
54
|
+
inline_macro MusicBrainzInlineMacro
|
55
|
+
inline_macro RepologyInlineMacro
|
56
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class String
|
4
|
+
def to_kebab
|
5
|
+
self.gsub(/\s+/, '-') # Replace all spaces with dashes.
|
6
|
+
.gsub(/[^a-zA-Z0-9-]/, '') # Remove all non-alphanumerical (and dashes) characters.
|
7
|
+
.gsub(/-+/, '-') # Reduce all dashes into only one.
|
8
|
+
.gsub(/^-|-+$/, '') # Remove all leading and trailing dashes.
|
9
|
+
.downcase
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
# The namespace for storing Asciidoctor. This is the entry point for the
|
14
|
+
# entirety of this project.
|
15
|
+
module Asciidoctor::Foodogsquared
|
16
|
+
NAME = 'asciidoctor-foodogsquared-custom-extensions'
|
17
|
+
VERSION = '1.2.1'
|
18
|
+
CONTACT_EMAIL = 'foodogsquared@foodogsquared.one'
|
19
|
+
USER_AGENT = "#{NAME}/#{VERSION} ( #{CONTACT_EMAIL} )".freeze
|
20
|
+
|
21
|
+
def warn_or_raise(doc, warning)
|
22
|
+
return raise warning if (doc.safe > Asciidoctor::SafeMode::SERVER) && !(doc.attr? 'allow-uri-read')
|
23
|
+
|
24
|
+
warn warning
|
25
|
+
end
|
26
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: asciidoctor-foodogsquared-extensions
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gabriel Arazas
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '1.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.0'
|
41
55
|
description: |2
|
42
56
|
foo-dogsquared's set of Asciidoctor extensions as a Gem. This is where I
|
43
57
|
implemented several pet features that will most likely never be a part of
|
@@ -52,39 +66,25 @@ files:
|
|
52
66
|
- README.adoc
|
53
67
|
- asciidoctor-foodogsquared-extensions.gemspec
|
54
68
|
- lib/asciidoctor-foodogsquared-extensions.rb
|
55
|
-
- lib/asciidoctor/
|
56
|
-
- lib/asciidoctor/
|
57
|
-
- lib/asciidoctor/
|
58
|
-
- lib/asciidoctor/fdroid-
|
59
|
-
- lib/asciidoctor/flathub-
|
60
|
-
- lib/asciidoctor/
|
61
|
-
- lib/asciidoctor/foodogsquared-
|
62
|
-
- lib/asciidoctor/
|
63
|
-
- lib/asciidoctor/
|
64
|
-
- lib/asciidoctor/
|
65
|
-
- lib/asciidoctor/
|
66
|
-
- lib/asciidoctor/
|
67
|
-
- lib/asciidoctor/
|
68
|
-
- lib/asciidoctor/
|
69
|
-
- lib/asciidoctor/
|
70
|
-
- lib/asciidoctor/
|
71
|
-
- lib/asciidoctor/
|
72
|
-
- lib/asciidoctor/
|
73
|
-
- lib/asciidoctor/
|
74
|
-
- lib/asciidoctor/ietf-rfc-link-inline-macro/extension.rb
|
75
|
-
- lib/asciidoctor/man-inline-macro/README.adoc
|
76
|
-
- lib/asciidoctor/man-inline-macro/extension.rb
|
77
|
-
- lib/asciidoctor/musicbrainz-link-inline-macro/README.adoc
|
78
|
-
- lib/asciidoctor/musicbrainz-link-inline-macro/extension.rb
|
79
|
-
- lib/asciidoctor/package-indices-link-macro/extension.rb
|
80
|
-
- lib/asciidoctor/repology-link-inline-macro/README.adoc
|
81
|
-
- lib/asciidoctor/repology-link-inline-macro/extension.rb
|
82
|
-
- lib/asciidoctor/swhid-include-processor/README.adoc
|
83
|
-
- lib/asciidoctor/swhid-include-processor/extension.rb
|
84
|
-
- lib/asciidoctor/swhid-inline-macro/README.adoc
|
85
|
-
- lib/asciidoctor/swhid-inline-macro/extension.rb
|
86
|
-
- lib/asciidoctor/wikipedia-inline-macro/README.adoc
|
87
|
-
- lib/asciidoctor/wikipedia-inline-macro/extension.rb
|
69
|
+
- lib/asciidoctor/foodogsquared/converter.rb
|
70
|
+
- lib/asciidoctor/foodogsquared/extensions.rb
|
71
|
+
- lib/asciidoctor/foodogsquared/extensions/chat-block.rb
|
72
|
+
- lib/asciidoctor/foodogsquared/extensions/fdroid-inline-macro.rb
|
73
|
+
- lib/asciidoctor/foodogsquared/extensions/flathub-inline-macro.rb
|
74
|
+
- lib/asciidoctor/foodogsquared/extensions/git-blob-include-processor.rb
|
75
|
+
- lib/asciidoctor/foodogsquared/extensions/github-include-processor.rb
|
76
|
+
- lib/asciidoctor/foodogsquared/extensions/github-inline-macro.rb
|
77
|
+
- lib/asciidoctor/foodogsquared/extensions/gitlab-include-processor.rb
|
78
|
+
- lib/asciidoctor/foodogsquared/extensions/gitlab-inline-macro.rb
|
79
|
+
- lib/asciidoctor/foodogsquared/extensions/ietf-rfc-inline-macro.rb
|
80
|
+
- lib/asciidoctor/foodogsquared/extensions/man-inline-macro.rb
|
81
|
+
- lib/asciidoctor/foodogsquared/extensions/musicbrainz-inline-macro.rb
|
82
|
+
- lib/asciidoctor/foodogsquared/extensions/package-indices-macro.rb
|
83
|
+
- lib/asciidoctor/foodogsquared/extensions/repology-inline-macro.rb
|
84
|
+
- lib/asciidoctor/foodogsquared/extensions/swhid-include-processor.rb
|
85
|
+
- lib/asciidoctor/foodogsquared/extensions/swhid-inline-macro.rb
|
86
|
+
- lib/asciidoctor/foodogsquared/extensions/wikipedia-inline-macro.rb
|
87
|
+
- lib/asciidoctor/foodogsquared/helpers.rb
|
88
88
|
homepage:
|
89
89
|
licenses:
|
90
90
|
- MIT
|
@@ -105,7 +105,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
105
105
|
- !ruby/object:Gem::Version
|
106
106
|
version: '0'
|
107
107
|
requirements: []
|
108
|
-
rubygems_version: 3.4.
|
108
|
+
rubygems_version: 3.4.20
|
109
109
|
signing_key:
|
110
110
|
specification_version: 4
|
111
111
|
summary: foo-dogsquared's custom Asciidoctor extensions
|
@@ -1,115 +0,0 @@
|
|
1
|
-
= Chat block processor
|
2
|
-
:toc:
|
3
|
-
|
4
|
-
|
5
|
-
A link:https://docs.asciidoctor.org/asciidoctor/latest/extensions/block-processor/[block processor] that adds a a dialog box style to the block.
|
6
|
-
Exclusive to the HTML backend.
|
7
|
-
|
8
|
-
|
9
|
-
== Synopsis
|
10
|
-
|
11
|
-
....
|
12
|
-
[chat, $AVATARNAME, $AVATARSTATE, $ATTRS...]
|
13
|
-
====
|
14
|
-
$CONTENT
|
15
|
-
====
|
16
|
-
....
|
17
|
-
|
18
|
-
The avatar name is the name of the folder to be retrieved from the `avatarsdir` attribute.
|
19
|
-
The directory enforces a certain structure which can be seen in <<extra-notes>>.
|
20
|
-
|
21
|
-
Both the avatar name and the state are to be converted to snake case (e.g., `El Pablo` to `el_pablo`) for the image path.
|
22
|
-
|
23
|
-
|
24
|
-
== Attributes
|
25
|
-
|
26
|
-
* `avatarsdir` is the folder containing the avatars' stickers.
|
27
|
-
This is explained in detail from the <<extra-notes>> section.
|
28
|
-
|
29
|
-
* `avatarstype` is similar to `icontype` attribute except this is used for the avatar stickers.
|
30
|
-
The default value is `webp`.
|
31
|
-
|
32
|
-
* `state` is the sticker to be retrieved from the avatars directory.
|
33
|
-
It has a default value of `default`.
|
34
|
-
You could also use this attribute instead of the `$AVATARSTATE` positional argument for whatever reason.
|
35
|
-
|
36
|
-
* `name` is the canonical name of the avatar.
|
37
|
-
This is used for titles and alts in the internal image block.
|
38
|
-
By default, this is the same as the given avatar.
|
39
|
-
|
40
|
-
|
41
|
-
[#extra-notes]
|
42
|
-
== Extra notes
|
43
|
-
|
44
|
-
This component has some prerequisites for this to fully work specifically with `avatarsdir` attribute that contains a list of avatars and their stickers.
|
45
|
-
By default, this value is at the `avatars` subdirectory of the `iconsdir` attribute.
|
46
|
-
It is recommended to set this value yourself.
|
47
|
-
+
|
48
|
-
--
|
49
|
-
This enforces a certain structure where the root directory contains a list of folders representing the avatar with each of the folder containing stickers which represents their state.
|
50
|
-
For example, here's what `avatarsdir` could contain following the expected structure.
|
51
|
-
|
52
|
-
[source]
|
53
|
-
----
|
54
|
-
./static/icons/avatars/
|
55
|
-
├── ezran/
|
56
|
-
│ ├── crisis.webp
|
57
|
-
│ ├── default.webp
|
58
|
-
│ ├── sad.webp
|
59
|
-
│ └── shocked.webp
|
60
|
-
└── foodogsquared/
|
61
|
-
├── crisis.webp
|
62
|
-
├── default.webp
|
63
|
-
├── sad.webp
|
64
|
-
└── shocked.webp
|
65
|
-
----
|
66
|
-
--
|
67
|
-
|
68
|
-
|
69
|
-
== Example usage
|
70
|
-
|
71
|
-
Let's assume `avatarsdir` is set to the `static/icons/avatars` with the following file structure.
|
72
|
-
|
73
|
-
[source]
|
74
|
-
----
|
75
|
-
./static/icons/avatars/
|
76
|
-
├── ezran/
|
77
|
-
│ ├── crisis.webp
|
78
|
-
│ ├── default.webp
|
79
|
-
│ ├── sad.webp
|
80
|
-
│ └── shocked.webp
|
81
|
-
├── el-pablo/
|
82
|
-
│ ├── crisis.webp
|
83
|
-
│ ├── default.webp
|
84
|
-
│ ├── ghastly.webp
|
85
|
-
│ ├── melodramatic.webp
|
86
|
-
│ ├── sad.webp
|
87
|
-
│ └── shocked.webp
|
88
|
-
└── foodogsquared/
|
89
|
-
├── crisis.webp
|
90
|
-
├── default.webp
|
91
|
-
├── sad.webp
|
92
|
-
└── shocked.webp
|
93
|
-
----
|
94
|
-
|
95
|
-
- The following block should get the default image for `foodogsquared` which is in `./static/icons/avatars/foodogsquared/default.webp`.
|
96
|
-
+
|
97
|
-
....
|
98
|
-
[chat, foodogsquared]
|
99
|
-
====
|
100
|
-
Hello there!
|
101
|
-
====
|
102
|
-
....
|
103
|
-
|
104
|
-
- The following block should contain El Pablo's melodramatic dialog state.
|
105
|
-
Take note of the resulting path for the image which is in kebab-case.
|
106
|
-
+
|
107
|
-
....
|
108
|
-
[chat, El Pablo, state=melodramatic]
|
109
|
-
====
|
110
|
-
What tragedy is happening here!
|
111
|
-
I couldn't take it.
|
112
|
-
|
113
|
-
__Please__.
|
114
|
-
====
|
115
|
-
....
|
@@ -1,57 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
class ChatBlock < Asciidoctor::Extensions::BlockProcessor
|
4
|
-
use_dsl
|
5
|
-
|
6
|
-
named :chat
|
7
|
-
on_context :example
|
8
|
-
name_positional_attributes 'avatar', 'state'
|
9
|
-
default_attributes 'state' => 'default'
|
10
|
-
|
11
|
-
def process(parent, reader, attrs)
|
12
|
-
block = create_block parent, :pass, nil, attrs, content_model: :compound
|
13
|
-
block.add_role('dialogblock')
|
14
|
-
|
15
|
-
# You can think of this section as a pipeline constructing the HTML
|
16
|
-
# component for this block. Specifically, we're building one component that
|
17
|
-
# contains two output: the dialog image of our avatar and its content.
|
18
|
-
attrs['name'] ||= attrs['avatar']
|
19
|
-
|
20
|
-
block << (create_html_fragment block, %(
|
21
|
-
<div role="figure" class="dialogblock dialogblock__box dialogblock__avatar--#{attrs['avatar']} #{attrs['role']}">
|
22
|
-
<div class="dialogblock dialogblock__avatar">
|
23
|
-
))
|
24
|
-
|
25
|
-
attrs['avatarsdir'] ||= File.expand_path('./avatars', attrs['iconsdir'])
|
26
|
-
attrs['avatarstype'] ||= 'avif'
|
27
|
-
|
28
|
-
avatar_sticker = "#{attrs['avatar'].to_kebab}/#{attrs['state'].to_kebab}.#{attrs['avatarstype']}"
|
29
|
-
avatar_img_attrs = {
|
30
|
-
'target' => parent.image_uri(avatar_sticker, 'avatarsdir'),
|
31
|
-
'alt' => attrs['name']
|
32
|
-
}
|
33
|
-
avatar_imgblock = create_image_block block, avatar_img_attrs
|
34
|
-
|
35
|
-
block << avatar_imgblock
|
36
|
-
block << (create_html_fragment block, %(
|
37
|
-
</div>
|
38
|
-
<div class="dialogblock dialogblock__text">
|
39
|
-
<small class="dialogblock dialogblock__avatar-name">#{attrs['name']}</small>
|
40
|
-
))
|
41
|
-
|
42
|
-
parse_content block, reader
|
43
|
-
|
44
|
-
block << (create_html_fragment block, %(
|
45
|
-
</div>
|
46
|
-
</div>
|
47
|
-
))
|
48
|
-
|
49
|
-
block
|
50
|
-
end
|
51
|
-
|
52
|
-
private
|
53
|
-
|
54
|
-
def create_html_fragment(parent, html, attributes = nil)
|
55
|
-
create_block parent, :pass, html, attributes
|
56
|
-
end
|
57
|
-
end
|
@@ -1,36 +0,0 @@
|
|
1
|
-
= F-droid link inline macro
|
2
|
-
:toc:
|
3
|
-
|
4
|
-
|
5
|
-
An inline macro as a shorthand for F-droid links.
|
6
|
-
|
7
|
-
|
8
|
-
== Synopsis
|
9
|
-
|
10
|
-
[source, asciidoc]
|
11
|
-
----
|
12
|
-
fdroid:$APP_ID[$CAPTION]
|
13
|
-
----
|
14
|
-
|
15
|
-
Where...
|
16
|
-
|
17
|
-
- `$APP_ID` is the application ID of the program (e.g., `org.moire.ultrasonic`).
|
18
|
-
|
19
|
-
- `$CAPTION` is the link text.
|
20
|
-
By default, it will use the display name of the application from its link:https://gitlab.com/fdroid/fdroiddata/[metadata repository].
|
21
|
-
In other words, it will create an additional network request.
|
22
|
-
|
23
|
-
|
24
|
-
== Attributes
|
25
|
-
|
26
|
-
- `lang` is the language page to be linked.
|
27
|
-
By default, it links to the English page of `en`.
|
28
|
-
|
29
|
-
|
30
|
-
== Example usage
|
31
|
-
|
32
|
-
- `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'.
|
33
|
-
|
34
|
-
- `fdroid:org.moire.ultrasonic[Hello there]` is the same as previous item but with the link text replaced with 'Hello there'.
|
35
|
-
|
36
|
-
- `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].
|
@@ -1,28 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'open-uri'
|
4
|
-
require 'yaml'
|
5
|
-
|
6
|
-
class FDroidLinkInlineMacro < Asciidoctor::Extensions::InlineMacroProcessor
|
7
|
-
use_dsl
|
8
|
-
|
9
|
-
named :fdroid
|
10
|
-
name_positional_attributes 'caption'
|
11
|
-
default_attributes 'lang' => 'en'
|
12
|
-
|
13
|
-
def process(parent, target, attrs)
|
14
|
-
doc = parent.document
|
15
|
-
|
16
|
-
app_id = target
|
17
|
-
app_metadata_uri = %(https://gitlab.com/fdroid/fdroiddata/-/raw/master/metadata/#{app_id}.yml)
|
18
|
-
|
19
|
-
if attrs['caption'].nil?
|
20
|
-
metadata = OpenURI.open_uri(app_metadata_uri) { |f| YAML.safe_load(f.read) }
|
21
|
-
attrs['caption'] = metadata['AutoName']
|
22
|
-
end
|
23
|
-
|
24
|
-
url = %(https://f-droid.org/#{attrs['lang']}/packages/#{app_id})
|
25
|
-
doc.register :links, url
|
26
|
-
create_anchor parent, attrs['caption'], type: :link, target: url
|
27
|
-
end
|
28
|
-
end
|
@@ -1,28 +0,0 @@
|
|
1
|
-
= Flathub link inline macro
|
2
|
-
:toc:
|
3
|
-
|
4
|
-
|
5
|
-
A shorthand for linking applications from link:https://flathub.org[FlatHub].
|
6
|
-
|
7
|
-
|
8
|
-
== Synopsis
|
9
|
-
|
10
|
-
[source, asciidoc]
|
11
|
-
----
|
12
|
-
flathub:$APP_ID[$CAPTION]
|
13
|
-
----
|
14
|
-
|
15
|
-
Where...
|
16
|
-
|
17
|
-
- `$APP_ID` is the application ID of the program on Flathub.
|
18
|
-
|
19
|
-
- `$CAPTION` is the link text to be used.
|
20
|
-
By default, it will get the appstream metadata from FlatHub and use the display name.
|
21
|
-
Take note it creates an additional network request to get the name.
|
22
|
-
|
23
|
-
|
24
|
-
== Example usage
|
25
|
-
|
26
|
-
- `flathub:org.gnome.design.IconLibrary[]` links to the link:https://flathub.org/apps/org.gnome.design.IconLibrary[FlatHub page of GNOME Icon Library] with `Icon Library` as the link text.
|
27
|
-
|
28
|
-
- `flathub:org.gnome.design.IconLibrary[GNOME Icon Library]` is the same as the previous list item but with its link text replaced with `GNOME Icon Library`.
|
@@ -1,35 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'json'
|
4
|
-
require 'open-uri'
|
5
|
-
|
6
|
-
class FlathubLinkInlineMacro < Asciidoctor::Extensions::InlineMacroProcessor
|
7
|
-
use_dsl
|
8
|
-
|
9
|
-
named :flathub
|
10
|
-
name_positional_attributes 'caption'
|
11
|
-
|
12
|
-
def process(parent, target, attrs)
|
13
|
-
doc = parent.document
|
14
|
-
|
15
|
-
# FlatHub API seems to have no documentation aside from the source code.
|
16
|
-
# You can easily infer the API with its source code at
|
17
|
-
# https://github.com/flathub/website.
|
18
|
-
app_id = target
|
19
|
-
app_metadata_uri = %(https://flathub.org/api/v2/appstream/#{app_id})
|
20
|
-
|
21
|
-
headers = {
|
22
|
-
'Accept' => 'application/json',
|
23
|
-
'User-Agent' => ::Asciidoctor::FoodogsquaredCustomExtensions::USER_AGENT
|
24
|
-
}
|
25
|
-
|
26
|
-
if attrs['caption'].nil?
|
27
|
-
metadata = OpenURI.open_uri(app_metadata_uri, headers) { |f| JSON.parse(f.read) }
|
28
|
-
attrs['caption'] = metadata['name']
|
29
|
-
end
|
30
|
-
|
31
|
-
url = %(https://flathub.org/apps/#{app_id})
|
32
|
-
doc.register :links, url
|
33
|
-
create_anchor parent, attrs['caption'], type: :link, target: url
|
34
|
-
end
|
35
|
-
end
|
@@ -1,56 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'asciidoctor'
|
4
|
-
require 'asciidoctor/extensions'
|
5
|
-
|
6
|
-
require_relative 'helpers'
|
7
|
-
|
8
|
-
require_relative 'man-inline-macro/extension'
|
9
|
-
require_relative 'swhid-inline-macro/extension'
|
10
|
-
require_relative 'swhid-include-processor/extension'
|
11
|
-
require_relative 'github-link-inline-macro/extension'
|
12
|
-
require_relative 'github-raw-content-include-processor/extension'
|
13
|
-
require_relative 'gitlab-link-inline-macro/extension'
|
14
|
-
require_relative 'gitlab-raw-content-include-processor/extension'
|
15
|
-
require_relative 'chat-block-processor/extension'
|
16
|
-
require_relative 'git-blob-include-processor/extension'
|
17
|
-
require_relative 'wikipedia-inline-macro/extension'
|
18
|
-
require_relative 'package-indices-link-macro/extension'
|
19
|
-
require_relative 'fdroid-link-inline-macro/extension'
|
20
|
-
require_relative 'musicbrainz-link-inline-macro/extension'
|
21
|
-
require_relative 'flathub-link-inline-macro/extension'
|
22
|
-
require_relative 'repology-link-inline-macro/extension'
|
23
|
-
require_relative 'ietf-rfc-link-inline-macro/extension'
|
24
|
-
|
25
|
-
Asciidoctor::Extensions.register do
|
26
|
-
inline_macro ManInlineMacro
|
27
|
-
inline_macro IETFRFCLinkInlineMacro
|
28
|
-
block ChatBlock if @document.basebackend? 'html'
|
29
|
-
|
30
|
-
inline_macro SWHInlineMacro
|
31
|
-
include_processor SWHIDIncludeProcessor
|
32
|
-
|
33
|
-
inline_macro GitHubLinkInlineMacro
|
34
|
-
include_processor GitHubRawIncludeProcessor
|
35
|
-
|
36
|
-
inline_macro GitLabLinkInlineMacro
|
37
|
-
include_processor GitLabRawIncludeProcessor
|
38
|
-
|
39
|
-
include_processor GitBlobIncludeProcessor
|
40
|
-
preprocessor GitContentBranchAttributePreprocessor
|
41
|
-
|
42
|
-
inline_macro WikipediaInlineMacro
|
43
|
-
|
44
|
-
# Package indices
|
45
|
-
inline_macro CtanLinkInlineMacro
|
46
|
-
inline_macro PypiLinkInlineMacro
|
47
|
-
inline_macro CratesIOLinkInlineMacro
|
48
|
-
|
49
|
-
# App stores
|
50
|
-
inline_macro FDroidLinkInlineMacro
|
51
|
-
inline_macro FlathubLinkInlineMacro
|
52
|
-
|
53
|
-
# Databases
|
54
|
-
inline_macro MusicBrainzLinkInlineMacro
|
55
|
-
inline_macro RepologyLinkInlineMacro
|
56
|
-
end
|