asciidoctor-foodogsquared-extensions 1.1.0 → 1.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (58) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.adoc +21 -0
  3. data/asciidoctor-foodogsquared-extensions.gemspec +1 -1
  4. data/lib/asciidoctor/foodogsquared/converter.rb +31 -0
  5. data/lib/asciidoctor/foodogsquared/extensions/chat-block.rb +26 -0
  6. data/lib/asciidoctor/foodogsquared/extensions/fdroid-inline-macro.rb +28 -0
  7. data/lib/asciidoctor/foodogsquared/extensions/flathub-inline-macro.rb +35 -0
  8. data/lib/asciidoctor/foodogsquared/extensions/git-blob-include-processor.rb +68 -0
  9. data/lib/asciidoctor/foodogsquared/extensions/github-include-processor.rb +70 -0
  10. data/lib/asciidoctor/foodogsquared/extensions/github-inline-macro.rb +38 -0
  11. data/lib/asciidoctor/foodogsquared/extensions/gitlab-include-processor.rb +60 -0
  12. data/lib/asciidoctor/foodogsquared/extensions/gitlab-inline-macro.rb +39 -0
  13. data/lib/asciidoctor/foodogsquared/extensions/ietf-rfc-inline-macro.rb +18 -0
  14. data/lib/asciidoctor/foodogsquared/extensions/man-inline-macro.rb +54 -0
  15. data/lib/asciidoctor/foodogsquared/extensions/musicbrainz-inline-macro.rb +47 -0
  16. data/lib/asciidoctor/foodogsquared/extensions/package-indices-macro.rb +58 -0
  17. data/lib/asciidoctor/foodogsquared/extensions/repology-inline-macro.rb +20 -0
  18. data/lib/asciidoctor/foodogsquared/extensions/swhid-include-processor.rb +55 -0
  19. data/lib/asciidoctor/foodogsquared/extensions/swhid-inline-macro.rb +28 -0
  20. data/lib/asciidoctor/foodogsquared/extensions/wikipedia-inline-macro.rb +23 -0
  21. data/lib/asciidoctor/foodogsquared/extensions.rb +56 -0
  22. data/lib/asciidoctor/foodogsquared/helpers.rb +26 -0
  23. data/lib/asciidoctor-foodogsquared-extensions.rb +2 -1
  24. metadata +21 -36
  25. data/lib/asciidoctor/chat-block-processor/README.adoc +0 -115
  26. data/lib/asciidoctor/chat-block-processor/extension.rb +0 -61
  27. data/lib/asciidoctor/fdroid-link-inline-macro/README.adoc +0 -36
  28. data/lib/asciidoctor/fdroid-link-inline-macro/extension.rb +0 -26
  29. data/lib/asciidoctor/flathub-link-inline-macro/README.adoc +0 -28
  30. data/lib/asciidoctor/flathub-link-inline-macro/extension.rb +0 -33
  31. data/lib/asciidoctor/foodogsquared-extensions.rb +0 -55
  32. data/lib/asciidoctor/git-blob-include-processor/README.adoc +0 -57
  33. data/lib/asciidoctor/git-blob-include-processor/extension.rb +0 -66
  34. data/lib/asciidoctor/github-link-inline-macro/README.adoc +0 -49
  35. data/lib/asciidoctor/github-link-inline-macro/extension.rb +0 -36
  36. data/lib/asciidoctor/github-raw-content-include-processor/README.adoc +0 -40
  37. data/lib/asciidoctor/github-raw-content-include-processor/extension.rb +0 -68
  38. data/lib/asciidoctor/gitlab-link-inline-macro/README.adoc +0 -40
  39. data/lib/asciidoctor/gitlab-link-inline-macro/extension.rb +0 -37
  40. data/lib/asciidoctor/gitlab-raw-content-include-processor/README.adoc +0 -44
  41. data/lib/asciidoctor/gitlab-raw-content-include-processor/extension.rb +0 -66
  42. data/lib/asciidoctor/helpers.rb +0 -20
  43. data/lib/asciidoctor/ietf-rfc-link-inline-macro/README.adoc +0 -27
  44. data/lib/asciidoctor/ietf-rfc-link-inline-macro/extension.rb +0 -16
  45. data/lib/asciidoctor/man-inline-macro/README.adoc +0 -51
  46. data/lib/asciidoctor/man-inline-macro/extension.rb +0 -50
  47. data/lib/asciidoctor/musicbrainz-link-inline-macro/README.adoc +0 -45
  48. data/lib/asciidoctor/musicbrainz-link-inline-macro/extension.rb +0 -45
  49. data/lib/asciidoctor/package-indices-link-macro/extension.rb +0 -56
  50. data/lib/asciidoctor/repology-link-inline-macro/README.adoc +0 -27
  51. data/lib/asciidoctor/repology-link-inline-macro/extension.rb +0 -18
  52. data/lib/asciidoctor/spdx-link-inline-macro/README.adoc +0 -26
  53. data/lib/asciidoctor/swhid-include-processor/README.adoc +0 -44
  54. data/lib/asciidoctor/swhid-include-processor/extension.rb +0 -53
  55. data/lib/asciidoctor/swhid-inline-macro/README.adoc +0 -54
  56. data/lib/asciidoctor/swhid-inline-macro/extension.rb +0 -26
  57. data/lib/asciidoctor/wikipedia-inline-macro/README.adoc +0 -30
  58. data/lib/asciidoctor/wikipedia-inline-macro/extension.rb +0 -21
