asciidoctor-fixxrefs 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 0ab73993269d013802c8e0044e661a1f3f49aebc53ae358158274a3e3663e1a0
4
+ data.tar.gz: b6fb2cf444a6edeff5c21b0e453b83ff2b68ff8132373bd46056594380553a37
5
+ SHA512:
6
+ metadata.gz: c5f61c10558a340089540f9131394589230f7de4bc9b34d0c9a8f3c441c1786ddc4e3c1728d44f197979705030f4eaa2db3f23c0cab75d73c81fdb4804cad0e6
7
+ data.tar.gz: e1d68978c0d8f72d79adb56977bb37377d35946419292d347f1b3ef277b5b0cc57dc6ccc1f3c3b822ed658447ec92b9b5c1215a6a4fff3d03f3a3485f0f4aa4f
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # This executable is based on `bin/asciidoctor-pdf` from the
4
+ # asciidoctor/asciidoctor-pdf project. Please consult that file for
5
+ # potential updates.
6
+
7
+ require 'asciidoctor-multipage'
8
+ require 'asciidoctor-multipage/version'
9
+ require 'asciidoctor/cli'
10
+
@@ -0,0 +1,3 @@
1
+ module XrefConverter
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,75 @@
1
+ require 'pathname'
2
+ require 'asciidoctor'
3
+ require 'asciidoctor/cli'
4
+ require 'asciidoctor/converter'
5
+ require 'asciidoctor/converter/html5'
6
+ require 'asciidoctor/abstract_node'
7
+
8
+ class XrefConverter < (Asciidoctor::Converter.for 'html5')
9
+ register_for 'html5'
10
+
11
+ def compute_relative_url_path(from, to, hash)
12
+
13
+ return hash if to == from
14
+
15
+ from_path = Pathname.new(from).dirname
16
+ relative_path = Pathname.new(to).relative_path_from(from_path).to_s
17
+ relative_path + hash
18
+ end
19
+
20
+ def convert_inline_anchor node
21
+
22
+ case node.type
23
+ when :xref
24
+ #logger.warn %(anchor type: #{node.type})
25
+ #logger.warn %(anchor target: #{node.target})
26
+ #logger.warn %(attributes: #{node.attributes})
27
+
28
+ ref_spec = node.target
29
+
30
+ relative_source_path = node.document.attributes['relative_source_path']
31
+ #logger.warn %(relative_source_path: #{relative_source_path})
32
+ hash = ref_spec.index('#')
33
+
34
+ if hash
35
+ resource_spec = ref_spec[0...hash]
36
+ hash = ref_spec[hash..-1]
37
+ else
38
+ resource_spec = ref_spec
39
+ hash = ''
40
+ end
41
+
42
+ relative = compute_relative_url_path(relative_source_path, resource_spec, hash)
43
+
44
+ #logger.warn %(relative: #{relative})
45
+
46
+ if (path = node.attributes['path'])
47
+ attrs = (append_link_constraint_attrs node, node.role ? [%( class="#{node.role}")] : []).join
48
+ text = node.text || path
49
+ else
50
+ attrs = node.role ? %( class="#{node.role}") : ''
51
+ unless (text = node.text)
52
+ if Asciidoctor::AbstractNode === (ref = (@refs ||= node.document.catalog[:refs])[refid = node.attributes['refid']] || (refid.nil_or_empty? ? (top = get_root_document node) : nil))
53
+ if (@resolving_xref ||= (outer = true)) && outer
54
+ if (text = ref.xreftext node.attr 'xrefstyle', nil, true)
55
+ text = text.gsub DropAnchorRx, '' if text.include? '<a'
56
+ else
57
+ text = top ? '[^top]' : %([#{refid}])
58
+ end
59
+ @resolving_xref = nil
60
+ else
61
+ text = top ? '[^top]' : %([#{refid}])
62
+ end
63
+ else
64
+ text = %([#{refid}])
65
+ end
66
+ end
67
+ end
68
+ %(<a href="#{relative}"#{attrs}>#{text}</a>)
69
+ else
70
+ # Other anchor types can be handled as normal.
71
+ super
72
+ end
73
+
74
+ end
75
+ end
metadata ADDED
@@ -0,0 +1,73 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: asciidoctor-fixxrefs
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Gabriel McGoldrick
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2023-08-10 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rake
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 12.3.3
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 12.3.3
27
+ - !ruby/object:Gem::Dependency
28
+ name: asciidoctor
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 2.0.10
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 2.0.10
41
+ description:
42
+ email:
43
+ executables:
44
+ - asciidoctor-fixxrefs
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - bin/asciidoctor-fixxrefs
49
+ - lib/asciidoctor-fixxrefs.rb
50
+ - lib/asciidoctor-fixxrefs/version.rb
51
+ homepage:
52
+ licenses: []
53
+ metadata: {}
54
+ post_install_message:
55
+ rdoc_options: []
56
+ require_paths:
57
+ - lib
58
+ required_ruby_version: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ required_rubygems_version: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ requirements: []
69
+ rubygems_version: 3.1.6
70
+ signing_key:
71
+ specification_version: 4
72
+ summary: Asciidoctor fix xrefs
73
+ test_files: []