2023-03-06 17:04:21 +00:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2023-03-06 04:04:04 +00:00
|
|
|
require 'uri'
|
|
|
|
|
|
|
|
class GitHubLinkInlineMacro < Asciidoctor::Extensions::InlineMacroProcessor
|
|
|
|
use_dsl
|
|
|
|
|
|
|
|
named :github
|
|
|
|
name_positional_attributes 'caption'
|
|
|
|
|
2023-03-06 17:04:21 +00:00
|
|
|
def process(parent, target, attrs)
|
2023-03-06 04:04:04 +00:00
|
|
|
doc = parent.document
|
|
|
|
|
|
|
|
text = attrs['caption'] || target
|
|
|
|
uri = URI.parse %(https://github.com/#{target})
|
|
|
|
|
|
|
|
uri.path += %(/tree/#{attrs['rev']}) if attrs['rev']
|
|
|
|
uri.path += %(/#{attrs['path']}) if attrs['path']
|
|
|
|
|
|
|
|
target = uri.to_s
|
|
|
|
|
|
|
|
doc.register :links, target
|
|
|
|
create_anchor parent, text, type: :link, target: target
|
|
|
|
end
|
|
|
|
end
|