@@ -1,57 +0,0 @@
1
- = Git blob include processor
2
- :toc:
3
-
4
-
5
- An include processor that includes content from the current Git repo.
6
- The use case for this is specifically for creating dedicated branches for certain content.
7
-
8
-
9
- == Synopsis
10
-
11
- [source, asciidoc]
12
- ----
13
- include::git:$REVSPEC[]
14
- ----
15
-
16
- Where `$REVSPEC` is a revision as specified in link:https://manpages.debian.org/gitrevisions.7[gitrevisions.7].
17
- Take note this include processor only accepts a blob object's content to be extracted.
18
- This is meant to be used with other attributes.
19
- See <<Attributes>> for more details.
20
-
21
- If the resulting operation ends in an error (i.e., non-existing revision, file, something went wrong), it should log a warning and transclude an error.
22
-
23
-
24
- == Attributes
25
-
26
- - `gitrepo` is the path to the Git repo.
27
- By default, it is the base directory of the document.
28
-
29
- - `path` is the filepath to be retrieved from the revision.
30
- When used with `diff`, it changes into a semicolon-delimited (`;`) list of files to make diffs with multiple files.
31
-
32
- - `context-lines` is the number of surrounding lines for the diff.
33
- This is only effective if `diff` option is given.
34
-
35
- - `other` is the other commit to be compared with.
36
- This is only effective if `diff` option is given.
37
-
38
- - `lines` get the specified lines from the path.
39
- It uses the same parser as the line specifier from link:https://docs.asciidoctor.org/asciidoc/latest/verbatim/highlight-lines/[highlighting select lines] so the syntax is the same.
40
-
41
- There's also a couple of link:https://docs.asciidoctor.org/asciidoc/latest/attributes/options/[options] for this component.
42
- You can give the following options through `opts` attribute (i.e., `opts="diff,reverse"`).
43
-
44
- - `diff` will show the difference in link:https://en.wikipedia.org/wiki/Diff[diff] format.
45
-
46
- - `reverse` reverses the sides to be compared.
47
-
48
-
49
- == Example usage
50
-
51
- - `include::git:HEAD[path=shell.nix]` should transclude the current iteration of `shell.nix`.
52
-
53
- - `include::git:v1.0.0[opts="diff", path=Gemfile]` should include a diff of the Gemfile from `content/posts/sample` branch (assuming that Gemfile has changed).
54
-
55
- - `include::git:non-existing-rev[opts="diff"]` should result in a warning with the non-existing revision.
56
-
57
- - `include::git:{doccontentref}[path=README, lines=2..5]` should transclude the README file from lines 2-5.
@@ -1,66 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rugged'
4
-
5
- class GitBlobIncludeProcessor < Asciidoctor::Extensions::IncludeProcessor
6
- def handles?(target)
7
- target.start_with? 'git:'
8
- end
9
-
10
- def process(doc, reader, target, attrs)
11
- attrs['gitrepo'] ||= doc.attributes['gitrepo'] || doc.base_dir
12
- repo = Rugged::Repository.discover(attrs['gitrepo'])
13
-
14
- git_object_ref = target.delete_prefix 'git:'
15
- git_object_ref = doc.attributes['doccontentref'] if git_object_ref.empty?
16
-
17
- begin
18
- git_object = repo.rev_parse git_object_ref
19
-
20
- if attrs.key? 'diff-option'
21
- options = {}
22
-
23
- options[:paths] = attrs['path'].split(';') if attrs.key? 'path'
24
- options[:context_lines] = attrs['context-lines'] if attrs.key? 'context-lines'
25
- options[:reverse] = true if attrs.key? 'reverse-option'
26
-
27
- if attrs.key? 'other'
28
- other = repo.rev_parse attrs['other'] || nil
29
- reader.push_include git_object.diff(other, **options).patch
30
- else
31
- reader.push_include git_object.diff(**options).patch
32
- end
33
- else
34
- inner_entry = case git_object.type
35
- when :blob
36
- git_object
37
- when :commit
38
- git_object.tree.path attrs['path']
39
- when :tree
40
- git_object.path attrs['path']
41
- when :tag
42
- git_object.target.tree.path attrs['path']
43
- end
44
-
45
- content = repo.lookup(inner_entry[:oid]).content
46
-
47
- if attrs.key? 'lines'
48
- content_lines = content.lines
49
- new_content = +''
50
- doc.resolve_lines_to_highlight(content, attrs['lines']).each do |line_no|
51
- new_content << content_lines.at(line_no - 1)
52
- end
53
-
54
- content = new_content
55
- end
56
-
57
- reader.push_include content
58
- end
59
- rescue StandardError => e
60
- reader.push_include "Unresolved directive for '#{target}' with the following error:\n#{e}"
61
- warn e
62
- end
63
-
64
- reader
65
- end
66
- end
@@ -1,49 +0,0 @@
1
- = GitHub link inline macro
2
- :toc:
3
-
4
-
5
- An inline macro that easily links repositories from GitHub.
6
-
7
-
8
- == Synopsis
9
-
10
- [source, asciidoc]
11
- ----
12
- github:$OWNER/$REPO[$CAPTION]
13
- ----
14
-
15
- If caption is missing, the link text will be the namespace (i.e., `$OWNER/$REPO`) of the repo.
16
-
17
-
18
- == Attributes
19
-
20
- There are optional attributes for this macro.
21
-
22
- - `rev` is the commit/branch/tag of the repo to be linked.
23
- When given no caption, it will update the default caption with `$OWNER/$REPO@$REV`.
24
-
25
- - `path` is the filepath to be linked within the repo.
26
-
27
- - `issue` accepts the issue number to be linked in the GitHub repo.
28
- Take note `issue` is exclusive to other attributes and has more precedence.
29
- For example, if `issue` and `rev` are both present, the link for issue will be the result.
30
- +
31
- When given no caption, it will update the default caption with `$OWNER/$REPO#$ISSUE`.
32
-
33
- You can also change certain behaviors with the link:https://docs.asciidoctor.org/asciidoc/latest/attributes/options/[options attribute].
34
-
35
- - `repo` sets the default link text with only the repo.
36
- Pretty useful to quickly refer to the name of the software.
37
-
38
-
39
- == Example usage
40
-
41
- - `github:foo-dogsquared/website[]` will link to link:https://github.com/foo-dogsquared/website[my website repository] with the link text `foo-dogsquared/website`.
42
-
43
- - `github:NixOS/nixpkgs[nixpkgs nixos-unstable branch, rev=nixos-unstable]` should link to the link:https://github.com/NixOS/nixpkgs/tree/nixos-unstable[NixOS unstable branch of nixpkgs] with a caption of `nixpkgs nixos-unstable branch`.
44
-
45
- - `github:errata-ai/vale[Vale v2.3.0 README, path=README.md, rev=v2.3.0]` should link to the link:https://github.com/errata-ai/vale/blob/v2.3.0/README.md[README of Vale v2.3.0].
46
-
47
- - `github:neovim/neovim[Neovim cannot open large files properly, issue=614]` should link to https://github.com/neovim/neovim/issues/614[an issue of Neovim] with `Neovim cannot open large files properly` as the link text.
48
-
49
- - `github:neovim/neovim[Neovim cannot open large files properly, issue=614, rev=master]` should still link to https://github.com/neovim/neovim/issues/614[an issue of Neovim] since `issue` has more precedence over `rev`.
@@ -1,36 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'uri'
4
-
5
- class GitHubLinkInlineMacro < Asciidoctor::Extensions::InlineMacroProcessor
6
- use_dsl
7
-
8
- named :github
9
- name_positional_attributes 'caption'
10
-
11
- def process(parent, target, attrs)
12
- doc = parent.document
13
-
14
- default_caption = if attrs.key?('repo-option')
15
- target.split('/').at(1)
16
- else
17
- target
18
- end
19
- text = attrs['caption'] || default_caption
20
- uri = URI.parse %(https://github.com/#{target})
21
-
22
- if attrs.key? 'issue'
23
- uri.path += %(/issues/#{attrs['issue']})
24
- text << "##{attrs['issue']}" if text == target
25
- else
26
- uri.path += %(/tree/#{attrs['rev']}) if attrs.key? 'rev'
27
- uri.path += %(/#{attrs['path']}) if attrs.key? 'path'
28
- text << "@#{attrs['rev']}" if attrs.key?('rev') && text == target
29
- end
30
-
31
- target = uri.to_s
32
-
33
- doc.register :links, target
34
- create_anchor parent, text, type: :link, target: target
35
- end
36
- end
@@ -1,40 +0,0 @@
1
- = GitHub raw content include processor
2
- :toc:
3
-
4
-
5
- This is a link:https://docs.asciidoctor.org/asciidoctor/latest/extensions/include-processor/[include processor] for easily including files from GitHub.
6
- Take note this will only include files.
7
- For directories, submodules, or symlinks: they will not be processed and a warning will be issued.
8
-
9
- This extension honors the link:https://docs.asciidoctor.org/asciidoctor/latest/safe-modes/[safe mode setting] and link:https://docs.asciidoctor.org/asciidoc/latest/directives/include-uri/[the prerequisites for permitting includes with URI].
10
-
11
- The following is the basic form of using this include processor.
12
-
13
- [source, asciidoc]
14
- ----
15
- \include::github:$OWNER/$REPO[]
16
- ----
17
-
18
-
19
- == Extra notes
20
-
21
- The include processor will use GitHub API.
22
- It can create authorized requests by setting a token in `GITHUB_API_BEARER_TOKEN` environment variable.
23
- For instructions on how to get a token, you can refer to link:https://docs.github.com/en/rest/guides/getting-started-with-the-rest-api?apiVersion=2022-11-28#authenticating[respective documentation].
24
-
25
-
26
- == Attributes
27
-
28
- - `path` for the path of the file to be included.
29
- This is practically required as the root entry of the repository is a directory.
30
-
31
- - `rev` is the name of the commit/tag/branch to be checked out.
32
-
33
-
34
- == Example usage
35
-
36
- - `include::github:asciidoctor/asciidoctor[path=README.adoc, rev=v2.0.0]` will include the Asciidoc file from the link:https://github.com/asciidoctor/asciidoctor/[Asciidoctor GitHub repo] from the point of `v2.0.0`.
37
-
38
- - `include::github:NixOS/nixpkgs[path=shell.nix]` will get the latest revision of `shell.nix` from link:https://github.com/NixOS/nixpkgs[nixpkgs repository].
39
-
40
- - `include::github:foo-dogsquared/nixos-config[]` should not be processed considering it points to the root directory of the repository.
@@ -1,68 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'base64'
4
- require 'json'
5
- require 'open-uri'
6
- require 'uri'
7
-
8
- class GitHubRawIncludeProcessor < Asciidoctor::Extensions::IncludeProcessor
9
- def handles?(target)
10
- target.start_with? 'github:'
11
- end
12
-
13
- def warn_or_raise(doc, warning)
14
- if (doc.safe > Asciidoctor::SafeMode::SERVER) && !(doc.attr? 'allow-uri-read')
15
- raise warning
16
- else
17
- warn warning
18
- end
19
- end
20
-
21
- def process(doc, reader, target, attrs)
22
- src = target.delete_prefix('github:').split('/', 3)
23
- owner = src.at 0
24
- repo = src.at 1
25
- namespaced_repo = "#{owner}/#{repo}"
26
-
27
- path = attrs['path'] || ''
28
-
29
- # For more information, see https://docs.github.com/en/rest/repos/contents.
30
- uri = URI.parse %(https://api.github.com/repos/#{owner}/#{repo}/contents/#{path})
31
-
32
- if attrs['rev']
33
- query = { ref: attrs['rev'] }
34
- uri.query = URI.encode_www_form query
35
- end
36
-
37
- begin
38
- headers = {
39
- 'Header' => 'application/vnd.github+json',
40
- 'X-GitHub-Api-Version' => '2022-11-28'
41
- }
42
-
43
- headers['Authorization'] = "Token #{ENV['GITHUB_API_BEARER_TOKEN']}" if ENV['GITHUB_API_BEARER_TOKEN']
44
-
45
- OpenURI.open_uri(uri, headers) do |f|
46
- response = JSON.parse(f.read)
47
-
48
- # If the response is an array, it is likely to be a directory. In this
49
- # usecase, we'll just list them.
50
- content = if response.is_a? Array
51
- warning = %(given path '#{path}' from GitHub repo '#{repo}' is a directory)
52
- warn_or_raise doc, warning
53
- warning
54
- elsif response.is_a? Object
55
- Base64.decode64 response['content'] if response['content'] && response['encoding'] == 'base64'
56
- end
57
-
58
- reader.push_include content, target, target, 1, attrs
59
- end
60
- rescue OpenURI::HTTPError => e
61
- warning = %(error while getting '#{path}' in GitHub repo '#{namespaced_repo}: #{e}')
62
- warn_or_raise doc, warning
63
- reader.push_include warning, target, target, 1, attrs
64
- end
65
-
66
- reader
67
- end
68
- end
@@ -1,40 +0,0 @@
1
- = GitLab link inline macro
2
- :toc:
3
-
4
-
5
- An inline macro for easily linking objects from GitLab instances.
6
-
7
-
8
- == Synopsis
9
-
10
- [source, asciidoc]
11
- ----
12
- gitlab:$OWNER/$REPO[$CAPTION]
13
- ----
14
-
15
-
16
- == Attributes
17
-
18
- - `domain` is the base domain of the GitLab instance.
19
- By default, it points to the official instance of `gitlab.com`.
20
-
21
- - `rev` is the commit of the repo.
22
- By default. it doesn't point to anything which should be in the default branch of the repository.
23
-
24
- - `path` is the filepath to be linked.
25
-
26
- - `issue` is the issue to be linked from the repo.
27
- Take note issue has higher precedence so once `domain` and `issue` are both set, it will still link to an issue.
28
-
29
- There are settings that is enabled with the link:https://docs.asciidoctor.org/asciidoc/latest/attributes/options/[options attribute].
30
-
31
- - `repo` sets the default caption to be the repo part.
32
-
33
-
34
- == Example usage
35
-
36
- - `gitlab:gitlab-org/gitlab[]` will link to link:https://gitlab.com/gitlab-org/gitlab[the GitLab's source code with the default domain].
37
-
38
- - `gitlab:gitlab-org/gitlab[rev=0c9f77389424b6c5fd8e96b227e9125a13a07cb3, path=README.md]` should link to the link:https://gitlab.com/gitlab-org/gitlab/-/blob/0c9f77389424b6c5fd8e96b227e9125a13a07cb3/README.md[GitLab's README from 3 years ago].
39
-
40
- - `gitlab:GNOME/mutter[domain=gitlab.gnome.org, rev=df653b95adf6462fc731998eb53b0860baa7253c, path=meson.build]` should link to link:https://gitlab.gnome.org/GNOME/mutter/-/blob/df653b95adf6462fc731998eb53b0860baa7253c/meson.build[Mutter v44.beta `meson.build` from GNOME GitLab instance].
@@ -1,37 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'uri'
4
-
5
- class GitLabLinkInlineMacro < Asciidoctor::Extensions::InlineMacroProcessor
6
- use_dsl
7
-
8
- named :gitlab
9
- name_positional_attributes 'caption'
10
- default_attributes 'domain' => 'gitlab.com'
11
-
12
- def process(parent, target, attrs)
13
- doc = parent.document
14
-
15
- default_caption = if attrs.key?('repo-option')
16
- target.split('/').at(1)
17
- else
18
- target
19
- end
20
- text = attrs['caption'] || default_caption
21
- uri = URI.parse %(https://#{attrs['domain']}/#{target})
22
-
23
- if attrs.key? 'issue'
24
- uri.path += %(/-/issues/#{attrs['issue']})
25
- text << "##{attrs['issue']}" if text == target
26
- else
27
- uri.path += %(/-/tree/#{attrs['rev']}) if attrs.key? 'rev'
28
- uri.path += %(/#{attrs['path']}) if attrs.key? 'path'
29
- text << "@#{attrs['rev']}" if attrs.key?('rev') && text == target
30
- end
31
-
32
- target = uri.to_s
33
-
34
- doc.register :links, target
35
- create_anchor parent, text, type: :link, target: target
36
- end
37
- end
@@ -1,44 +0,0 @@
1
- = GitLab raw content include processor
2
- :toc:
3
-
4
-
5
- It's a link:https://docs.asciidoctor.org/asciidoctor/latest/extensions/include-processor/[include processor] for easily including raw content from GitLab repositories.
6
-
7
-
8
- == Synopsis
9
-
10
- [source, asciidoc]
11
- ----
12
- include::gitlab/$OWNER/$REPO[rev=$COMMIT, path=$FILEPATH]
13
- ----
14
-
15
-
16
- == Extra notes
17
-
18
- A link:https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html#personal-access-tokens[personal access token] is most likely required.
19
- Get one and place the value in an environment variable `GITLAB_API_PERSONAL_ACCESS_TOKEN`.
20
-
21
-
22
- == Attributes
23
-
24
- There are some attributes required to be passed.
25
-
26
- - `rev` is the commit to be checked out.
27
- - `path` is the file path to be included.
28
-
29
- Aside from the required attributes, there are optional attributes to configured further.
30
-
31
- - `domain` is the domain of the GitLab instance.
32
- By default, it points to the `gitlab.com` official instance.
33
-
34
- - `version` is the version string of the API to be used.
35
- By default, it uses version `v4`.
36
-
37
-
38
- == Example usage
39
-
40
- - `include::gitlab:gitlab-org/gitlab[rev=master, path=README.md]` should include the README content from the master branch of link:https://gitlab.com/gitlab-org/gitlab/[GitLab source code].
41
-
42
- - `include::freedesktop-sdk/freedesktop-sdk[rev=bcb3e0de957519e87a4c7b8c0e40af9876e531e7, path=.gitlab-ci.yml]` should transclude the GitLab CI configuration from link:https://gitlab.com/freedesktop-sdk/freedesktop-sdk[Freedesktop SDK].
43
-
44
- - `include::World/warp[domain=gitlab.gnome.org, rev=v0.5.2, path=meson_options.txt]` includes `meson_options.txt` from link:https://gitlab.gnome.org/World/warp/[Warp source code] at v0.5.2.
@@ -1,66 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'base64'
4
- require 'json'
5
- require 'open-uri'
6
- require 'uri'
7
-
8
- class GitLabRawIncludeProcessor < Asciidoctor::Extensions::IncludeProcessor
9
- def handles?(target)
10
- target.start_with? 'gitlab:'
11
- end
12
-
13
- def warn_or_raise(doc, warning)
14
- if (doc.safe > Asciidoctor::SafeMode::SERVER) && !(doc.attr? 'allow-uri-read')
15
- raise warning
16
- else
17
- warn warning
18
- end
19
- end
20
-
21
- def process(doc, reader, target, attrs)
22
- src = target.delete_prefix('gitlab:').split('/', 2)
23
- owner = src.at 0
24
- repo = src.at 1
25
- namespaced_repo = "#{owner}/#{repo}"
26
-
27
- raise %(there is no 'path' attribute given for GitLab repo '#{namespaced_repo}') unless attrs.key? 'path'
28
- raise %(no given ref for getting file in '#{namespaced_repo}') unless attrs.key? 'rev'
29
-
30
- path = attrs['path']
31
- rev = attrs['rev']
32
-
33
- domain = attrs['domain'] || 'gitlab.com'
34
- version = attrs['version'] || 'v4'
35
-
36
- uri = URI.parse %(https://#{domain}/api/#{version})
37
-
38
- # Set the project.
39
- uri += %(/projects/#{URI.encode_www_form_component namespaced_repo})
40
-
41
- # Then the filename.
42
- uri += %(/repository/files/#{URI.encode_www_form_component path})
43
-
44
- # Then the revision.
45
- query = { ref: rev }
46
- uri.query = URI.encode_www_form query
47
-
48
- content = begin
49
- headers = { 'Content-Type' => 'application-json' }
50
- header['PRIVATE-TOKEN'] = ENV['GITLAB_API_PERSONAL_ACCESS_TOKEN'] if ENV['GITLAB_API_PERSONAL_ACCESS_TOKEN']
51
-
52
- OpenURI.open_uri(uri, headers) do |f|
53
- response = JSON.parse(f.read)
54
-
55
- Base64.decode64 response['content'] if response['content'] && response['encoding'] == 'base64'
56
- end
57
- rescue OpenURI::HTTPError => e
58
- warning = %(error while getting '#{path}' in GitLab repo '#{repo}': #{e})
59
- warn_or_raise doc, warning
60
- warning
61
- end
62
-
63
- reader.push_include content, target, target, 1, attrs
64
- reader
65
- end
66
- end
@@ -1,20 +0,0 @@
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
- module Asciidoctor
14
- module FoodogsquaredCustomExtensions
15
- NAME = 'asciidoctor-foodogsquared-custom-extensions'
16
- VERSION = '1.0.0'
17
- CONTACT_EMAIL = 'foodogsquared@foodogsquared.one'
18
- USER_AGENT = "#{NAME}/#{VERSION} ( #{CONTACT_EMAIL} )"
19
- end
20
- end
@@ -1,27 +0,0 @@
1
- = Flathub link inline macro
2
- :toc:
3
-
4
-
5
- A shorthand for linking link:https://datatracker.ietf.org/[IETF RFCs].
6
-
7
-
8
- == Synopsis
9
-
10
- [source, asciidoc]
11
- ----
12
- rfc:$RFC[$CAPTION]
13
- ----
14
-
15
- Where...
16
-
17
- - `$RFC` is the RFC number.
18
-
19
- - `$CAPTION` is the link text to be used.
20
- By default, it will be `RFC$RFC`.
21
-
22
-
23
- == Example usage
24
-
25
- - `rfc:2136[]` links to the link:https://datatracker.ietf.org/doc/html/rfc2136[RFC2136 (dynamic update)] with the caption `RFC2136`.
26
-
27
- - `rfc:2136[Dynamic DNS updates]` is the same as the previous list item but with the caption text `Dynamic DNS updates`.
@@ -1,16 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class IETFRFCLinkInlineMacro < Asciidoctor::Extensions::InlineMacroProcessor
4
- use_dsl
5
-
6
- named :rfc
7
- name_positional_attributes 'caption'
8
-
9
- def process(parent, target, attrs)
10
- doc = parent.document
11
- url = %(https://datatracker.ietf.org/doc/html/#{target})
12
- attrs['caption'] ||= "RFC#{target}"
13
- doc.register :links, url
14
- create_anchor parent, attrs['caption'], type: :link, target: url
15
- end
16
- end
@@ -1,51 +0,0 @@
1
- = Man inline macro
2
- :toc:
3
-
4
-
5
- It's a link:https://docs.asciidoctor.org/asciidoctorj/latest/extensions/inline-macro-processor/[inline macro] that easily links manual pages from an online manpage service like link:https://manpages.debian.org/[Debian Manpages].
6
-
7
-
8
- == Synopsis
9
-
10
- [source, asciidoc]
11
- ----
12
- man:$MANPAGE[$VOLNUM]
13
- ----
14
-
15
-
16
- == Attributes
17
-
18
- There are optional attributes that can be passed.
19
-
20
- - `volnum` expects the section number where the manual page belongs to.
21
- This attribute is another way to indicate the section in case you start to use more attributes.
22
- The value from `volnum` attribute has higher precedence.
23
- When both the positional argument and `volnum` attribute is passed, the `volnum` attribute will be used.
24
-
25
- - `service` is the domain of the online manpage service.
26
- Take note this attribute is only used in `html` backend.
27
- +
28
- --
29
- This is an attribute that expects certain values:
30
-
31
- - `debian` uses https://manpages.debian.org.
32
- This is also the default service when no value is given.
33
-
34
- - `archlinux` uses https://man.archlinux.org.
35
-
36
- - `opensuse` uses https://manpages.opensuse.org.
37
-
38
- - `voidlinux` use https://man.voidlinux.org.
39
-
40
- - `none` uses none at all. :)
41
- This is useful if the reference is not found anywhere.
42
-
43
- Any invalid value raises an error.
44
- --
45
-
46
-
47
- == Example usage
48
-
49
- - `man:crontab[5]` will link to the default manpage service with `crontab(5)` manual page.
50
-
51
- - `man:man[volnum=1, service=archlinux]` will link to the link:https://man.archlinux.org/man/man.1[man manpage] from link:https://man.archlinux.org/[man.archlinux.org].
@@ -1,50 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class ManInlineMacro < Asciidoctor::Extensions::InlineMacroProcessor
4
- use_dsl
5
-
6
- named :man
7
- name_positional_attributes 'volnum'
8
- default_attributes 'service' => 'debian'
9
-
10
- def process(parent, target, attrs)
11
- doc = parent.document
12
- manname = target
13
- volnum = attrs['volnum']
14
-
15
- text = %(#{manname}(#{volnum}))
16
-
17
- if doc.basebackend? 'html'
18
- domain = case attrs['service']
19
- when 'debian'
20
- 'https://manpages.debian.org'
21
- when 'arch'
22
- 'https://man.archlinux.org/man'
23
- when 'opensuse'
24
- 'https://manpages.opensuse.org'
25
- when 'voidlinux'
26
- 'https://man.voidlinux.org'
27
- when 'openbsd'
28
- 'https://man.openbsd.org'
29
- when 'none'
30
- nil
31
- else
32
- raise "no available manpage service #{attrs['service']}"
33
- end
34
-
35
- if !domain.nil?
36
- target = %(#{domain}/#{manname}.#{volnum})
37
- doc.register :links, target
38
- node = create_anchor parent, text, type: :link, target: target
39
- else
40
- node = create_inline parent, :quoted, text
41
- end
42
- elsif doc.backend == 'manpage'
43
- node = create_inline parent, :quoted, text, type: :strong
44
- else
45
- node = create_inline parent, :quoted, text
46
- end
47
-
48
- node
49
- end
50
- end