stepmod-utils 0.2.0 → 0.2.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/rake.yml +42 -0
- data/.github/workflows/release.yml +23 -20
- data/Gemfile +2 -1
- data/Makefile +5 -0
- data/README.adoc +82 -1
- data/exe/stepmod-annotate-all +39 -0
- data/exe/stepmod-build-resource-docs-cache +19 -0
- data/exe/stepmod-convert-express-description +33 -0
- data/exe/stepmod-convert-express-resource +33 -0
- data/exe/stepmod-extract-terms +3 -3
- data/exe/stepmod-find-express-files +23 -0
- data/lib/stepmod/utils/cleaner.rb +11 -0
- data/lib/stepmod/utils/converters/a.rb +47 -0
- data/lib/stepmod/utils/converters/blockquote.rb +22 -0
- data/lib/stepmod/utils/converters/br.rb +15 -0
- data/lib/stepmod/utils/converters/bypass.rb +81 -0
- data/lib/stepmod/utils/converters/code.rb +19 -0
- data/lib/stepmod/utils/converters/comment.rb +16 -0
- data/lib/stepmod/utils/converters/dd.rb +15 -0
- data/lib/stepmod/utils/converters/def.rb +11 -4
- data/lib/stepmod/utils/converters/dl.rb +31 -0
- data/lib/stepmod/utils/converters/drop.rb +22 -0
- data/lib/stepmod/utils/converters/dt.rb +17 -0
- data/lib/stepmod/utils/converters/em_express_description.rb +22 -0
- data/lib/stepmod/utils/converters/eqn.rb +97 -0
- data/lib/stepmod/utils/converters/example.rb +1 -6
- data/lib/stepmod/utils/converters/express_g.rb +49 -0
- data/lib/stepmod/utils/converters/express_ref_express_description.rb +13 -0
- data/lib/stepmod/utils/converters/ext_description.rb +17 -0
- data/lib/stepmod/utils/converters/ext_descriptions.rb +14 -0
- data/lib/stepmod/utils/converters/fund_cons.rb +21 -0
- data/lib/stepmod/utils/converters/head.rb +22 -0
- data/lib/stepmod/utils/converters/hr.rb +15 -0
- data/lib/stepmod/utils/converters/ignore.rb +16 -0
- data/lib/stepmod/utils/converters/introduction.rb +15 -0
- data/lib/stepmod/utils/converters/note.rb +1 -6
- data/lib/stepmod/utils/converters/ol.rb +3 -2
- data/lib/stepmod/utils/converters/p.rb +21 -0
- data/lib/stepmod/utils/converters/pass_through.rb +13 -0
- data/lib/stepmod/utils/converters/q.rb +16 -0
- data/lib/stepmod/utils/converters/resource.rb +14 -0
- data/lib/stepmod/utils/converters/schema.rb +19 -0
- data/lib/stepmod/utils/converters/schema_diag.rb +14 -0
- data/lib/stepmod/utils/converters/strong.rb +41 -0
- data/lib/stepmod/utils/converters/sub.rb +24 -0
- data/lib/stepmod/utils/converters/sup.rb +22 -0
- data/lib/stepmod/utils/converters/table.rb +62 -0
- data/lib/stepmod/utils/converters/text.rb +68 -0
- data/lib/stepmod/utils/html_to_asciimath.rb +157 -0
- data/lib/stepmod/utils/smrl_description_converter.rb +49 -0
- data/lib/stepmod/utils/smrl_resource_converter.rb +67 -0
- data/lib/stepmod/utils/stepmod_file_annotator.rb +78 -0
- data/lib/stepmod/utils/version.rb +1 -1
- data/migrating_from_cvs.adoc +190 -0
- data/stepmod-utils.gemspec +1 -0
- metadata +69 -8
- data/.github/workflows/macos.yml +0 -39
- data/.github/workflows/ubuntu.yml +0 -53
- data/.github/workflows/windows.yml +0 -41
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Stepmod
|
4
|
+
module Utils
|
5
|
+
module Converters
|
6
|
+
class Blockquote < ReverseAdoc::Converters::Base
|
7
|
+
def convert(node, state = {})
|
8
|
+
id = node['id']
|
9
|
+
anchor = id ? "[[#{id}]]\n" : ""
|
10
|
+
cite = node['cite']
|
11
|
+
attrs = cite ? "[quote, #{cite}]\n" : ""
|
12
|
+
content = treat_children(node, state).strip
|
13
|
+
content = ReverseAdoc.cleaner.remove_newlines(content)
|
14
|
+
#"\n\n> " << content.lines.to_a.join('> ') << "\n\n"
|
15
|
+
"\n\n#{attrs}____\n" << content.lines.to_a.join('') << "\n____\n\n"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
ReverseAdoc::Converters.register :blockquote, Blockquote.new
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Stepmod
|
4
|
+
module Utils
|
5
|
+
module Converters
|
6
|
+
class Br < ReverseAdoc::Converters::Base
|
7
|
+
def convert(node, state = {})
|
8
|
+
" +\n"
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
ReverseAdoc::Converters.register :br, Br.new
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Stepmod
|
4
|
+
module Utils
|
5
|
+
module Converters
|
6
|
+
class Bypass < ReverseAdoc::Converters::Base
|
7
|
+
def convert(node, state = {})
|
8
|
+
treat_children(node, state)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
ReverseAdoc::Converters.register :document, Bypass.new
|
13
|
+
ReverseAdoc::Converters.register :html, Bypass.new
|
14
|
+
ReverseAdoc::Converters.register :body, Bypass.new
|
15
|
+
ReverseAdoc::Converters.register :span, Bypass.new
|
16
|
+
ReverseAdoc::Converters.register :thead, Bypass.new
|
17
|
+
ReverseAdoc::Converters.register :tbody, Bypass.new
|
18
|
+
ReverseAdoc::Converters.register :tfoot, Bypass.new
|
19
|
+
ReverseAdoc::Converters.register :abbr, Bypass.new
|
20
|
+
ReverseAdoc::Converters.register :acronym, Bypass.new
|
21
|
+
ReverseAdoc::Converters.register :address, Bypass.new
|
22
|
+
ReverseAdoc::Converters.register :applet, Bypass.new
|
23
|
+
ReverseAdoc::Converters.register :map, Bypass.new
|
24
|
+
ReverseAdoc::Converters.register :area, Bypass.new
|
25
|
+
ReverseAdoc::Converters.register :bdi, Bypass.new
|
26
|
+
ReverseAdoc::Converters.register :bdo, Bypass.new
|
27
|
+
ReverseAdoc::Converters.register :big, Bypass.new
|
28
|
+
ReverseAdoc::Converters.register :button, Bypass.new
|
29
|
+
ReverseAdoc::Converters.register :canvas, Bypass.new
|
30
|
+
ReverseAdoc::Converters.register :data, Bypass.new
|
31
|
+
ReverseAdoc::Converters.register :datalist, Bypass.new
|
32
|
+
ReverseAdoc::Converters.register :del, Bypass.new
|
33
|
+
ReverseAdoc::Converters.register :ins, Bypass.new
|
34
|
+
ReverseAdoc::Converters.register :dfn, Bypass.new
|
35
|
+
ReverseAdoc::Converters.register :dialog, Bypass.new
|
36
|
+
ReverseAdoc::Converters.register :embed, Bypass.new
|
37
|
+
ReverseAdoc::Converters.register :fieldset, Bypass.new
|
38
|
+
ReverseAdoc::Converters.register :font, Bypass.new
|
39
|
+
ReverseAdoc::Converters.register :footer, Bypass.new
|
40
|
+
ReverseAdoc::Converters.register :form, Bypass.new
|
41
|
+
ReverseAdoc::Converters.register :frame, Bypass.new
|
42
|
+
ReverseAdoc::Converters.register :frameset, Bypass.new
|
43
|
+
ReverseAdoc::Converters.register :header, Bypass.new
|
44
|
+
ReverseAdoc::Converters.register :iframe, Bypass.new
|
45
|
+
ReverseAdoc::Converters.register :input, Bypass.new
|
46
|
+
ReverseAdoc::Converters.register :label, Bypass.new
|
47
|
+
ReverseAdoc::Converters.register :legend, Bypass.new
|
48
|
+
ReverseAdoc::Converters.register :main, Bypass.new
|
49
|
+
ReverseAdoc::Converters.register :menu, Bypass.new
|
50
|
+
ReverseAdoc::Converters.register :menulist, Bypass.new
|
51
|
+
ReverseAdoc::Converters.register :meter, Bypass.new
|
52
|
+
ReverseAdoc::Converters.register :nav, Bypass.new
|
53
|
+
ReverseAdoc::Converters.register :noframes, Bypass.new
|
54
|
+
ReverseAdoc::Converters.register :noscript, Bypass.new
|
55
|
+
ReverseAdoc::Converters.register :object, Bypass.new
|
56
|
+
ReverseAdoc::Converters.register :optgroup, Bypass.new
|
57
|
+
ReverseAdoc::Converters.register :option, Bypass.new
|
58
|
+
ReverseAdoc::Converters.register :output, Bypass.new
|
59
|
+
ReverseAdoc::Converters.register :param, Bypass.new
|
60
|
+
ReverseAdoc::Converters.register :picture, Bypass.new
|
61
|
+
ReverseAdoc::Converters.register :progress, Bypass.new
|
62
|
+
ReverseAdoc::Converters.register :ruby, Bypass.new
|
63
|
+
ReverseAdoc::Converters.register :rt, Bypass.new
|
64
|
+
ReverseAdoc::Converters.register :rp, Bypass.new
|
65
|
+
ReverseAdoc::Converters.register :s, Bypass.new
|
66
|
+
ReverseAdoc::Converters.register :select, Bypass.new
|
67
|
+
ReverseAdoc::Converters.register :small, Bypass.new
|
68
|
+
ReverseAdoc::Converters.register :span, Bypass.new
|
69
|
+
ReverseAdoc::Converters.register :strike, Bypass.new
|
70
|
+
ReverseAdoc::Converters.register :details, Bypass.new
|
71
|
+
ReverseAdoc::Converters.register :section, Bypass.new
|
72
|
+
ReverseAdoc::Converters.register :summary, Bypass.new
|
73
|
+
ReverseAdoc::Converters.register :svg, Bypass.new
|
74
|
+
ReverseAdoc::Converters.register :template, Bypass.new
|
75
|
+
ReverseAdoc::Converters.register :textarea, Bypass.new
|
76
|
+
ReverseAdoc::Converters.register :track, Bypass.new
|
77
|
+
ReverseAdoc::Converters.register :u, Bypass.new
|
78
|
+
ReverseAdoc::Converters.register :wbr, Bypass.new
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Stepmod
|
4
|
+
module Utils
|
5
|
+
module Converters
|
6
|
+
class Code < ReverseAdoc::Converters::Base
|
7
|
+
def convert(node, state = {})
|
8
|
+
"`#{node.text}`"
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
ReverseAdoc::Converters.register :code, Code.new
|
13
|
+
ReverseAdoc::Converters.register :tt, Code.new
|
14
|
+
ReverseAdoc::Converters.register :kbd, Code.new
|
15
|
+
ReverseAdoc::Converters.register :samp, Code.new
|
16
|
+
ReverseAdoc::Converters.register :var, Code.new
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Stepmod
|
4
|
+
module Utils
|
5
|
+
module Converters
|
6
|
+
class Comment < ReverseAdoc::Converters::Base
|
7
|
+
def convert(node, state = {})
|
8
|
+
comment = node.text.strip.split("\n").map{|line| "// #{line}"}.join("\n")
|
9
|
+
"#{comment}\n"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
ReverseAdoc::Converters.register :comment, Comment.new
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Stepmod
|
4
|
+
module Utils
|
5
|
+
module Converters
|
6
|
+
class Dd < ReverseAdoc::Converters::Base
|
7
|
+
def convert(node, state = {})
|
8
|
+
"#{node.text}\n"
|
9
|
+
end
|
10
|
+
|
11
|
+
ReverseAdoc::Converters.register :dd, Dd.new
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -20,11 +20,14 @@ module Stepmod
|
|
20
20
|
previous = nil
|
21
21
|
result = ''
|
22
22
|
converted.each.with_index do |(child, content), i|
|
23
|
-
if
|
24
|
-
result += "
|
23
|
+
if block_tag?(child, previous)
|
24
|
+
result += "\n\n"
|
25
|
+
elsif comment_tag?(child, previous)
|
26
|
+
result += "\n"
|
25
27
|
else
|
26
|
-
result +=
|
28
|
+
result += ' '
|
27
29
|
end
|
30
|
+
result += content
|
28
31
|
previous = child
|
29
32
|
end
|
30
33
|
result.strip
|
@@ -32,7 +35,11 @@ module Stepmod
|
|
32
35
|
|
33
36
|
def block_tag?(child, previous)
|
34
37
|
%w[ul example note alt p].include?(child.name) ||
|
35
|
-
(
|
38
|
+
(previous && %w[ul example note alt p].include?(previous.name))
|
39
|
+
end
|
40
|
+
|
41
|
+
def comment_tag?(child, previous)
|
42
|
+
child.name == 'comment' || (previous && previous.name === 'comment')
|
36
43
|
end
|
37
44
|
|
38
45
|
def additional_block(node)
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Stepmod
|
4
|
+
module Utils
|
5
|
+
module Converters
|
6
|
+
class Dl < ReverseAdoc::Converters::Base
|
7
|
+
def convert(node, state = {})
|
8
|
+
cleaned_node = cleanup_trash_tags(node.clone)
|
9
|
+
treat_children(cleaned_node, state)
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
# https://github.com/metanorma/stepmod-utils/issues/48#issuecomment-784000377
|
15
|
+
# For simplicity reasons and so that we don't depend on the CVS repository's updates, we directly converting:
|
16
|
+
# <dt></dt><dd>a3ma   :   annotated 3d model assembly</dd> into a3ma:: annotated 3d model assembly
|
17
|
+
def cleanup_trash_tags(node)
|
18
|
+
inner_content = node.inner_html
|
19
|
+
inner_content
|
20
|
+
.gsub!(/<dt><\/dt>\s*?<dd>(.+?)   :   (.+?)<\/dd>/) do
|
21
|
+
"<dt>#{$1}</dt><dd>#{$2}</dd>"
|
22
|
+
end
|
23
|
+
node.inner_html = inner_content
|
24
|
+
node
|
25
|
+
end
|
26
|
+
|
27
|
+
ReverseAdoc::Converters.register :dl, Dl.new
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Stepmod
|
4
|
+
module Utils
|
5
|
+
module Converters
|
6
|
+
class Drop < ReverseAdoc::Converters::Base
|
7
|
+
def convert(node, state = {})
|
8
|
+
''
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
ReverseAdoc::Converters.register :caption, Drop.new
|
13
|
+
ReverseAdoc::Converters.register :figcaption, Drop.new
|
14
|
+
ReverseAdoc::Converters.register :title, Drop.new
|
15
|
+
ReverseAdoc::Converters.register :link, Drop.new
|
16
|
+
ReverseAdoc::Converters.register :style, Drop.new
|
17
|
+
ReverseAdoc::Converters.register :meta, Drop.new
|
18
|
+
ReverseAdoc::Converters.register :script, Drop.new
|
19
|
+
ReverseAdoc::Converters.register :comment, Drop.new
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Stepmod
|
4
|
+
module Utils
|
5
|
+
module Converters
|
6
|
+
class Dt < ReverseAdoc::Converters::Base
|
7
|
+
def convert(node, state = {})
|
8
|
+
return "\n\n{blank}::" if node.text.strip.length.zero?
|
9
|
+
|
10
|
+
"\n\n#{node.text}:: "
|
11
|
+
end
|
12
|
+
|
13
|
+
ReverseAdoc::Converters.register :dt, Dt.new
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Stepmod
|
4
|
+
module Utils
|
5
|
+
module Converters
|
6
|
+
class Em < ReverseAdoc::Converters::Base
|
7
|
+
def convert(node, state = {})
|
8
|
+
content = treat_children(node, state.merge(already_italic: true))
|
9
|
+
if content.strip.empty? || state[:already_italic]
|
10
|
+
content
|
11
|
+
else
|
12
|
+
"#{content[/^\s*/]}_#{content.strip}_#{content[/\s*$/]}"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
ReverseAdoc::Converters.register :em, Em.new
|
18
|
+
ReverseAdoc::Converters.register :i, Em.new
|
19
|
+
ReverseAdoc::Converters.register :cite, Em.new
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,97 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'stepmod/utils/html_to_asciimath'
|
4
|
+
|
5
|
+
module Stepmod
|
6
|
+
module Utils
|
7
|
+
module Converters
|
8
|
+
class Eqn < ReverseAdoc::Converters::Base
|
9
|
+
TAGS_NOT_IN_CONTEXT = %w[b i].freeze
|
10
|
+
|
11
|
+
def convert(node, state = {})
|
12
|
+
cloned_node = node.clone
|
13
|
+
if definition_node?(cloned_node)
|
14
|
+
return definition_converted(cloned_node, state)
|
15
|
+
end
|
16
|
+
|
17
|
+
stem_converted(cloned_node, state)
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def definition_node?(node)
|
23
|
+
first_strong_node = node
|
24
|
+
.children
|
25
|
+
.find do |n|
|
26
|
+
return false if !n.text? && n.name != 'b'
|
27
|
+
|
28
|
+
n.name == 'b'
|
29
|
+
end
|
30
|
+
first_strong_node &&
|
31
|
+
first_strong_node.next &&
|
32
|
+
first_strong_node.next.text? &&
|
33
|
+
first_strong_node.next.content =~ /\s+:/
|
34
|
+
end
|
35
|
+
|
36
|
+
def definition_converted(cloned_node, state)
|
37
|
+
first_strong_node = cloned_node
|
38
|
+
.children
|
39
|
+
.find do |n|
|
40
|
+
return false if !n.text? && n.name != 'b'
|
41
|
+
|
42
|
+
n.name == 'b'
|
43
|
+
end
|
44
|
+
first_strong_node.next.content = first_strong_node.next.content.gsub(/\s?:/, '')
|
45
|
+
term = first_strong_node.text.strip
|
46
|
+
first_strong_node.remove
|
47
|
+
"\n\n#{term}:: #{remove_trash_symbols(treat_children(cloned_node, state))}\n"
|
48
|
+
end
|
49
|
+
|
50
|
+
def stem_converted(cloned_node, state)
|
51
|
+
remove_tags_not_in_context(cloned_node)
|
52
|
+
internal_content = treat_children(cloned_node, state)
|
53
|
+
content = Stepmod::Utils::HtmlToAsciimath.new.call(internal_content)
|
54
|
+
res = <<~TEMPLATE
|
55
|
+
|
56
|
+
[stem]
|
57
|
+
++++
|
58
|
+
#{remove_trash_symbols(content.strip)}
|
59
|
+
++++
|
60
|
+
|
61
|
+
TEMPLATE
|
62
|
+
res = "[[#{cloned_node['id']}]]\n#{res}" if cloned_node['id'] && cloned_node['id'].length > 0
|
63
|
+
res
|
64
|
+
end
|
65
|
+
|
66
|
+
def remove_trash_symbols(content)
|
67
|
+
content
|
68
|
+
.gsub(/ /, '')
|
69
|
+
.strip
|
70
|
+
.gsub(/\(\d\)$/, '')
|
71
|
+
.gsub(/\b(\w*?[_]+\w+)\b/, '"\1"')
|
72
|
+
.gsub(/([^\s])\s+_{/, '\1_{')
|
73
|
+
.strip
|
74
|
+
end
|
75
|
+
|
76
|
+
# Remove all tags that make no sense in equations, eg: strong, italic
|
77
|
+
# Search for such tags, move their children into the root
|
78
|
+
# context and remove them
|
79
|
+
def remove_tags_not_in_context(node)
|
80
|
+
TAGS_NOT_IN_CONTEXT.each do |tag_name|
|
81
|
+
node
|
82
|
+
.children
|
83
|
+
.each do |n|
|
84
|
+
remove_tags_not_in_context(n) if n.children.length > 0
|
85
|
+
next if n.name != tag_name
|
86
|
+
|
87
|
+
n.add_previous_sibling(n.children)
|
88
|
+
n.unlink
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
ReverseAdoc::Converters.register :eqn, Eqn.new
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
@@ -5,12 +5,7 @@ module Stepmod
|
|
5
5
|
module Converters
|
6
6
|
class Example < ReverseAdoc::Converters::Base
|
7
7
|
def convert(node, state = {})
|
8
|
-
|
9
|
-
[example]
|
10
|
-
====
|
11
|
-
#{treat_children(node, state).strip}
|
12
|
-
====
|
13
|
-
TEMPLATE
|
8
|
+
"\n\n[example]\n====\n#{treat_children(node, state).strip}\n====\n\n"
|
14
9
|
end
|
15
10
|
end
|
16
11
|
ReverseAdoc::Converters.register :example, Example.new
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Stepmod
|
4
|
+
module Utils
|
5
|
+
module Converters
|
6
|
+
class ExpressG < ReverseAdoc::Converters::Base
|
7
|
+
def convert(node, state = {})
|
8
|
+
node.children.map do |child|
|
9
|
+
next unless child.name == 'imgfile'
|
10
|
+
|
11
|
+
parse_to_svg_reference(child['file'], state)
|
12
|
+
end.join("\n")
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def parse_to_svg_reference(file, state)
|
18
|
+
return '' unless File.file?(file)
|
19
|
+
|
20
|
+
image_document = Nokogiri::XML(File.read(file))
|
21
|
+
svg_path = File.basename(image_document.xpath('//img').first['src'], '.*')
|
22
|
+
<<~SVGMAP
|
23
|
+
|
24
|
+
*)
|
25
|
+
(*"#{state.fetch(:schema_name)}.__expressg"
|
26
|
+
[.svgmap]
|
27
|
+
====
|
28
|
+
image::#{svg_path}.svg[]
|
29
|
+
|
30
|
+
#{image_document.xpath('//img.area').map.with_index(1) {|n, i| schema_reference(n['href'], i) }.join("\n")}
|
31
|
+
====
|
32
|
+
SVGMAP
|
33
|
+
end
|
34
|
+
|
35
|
+
def schema_reference(xml_path, index)
|
36
|
+
if xml_path =~ /#/
|
37
|
+
_,express_path_part = xml_path.split('#')
|
38
|
+
"* <<express:#{express_path_part.strip}>>; #{index}"
|
39
|
+
else
|
40
|
+
schema_name = File.basename(xml_path, '.*')
|
41
|
+
"* <<express:#{schema_name.strip}>>; #{index}"
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
ReverseAdoc::Converters.register 'express-g', ExpressG.new
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|