stepmod-utils 0.3.1 → 0.3.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 +1 -11
- data/.github/workflows/release.yml +7 -5
- data/.hound.yml +5 -0
- data/.rubocop.yml +10 -0
- data/Gemfile +3 -3
- data/Rakefile +1 -1
- data/exe/stepmod-annotate-all +17 -11
- data/exe/stepmod-build-resource-docs-cache +8 -7
- data/exe/stepmod-convert-express-description +6 -4
- data/exe/stepmod-convert-express-resource +6 -4
- data/exe/stepmod-extract-terms +67 -234
- data/exe/stepmod-find-express-files +8 -7
- data/lib/stepmod/utils/bibdata.rb +31 -35
- data/lib/stepmod/utils/cleaner.rb +3 -3
- data/lib/stepmod/utils/concept.rb +86 -30
- data/lib/stepmod/utils/converters/a.rb +7 -10
- data/lib/stepmod/utils/converters/blockquote.rb +4 -4
- data/lib/stepmod/utils/converters/br.rb +1 -1
- data/lib/stepmod/utils/converters/bypass.rb +33 -33
- data/lib/stepmod/utils/converters/clause_ref.rb +3 -3
- data/lib/stepmod/utils/converters/code.rb +1 -1
- data/lib/stepmod/utils/converters/comment.rb +5 -3
- data/lib/stepmod/utils/converters/dd.rb +2 -2
- data/lib/stepmod/utils/converters/def.rb +30 -22
- data/lib/stepmod/utils/converters/drop.rb +2 -2
- data/lib/stepmod/utils/converters/dt.rb +2 -2
- data/lib/stepmod/utils/converters/em.rb +1 -1
- data/lib/stepmod/utils/converters/em_express_description.rb +1 -1
- data/lib/stepmod/utils/converters/eqn.rb +28 -26
- data/lib/stepmod/utils/converters/example.rb +12 -2
- data/lib/stepmod/utils/converters/express_g.rb +10 -9
- data/lib/stepmod/utils/converters/express_ref.rb +2 -2
- data/lib/stepmod/utils/converters/express_ref_express_description.rb +3 -2
- data/lib/stepmod/utils/converters/ext_description.rb +4 -2
- data/lib/stepmod/utils/converters/figure.rb +20 -0
- data/lib/stepmod/utils/converters/fund_cons.rb +1 -1
- data/lib/stepmod/utils/converters/head.rb +3 -2
- data/lib/stepmod/utils/converters/hr.rb +2 -2
- data/lib/stepmod/utils/converters/ignore.rb +3 -3
- data/lib/stepmod/utils/converters/introduction.rb +1 -1
- data/lib/stepmod/utils/converters/module_ref.rb +11 -7
- data/lib/stepmod/utils/converters/note.rb +12 -2
- data/lib/stepmod/utils/converters/ol.rb +5 -5
- data/lib/stepmod/utils/converters/p.rb +2 -2
- data/lib/stepmod/utils/converters/pass_through.rb +2 -2
- data/lib/stepmod/utils/converters/q.rb +1 -1
- data/lib/stepmod/utils/converters/schema.rb +1 -1
- data/lib/stepmod/utils/converters/stem.rb +1 -1
- data/lib/stepmod/utils/converters/stepmod_ext_description.rb +30 -7
- data/lib/stepmod/utils/converters/strong.rb +5 -4
- data/lib/stepmod/utils/converters/sub.rb +2 -2
- data/lib/stepmod/utils/converters/sup.rb +2 -2
- data/lib/stepmod/utils/converters/synonym.rb +2 -2
- data/lib/stepmod/utils/converters/table.rb +7 -9
- data/lib/stepmod/utils/converters/term.rb +18 -9
- data/lib/stepmod/utils/converters/text.rb +12 -14
- data/lib/stepmod/utils/converters/uof.rb +11 -7
- data/lib/stepmod/utils/html_to_asciimath.rb +91 -90
- data/lib/stepmod/utils/smrl_description_converter.rb +34 -33
- data/lib/stepmod/utils/smrl_resource_converter.rb +51 -50
- data/lib/stepmod/utils/stepmod_definition_converter.rb +39 -37
- data/lib/stepmod/utils/stepmod_file_annotator.rb +26 -19
- data/lib/stepmod/utils/terms_extractor.rb +378 -0
- data/lib/stepmod/utils/version.rb +1 -1
- data/stepmod-utils.gemspec +12 -6
- metadata +76 -16
|
@@ -5,7 +5,7 @@ module Stepmod
|
|
|
5
5
|
module Converters
|
|
6
6
|
class ClauseRef < ReverseAdoc::Converters::Base
|
|
7
7
|
def convert(node, _state = {})
|
|
8
|
-
"
|
|
8
|
+
" {{#{normalized_ref(node['linkend'])}}} "
|
|
9
9
|
end
|
|
10
10
|
|
|
11
11
|
private
|
|
@@ -13,10 +13,10 @@ module Stepmod
|
|
|
13
13
|
def normalized_ref(ref)
|
|
14
14
|
return unless ref || ref.empty?
|
|
15
15
|
|
|
16
|
-
ref.to_s.split(
|
|
16
|
+
ref.to_s.split(":").last.squeeze(" ").strip
|
|
17
17
|
end
|
|
18
18
|
end
|
|
19
19
|
ReverseAdoc::Converters.register :clause_ref, ClauseRef.new
|
|
20
20
|
end
|
|
21
21
|
end
|
|
22
|
-
end
|
|
22
|
+
end
|
|
@@ -4,8 +4,10 @@ module Stepmod
|
|
|
4
4
|
module Utils
|
|
5
5
|
module Converters
|
|
6
6
|
class Comment < ReverseAdoc::Converters::Base
|
|
7
|
-
def convert(node,
|
|
8
|
-
comment = node.text.strip.split("\n").map
|
|
7
|
+
def convert(node, _state = {})
|
|
8
|
+
comment = node.text.strip.split("\n").map do |line|
|
|
9
|
+
"\n// #{line}"
|
|
10
|
+
end.join("\n")
|
|
9
11
|
"#{comment}\n"
|
|
10
12
|
end
|
|
11
13
|
end
|
|
@@ -13,4 +15,4 @@ module Stepmod
|
|
|
13
15
|
ReverseAdoc::Converters.register :comment, Comment.new
|
|
14
16
|
end
|
|
15
17
|
end
|
|
16
|
-
end
|
|
18
|
+
end
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
|
|
2
1
|
module Stepmod
|
|
3
2
|
module Utils
|
|
4
3
|
module Converters
|
|
@@ -12,24 +11,30 @@ module Stepmod
|
|
|
12
11
|
|
|
13
12
|
def treat_children(node, state)
|
|
14
13
|
converted = node.children.each_with_object({}) do |child, res|
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
content = treat(child, state)
|
|
15
|
+
next if content.strip.empty?
|
|
17
16
|
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
res[child] = content
|
|
18
|
+
end
|
|
20
19
|
previous = nil
|
|
21
|
-
result =
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
20
|
+
result = ""
|
|
21
|
+
|
|
22
|
+
converted.each.with_index do |(child, content), _i|
|
|
23
|
+
result += if block_tag?(child, previous)
|
|
24
|
+
"\n\n"
|
|
25
|
+
elsif comment_tag?(child, previous)
|
|
26
|
+
"\n"
|
|
27
|
+
else
|
|
28
|
+
" "
|
|
29
|
+
end
|
|
30
30
|
result += content
|
|
31
31
|
previous = child
|
|
32
32
|
end
|
|
33
|
+
|
|
34
|
+
# Remove double newlines for every line
|
|
35
|
+
result = result.gsub(/\n\n+/, "\n\n")
|
|
36
|
+
result = result.squeeze(" ")
|
|
37
|
+
|
|
33
38
|
result.strip
|
|
34
39
|
end
|
|
35
40
|
|
|
@@ -39,31 +44,34 @@ module Stepmod
|
|
|
39
44
|
end
|
|
40
45
|
|
|
41
46
|
def comment_tag?(child, previous)
|
|
42
|
-
child.name ==
|
|
47
|
+
child.name == "comment" || (previous && previous.name === "comment")
|
|
43
48
|
end
|
|
44
49
|
|
|
45
50
|
def additional_block(node)
|
|
46
51
|
# Treat first `p` tag as an `alt` block, metanorma/stepmod-utils#9
|
|
47
52
|
first_child_tag = node
|
|
48
|
-
|
|
49
|
-
|
|
53
|
+
.children
|
|
54
|
+
.find { |n| n.is_a?(Nokogiri::XML::Element) }
|
|
50
55
|
return unless can_transform_to_alt?(first_child_tag)
|
|
51
56
|
|
|
52
57
|
result = Stepmod::Utils::Converters::Synonym
|
|
53
|
-
|
|
54
|
-
|
|
58
|
+
.new
|
|
59
|
+
.convert(first_child_tag)
|
|
60
|
+
|
|
55
61
|
first_child_tag.remove
|
|
56
62
|
"#{result}\n\n"
|
|
57
63
|
end
|
|
58
64
|
|
|
59
65
|
# metanorma/stepmod-utils#18 when para is the only text doe snot transform it
|
|
60
66
|
def can_transform_to_alt?(first_child_tag)
|
|
61
|
-
return false unless first_child_tag&.name ==
|
|
62
|
-
|
|
67
|
+
return false unless first_child_tag&.name == "p" &&
|
|
68
|
+
defined?(Stepmod::Utils::Converters::Synonym)
|
|
63
69
|
|
|
64
70
|
next_sibling = first_child_tag.next
|
|
65
71
|
while next_sibling
|
|
66
|
-
return true if !next_sibling.text.to_s.strip.empty? && %w[p
|
|
72
|
+
return true if !next_sibling.text.to_s.strip.empty? && %w[p
|
|
73
|
+
text].include?(next_sibling.name)
|
|
74
|
+
|
|
67
75
|
next_sibling = next_sibling.next
|
|
68
76
|
end
|
|
69
77
|
false
|
|
@@ -4,7 +4,7 @@ module Stepmod
|
|
|
4
4
|
module Utils
|
|
5
5
|
module Converters
|
|
6
6
|
class Dt < ReverseAdoc::Converters::Base
|
|
7
|
-
def convert(node,
|
|
7
|
+
def convert(node, _state = {})
|
|
8
8
|
return "\n\n{blank}::" if node.text.strip.length.zero?
|
|
9
9
|
|
|
10
10
|
"\n\n#{node.text}:: "
|
|
@@ -14,4 +14,4 @@ module Stepmod
|
|
|
14
14
|
end
|
|
15
15
|
end
|
|
16
16
|
end
|
|
17
|
-
end
|
|
17
|
+
end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require
|
|
3
|
+
require "stepmod/utils/html_to_asciimath"
|
|
4
4
|
|
|
5
5
|
module Stepmod
|
|
6
6
|
module Utils
|
|
@@ -21,30 +21,32 @@ module Stepmod
|
|
|
21
21
|
|
|
22
22
|
def definition_node?(node)
|
|
23
23
|
first_strong_node = node
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
first_strong_node &&
|
|
31
|
-
first_strong_node.next &&
|
|
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&.next &&
|
|
32
31
|
first_strong_node.next.text? &&
|
|
33
32
|
first_strong_node.next.content =~ /\s+:/
|
|
34
33
|
end
|
|
35
34
|
|
|
36
35
|
def definition_converted(cloned_node, state)
|
|
37
36
|
first_strong_node = cloned_node
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
37
|
+
.children
|
|
38
|
+
.find do |n|
|
|
39
|
+
return false if !n.text? && n.name != "b"
|
|
41
40
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
first_strong_node.next.content = first_strong_node.next.content.gsub(
|
|
41
|
+
n.name == "b"
|
|
42
|
+
end
|
|
43
|
+
first_strong_node.next.content = first_strong_node.next.content.gsub(
|
|
44
|
+
/\s?:/, ""
|
|
45
|
+
)
|
|
45
46
|
term = first_strong_node.text.strip
|
|
46
47
|
first_strong_node.remove
|
|
47
|
-
"\n\n#{term}:: #{remove_trash_symbols(treat_children(cloned_node,
|
|
48
|
+
"\n\n#{term}:: #{remove_trash_symbols(treat_children(cloned_node,
|
|
49
|
+
state))}\n"
|
|
48
50
|
end
|
|
49
51
|
|
|
50
52
|
def stem_converted(cloned_node, state)
|
|
@@ -53,22 +55,22 @@ module Stepmod
|
|
|
53
55
|
content = Stepmod::Utils::HtmlToAsciimath.new.call(internal_content)
|
|
54
56
|
res = <<~TEMPLATE
|
|
55
57
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
58
|
+
[stem]
|
|
59
|
+
++++
|
|
60
|
+
#{remove_trash_symbols(content.strip)}
|
|
61
|
+
++++
|
|
60
62
|
|
|
61
|
-
|
|
62
|
-
res = "[[#{cloned_node['id']}]]\n#{res}" if cloned_node[
|
|
63
|
+
TEMPLATE
|
|
64
|
+
res = "[[#{cloned_node['id']}]]\n#{res}" if cloned_node["id"]&.length&.positive?
|
|
63
65
|
res
|
|
64
66
|
end
|
|
65
67
|
|
|
66
68
|
def remove_trash_symbols(content)
|
|
67
69
|
content
|
|
68
|
-
.gsub(/ /,
|
|
70
|
+
.gsub(/ /, "")
|
|
69
71
|
.strip
|
|
70
|
-
.gsub(/\(\d\)$/,
|
|
71
|
-
.gsub(/\b(\w*?
|
|
72
|
+
.gsub(/\(\d\)$/, "")
|
|
73
|
+
.gsub(/\b(\w*?_+\w+)\b/, '"\1"')
|
|
72
74
|
.gsub(/([^\s])\s+_{/, '\1_{')
|
|
73
75
|
.strip
|
|
74
76
|
end
|
|
@@ -81,7 +83,7 @@ module Stepmod
|
|
|
81
83
|
node
|
|
82
84
|
.children
|
|
83
85
|
.each do |n|
|
|
84
|
-
remove_tags_not_in_context(n) if n.children.length
|
|
86
|
+
remove_tags_not_in_context(n) if n.children.length.positive?
|
|
85
87
|
next if n.name != tag_name
|
|
86
88
|
|
|
87
89
|
n.add_previous_sibling(n.children)
|
|
@@ -5,10 +5,20 @@ module Stepmod
|
|
|
5
5
|
module Converters
|
|
6
6
|
class Example < ReverseAdoc::Converters::Base
|
|
7
7
|
def convert(node, state = {})
|
|
8
|
-
|
|
8
|
+
# If we want to skip this node
|
|
9
|
+
return "" if state[:no_notes_examples]
|
|
10
|
+
|
|
11
|
+
<<~TEMPLATE
|
|
12
|
+
|
|
13
|
+
[example]
|
|
14
|
+
====
|
|
15
|
+
#{treat_children(node, state).strip}
|
|
16
|
+
====
|
|
17
|
+
|
|
18
|
+
TEMPLATE
|
|
9
19
|
end
|
|
10
20
|
end
|
|
11
21
|
ReverseAdoc::Converters.register :example, Example.new
|
|
12
22
|
end
|
|
13
23
|
end
|
|
14
|
-
end
|
|
24
|
+
end
|
|
@@ -6,19 +6,20 @@ module Stepmod
|
|
|
6
6
|
class ExpressG < ReverseAdoc::Converters::Base
|
|
7
7
|
def convert(node, state = {})
|
|
8
8
|
node.children.map do |child|
|
|
9
|
-
next unless child.name ==
|
|
9
|
+
next unless child.name == "imgfile"
|
|
10
10
|
|
|
11
|
-
parse_to_svg_reference(child[
|
|
11
|
+
parse_to_svg_reference(child["file"], state)
|
|
12
12
|
end.join("\n")
|
|
13
13
|
end
|
|
14
14
|
|
|
15
15
|
private
|
|
16
16
|
|
|
17
17
|
def parse_to_svg_reference(file, state)
|
|
18
|
-
return
|
|
18
|
+
return "" unless File.file?(file)
|
|
19
19
|
|
|
20
20
|
image_document = Nokogiri::XML(File.read(file))
|
|
21
|
-
svg_path = File.basename(image_document.xpath(
|
|
21
|
+
svg_path = File.basename(image_document.xpath("//img").first["src"],
|
|
22
|
+
".*")
|
|
22
23
|
<<~SVGMAP
|
|
23
24
|
|
|
24
25
|
*)
|
|
@@ -27,23 +28,23 @@ module Stepmod
|
|
|
27
28
|
====
|
|
28
29
|
image::#{svg_path}.svg[]
|
|
29
30
|
|
|
30
|
-
#{image_document.xpath('//img.area').map.with_index(1) {|n, i| schema_reference(n['href'], i) }.join("\n")}
|
|
31
|
+
#{image_document.xpath('//img.area').map.with_index(1) { |n, i| schema_reference(n['href'], i) }.join("\n")}
|
|
31
32
|
====
|
|
32
33
|
SVGMAP
|
|
33
34
|
end
|
|
34
35
|
|
|
35
36
|
def schema_reference(xml_path, index)
|
|
36
|
-
if xml_path
|
|
37
|
-
_,express_path_part = xml_path.split(
|
|
37
|
+
if /#/.match?(xml_path)
|
|
38
|
+
_, express_path_part = xml_path.split("#")
|
|
38
39
|
"* <<express:#{express_path_part.strip}>>; #{index}"
|
|
39
40
|
else
|
|
40
|
-
schema_name = File.basename(xml_path,
|
|
41
|
+
schema_name = File.basename(xml_path, ".*")
|
|
41
42
|
"* <<express:#{schema_name.strip}>>; #{index}"
|
|
42
43
|
end
|
|
43
44
|
end
|
|
44
45
|
end
|
|
45
46
|
|
|
46
|
-
ReverseAdoc::Converters.register
|
|
47
|
+
ReverseAdoc::Converters.register "express-g", ExpressG.new
|
|
47
48
|
end
|
|
48
49
|
end
|
|
49
50
|
end
|
|
@@ -5,10 +5,10 @@ module Stepmod
|
|
|
5
5
|
module Converters
|
|
6
6
|
class ExpressRef < ReverseAdoc::Converters::Base
|
|
7
7
|
def convert(node, _state = {})
|
|
8
|
-
"*#{node['linkend'].to_s.split('.').last}*"
|
|
8
|
+
" *#{node['linkend'].to_s.split('.').last}*"
|
|
9
9
|
end
|
|
10
10
|
end
|
|
11
11
|
ReverseAdoc::Converters.register :express_ref, ExpressRef.new
|
|
12
12
|
end
|
|
13
13
|
end
|
|
14
|
-
end
|
|
14
|
+
end
|
|
@@ -3,11 +3,12 @@ module Stepmod
|
|
|
3
3
|
module Converters
|
|
4
4
|
class ExpressRefExpressDescription < ReverseAdoc::Converters::Base
|
|
5
5
|
def convert(node, _state = {})
|
|
6
|
-
parts = node[
|
|
6
|
+
parts = node["linkend"].to_s.split(":").last.split(".")
|
|
7
7
|
"<<express:#{parts.join('.').strip},#{parts.last.strip}>>"
|
|
8
8
|
end
|
|
9
9
|
end
|
|
10
|
-
ReverseAdoc::Converters.register :express_ref,
|
|
10
|
+
ReverseAdoc::Converters.register :express_ref,
|
|
11
|
+
ExpressRefExpressDescription.new
|
|
11
12
|
end
|
|
12
13
|
end
|
|
13
14
|
end
|
|
@@ -3,10 +3,12 @@ module Stepmod
|
|
|
3
3
|
module Converters
|
|
4
4
|
class ExtDescription < ReverseAdoc::Converters::Base
|
|
5
5
|
def convert(node, state = {})
|
|
6
|
-
state = state.merge(schema_name: node[
|
|
6
|
+
state = state.merge(schema_name: node["linkend"])
|
|
7
|
+
child_text = treat_children(node, state).strip
|
|
8
|
+
|
|
7
9
|
<<~TEMPLATE
|
|
8
10
|
(*"#{node['linkend']}"
|
|
9
|
-
#{
|
|
11
|
+
#{child_text}
|
|
10
12
|
*)
|
|
11
13
|
TEMPLATE
|
|
12
14
|
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "reverse_adoc/converters/figure"
|
|
4
|
+
|
|
5
|
+
module Stepmod
|
|
6
|
+
module Utils
|
|
7
|
+
module Converters
|
|
8
|
+
class Figure < ReverseAdoc::Converters::Figure
|
|
9
|
+
def convert(node, state = {})
|
|
10
|
+
# If we want to skip this node
|
|
11
|
+
return "" if state[:no_notes_examples]
|
|
12
|
+
|
|
13
|
+
super
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
# This replaces the converter
|
|
17
|
+
ReverseAdoc::Converters.register :figure, Figure.new
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|