stepmod-utils 0.3.5 → 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 -1
- data/.github/workflows/release.yml +4 -3
- data/.rubocop.yml +1 -1
- 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 +38 -25
- 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 +30 -35
- 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 +19 -19
- 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 +5 -6
- 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 +1 -1
- data/lib/stepmod/utils/converters/figure.rb +3 -3
- 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 +6 -6
- data/lib/stepmod/utils/converters/note.rb +5 -6
- 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 +5 -4
- 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 +11 -13
- data/lib/stepmod/utils/converters/uof.rb +3 -4
- 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 +50 -49
- data/lib/stepmod/utils/stepmod_definition_converter.rb +39 -38
- data/lib/stepmod/utils/stepmod_file_annotator.rb +26 -19
- data/lib/stepmod/utils/terms_extractor.rb +138 -86
- data/lib/stepmod/utils/version.rb +1 -1
- data/stepmod-utils.gemspec +11 -5
- metadata +71 -15
@@ -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,16 +5,15 @@ module Stepmod
|
|
5
5
|
module Converters
|
6
6
|
class Example < ReverseAdoc::Converters::Base
|
7
7
|
def convert(node, state = {})
|
8
|
-
|
9
8
|
# If we want to skip this node
|
10
|
-
return
|
9
|
+
return "" if state[:no_notes_examples]
|
11
10
|
|
12
11
|
<<~TEMPLATE
|
13
12
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
13
|
+
[example]
|
14
|
+
====
|
15
|
+
#{treat_children(node, state).strip}
|
16
|
+
====
|
18
17
|
|
19
18
|
TEMPLATE
|
20
19
|
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,7 +3,7 @@ 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
7
|
child_text = treat_children(node, state).strip
|
8
8
|
|
9
9
|
<<~TEMPLATE
|
@@ -1,5 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
|
2
|
+
|
3
|
+
require "reverse_adoc/converters/figure"
|
3
4
|
|
4
5
|
module Stepmod
|
5
6
|
module Utils
|
@@ -7,7 +8,7 @@ module Stepmod
|
|
7
8
|
class Figure < ReverseAdoc::Converters::Figure
|
8
9
|
def convert(node, state = {})
|
9
10
|
# If we want to skip this node
|
10
|
-
return
|
11
|
+
return "" if state[:no_notes_examples]
|
11
12
|
|
12
13
|
super
|
13
14
|
end
|
@@ -17,4 +18,3 @@ module Stepmod
|
|
17
18
|
end
|
18
19
|
end
|
19
20
|
end
|
20
|
-
|
@@ -4,7 +4,7 @@ module Stepmod
|
|
4
4
|
module Utils
|
5
5
|
module Converters
|
6
6
|
class Head < ReverseAdoc::Converters::Base
|
7
|
-
def convert(node,
|
7
|
+
def convert(node, _state = {})
|
8
8
|
title = extract_title(node)
|
9
9
|
"= #{title}\n:stem:\n\n"
|
10
10
|
end
|
@@ -12,6 +12,7 @@ module Stepmod
|
|
12
12
|
def extract_title(node)
|
13
13
|
title = node.at("./title")
|
14
14
|
return "(???)" if title.nil?
|
15
|
+
|
15
16
|
title.text
|
16
17
|
end
|
17
18
|
end
|
@@ -19,4 +20,4 @@ module Stepmod
|
|
19
20
|
ReverseAdoc::Converters.register :head, Head.new
|
20
21
|
end
|
21
22
|
end
|
22
|
-
end
|
23
|
+
end
|
@@ -4,7 +4,7 @@ module Stepmod
|
|
4
4
|
module Utils
|
5
5
|
module Converters
|
6
6
|
class Hr < ReverseAdoc::Converters::Base
|
7
|
-
def convert(
|
7
|
+
def convert(_node, _state = {})
|
8
8
|
"\n* * *\n"
|
9
9
|
end
|
10
10
|
end
|
@@ -12,4 +12,4 @@ module Stepmod
|
|
12
12
|
ReverseAdoc::Converters.register :hr, Hr.new
|
13
13
|
end
|
14
14
|
end
|
15
|
-
end
|
15
|
+
end
|
@@ -4,8 +4,8 @@ module Stepmod
|
|
4
4
|
module Utils
|
5
5
|
module Converters
|
6
6
|
class Ignore < ReverseAdoc::Converters::Base
|
7
|
-
def convert(
|
8
|
-
|
7
|
+
def convert(_node, _state = {})
|
8
|
+
"" # noop
|
9
9
|
end
|
10
10
|
end
|
11
11
|
|
@@ -13,4 +13,4 @@ module Stepmod
|
|
13
13
|
ReverseAdoc::Converters.register :col, Ignore.new
|
14
14
|
end
|
15
15
|
end
|
16
|
-
end
|
16
|
+
end
|
@@ -5,20 +5,20 @@ module Stepmod
|
|
5
5
|
module Converters
|
6
6
|
class ModuleRef < ReverseAdoc::Converters::Base
|
7
7
|
def convert(node, _state = {})
|
8
|
-
ref = node[
|
8
|
+
ref = node["linkend"]
|
9
9
|
# #23:
|
10
10
|
# In this case when we see this:
|
11
11
|
|
12
12
|
# <module_ref linkend="product_as_individual:3_definition">individual products</module_ref>
|
13
13
|
# We take the text value of the element and convert to this:
|
14
14
|
|
15
|
-
#
|
15
|
+
# {{individual products}}
|
16
16
|
|
17
17
|
ref = node.text.strip
|
18
18
|
if !ref.empty?
|
19
|
-
"
|
19
|
+
" {{#{normalized_ref(ref)}}} "
|
20
20
|
elsif
|
21
|
-
ref = node[
|
21
|
+
ref = node["linkend"].split(":").first
|
22
22
|
" *#{ref}*"
|
23
23
|
end
|
24
24
|
end
|
@@ -28,10 +28,10 @@ module Stepmod
|
|
28
28
|
def normalized_ref(ref)
|
29
29
|
return unless ref || ref.empty?
|
30
30
|
|
31
|
-
ref.squeeze(
|
31
|
+
ref.squeeze(" ").strip
|
32
32
|
end
|
33
33
|
end
|
34
34
|
ReverseAdoc::Converters.register :module_ref, ModuleRef.new
|
35
35
|
end
|
36
36
|
end
|
37
|
-
end
|
37
|
+
end
|
@@ -5,16 +5,15 @@ module Stepmod
|
|
5
5
|
module Converters
|
6
6
|
class Note < ReverseAdoc::Converters::Base
|
7
7
|
def convert(node, state = {})
|
8
|
-
|
9
8
|
# If we want to skip this node
|
10
|
-
return
|
9
|
+
return "" if state[:no_notes_examples]
|
11
10
|
|
12
11
|
<<~TEMPLATE
|
13
12
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
13
|
+
[NOTE]
|
14
|
+
--
|
15
|
+
#{treat_children(node, state).strip}
|
16
|
+
--
|
18
17
|
|
19
18
|
TEMPLATE
|
20
19
|
end
|
@@ -5,14 +5,16 @@ module Stepmod
|
|
5
5
|
module Converters
|
6
6
|
class Ol < ReverseAdoc::Converters::Base
|
7
7
|
def convert(node, state = {})
|
8
|
-
id = node[
|
8
|
+
id = node["id"]
|
9
9
|
anchor = id ? "[[#{id}]]\n" : ""
|
10
10
|
ol_count = state.fetch(:ol_count, 0) + 1
|
11
11
|
attrs = ol_attrs(node)
|
12
|
-
|
12
|
+
"\n\n#{anchor}#{attrs}#{treat_children(node,
|
13
|
+
state.merge(
|
14
|
+
ol_count: ol_count, tdsinglepara: true,
|
15
|
+
))}\n"
|
13
16
|
# Why do we add this?
|
14
17
|
# res = "\n" + res if node.parent && node.parent.name == 'note'
|
15
|
-
res
|
16
18
|
end
|
17
19
|
|
18
20
|
def number_style(node)
|
@@ -22,8 +24,6 @@ module Stepmod
|
|
22
24
|
when "a" then "loweralpha"
|
23
25
|
when "I" then "upperroman"
|
24
26
|
when "i" then "lowerroman"
|
25
|
-
else
|
26
|
-
nil
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
@@ -5,7 +5,7 @@ module Stepmod
|
|
5
5
|
module Converters
|
6
6
|
class P < ReverseAdoc::Converters::Base
|
7
7
|
def convert(node, state = {})
|
8
|
-
id = node[
|
8
|
+
id = node["id"]
|
9
9
|
anchor = id ? "[[#{id}]]\n" : ""
|
10
10
|
if state[:tdsinglepara]
|
11
11
|
"#{anchor}#{treat_children(node, state).strip}"
|
@@ -18,4 +18,4 @@ module Stepmod
|
|
18
18
|
ReverseAdoc::Converters.register :p, P.new
|
19
19
|
end
|
20
20
|
end
|
21
|
-
end
|
21
|
+
end
|