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.
Files changed (67) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/rake.yml +1 -11
  3. data/.github/workflows/release.yml +7 -5
  4. data/.hound.yml +5 -0
  5. data/.rubocop.yml +10 -0
  6. data/Gemfile +3 -3
  7. data/Rakefile +1 -1
  8. data/exe/stepmod-annotate-all +17 -11
  9. data/exe/stepmod-build-resource-docs-cache +8 -7
  10. data/exe/stepmod-convert-express-description +6 -4
  11. data/exe/stepmod-convert-express-resource +6 -4
  12. data/exe/stepmod-extract-terms +67 -234
  13. data/exe/stepmod-find-express-files +8 -7
  14. data/lib/stepmod/utils/bibdata.rb +31 -35
  15. data/lib/stepmod/utils/cleaner.rb +3 -3
  16. data/lib/stepmod/utils/concept.rb +86 -30
  17. data/lib/stepmod/utils/converters/a.rb +7 -10
  18. data/lib/stepmod/utils/converters/blockquote.rb +4 -4
  19. data/lib/stepmod/utils/converters/br.rb +1 -1
  20. data/lib/stepmod/utils/converters/bypass.rb +33 -33
  21. data/lib/stepmod/utils/converters/clause_ref.rb +3 -3
  22. data/lib/stepmod/utils/converters/code.rb +1 -1
  23. data/lib/stepmod/utils/converters/comment.rb +5 -3
  24. data/lib/stepmod/utils/converters/dd.rb +2 -2
  25. data/lib/stepmod/utils/converters/def.rb +30 -22
  26. data/lib/stepmod/utils/converters/drop.rb +2 -2
  27. data/lib/stepmod/utils/converters/dt.rb +2 -2
  28. data/lib/stepmod/utils/converters/em.rb +1 -1
  29. data/lib/stepmod/utils/converters/em_express_description.rb +1 -1
  30. data/lib/stepmod/utils/converters/eqn.rb +28 -26
  31. data/lib/stepmod/utils/converters/example.rb +12 -2
  32. data/lib/stepmod/utils/converters/express_g.rb +10 -9
  33. data/lib/stepmod/utils/converters/express_ref.rb +2 -2
  34. data/lib/stepmod/utils/converters/express_ref_express_description.rb +3 -2
  35. data/lib/stepmod/utils/converters/ext_description.rb +4 -2
  36. data/lib/stepmod/utils/converters/figure.rb +20 -0
  37. data/lib/stepmod/utils/converters/fund_cons.rb +1 -1
  38. data/lib/stepmod/utils/converters/head.rb +3 -2
  39. data/lib/stepmod/utils/converters/hr.rb +2 -2
  40. data/lib/stepmod/utils/converters/ignore.rb +3 -3
  41. data/lib/stepmod/utils/converters/introduction.rb +1 -1
  42. data/lib/stepmod/utils/converters/module_ref.rb +11 -7
  43. data/lib/stepmod/utils/converters/note.rb +12 -2
  44. data/lib/stepmod/utils/converters/ol.rb +5 -5
  45. data/lib/stepmod/utils/converters/p.rb +2 -2
  46. data/lib/stepmod/utils/converters/pass_through.rb +2 -2
  47. data/lib/stepmod/utils/converters/q.rb +1 -1
  48. data/lib/stepmod/utils/converters/schema.rb +1 -1
  49. data/lib/stepmod/utils/converters/stem.rb +1 -1
  50. data/lib/stepmod/utils/converters/stepmod_ext_description.rb +30 -7
  51. data/lib/stepmod/utils/converters/strong.rb +5 -4
  52. data/lib/stepmod/utils/converters/sub.rb +2 -2
  53. data/lib/stepmod/utils/converters/sup.rb +2 -2
  54. data/lib/stepmod/utils/converters/synonym.rb +2 -2
  55. data/lib/stepmod/utils/converters/table.rb +7 -9
  56. data/lib/stepmod/utils/converters/term.rb +18 -9
  57. data/lib/stepmod/utils/converters/text.rb +12 -14
  58. data/lib/stepmod/utils/converters/uof.rb +11 -7
  59. data/lib/stepmod/utils/html_to_asciimath.rb +91 -90
  60. data/lib/stepmod/utils/smrl_description_converter.rb +34 -33
  61. data/lib/stepmod/utils/smrl_resource_converter.rb +51 -50
  62. data/lib/stepmod/utils/stepmod_definition_converter.rb +39 -37
  63. data/lib/stepmod/utils/stepmod_file_annotator.rb +26 -19
  64. data/lib/stepmod/utils/terms_extractor.rb +378 -0
  65. data/lib/stepmod/utils/version.rb +1 -1
  66. data/stepmod-utils.gemspec +12 -6
  67. 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
- " term:[#{normalized_ref(node['linkend'])}] "
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(':').last.squeeze(' ').strip
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,7 +4,7 @@ module Stepmod
4
4
  module Utils
5
5
  module Converters
6
6
  class Code < ReverseAdoc::Converters::Base
7
- def convert(node, state = {})
7
+ def convert(node, _state = {})
8
8
  "`#{node.text}`"
9
9
  end
10
10
  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, state = {})
8
- comment = node.text.strip.split("\n").map{|line| "// #{line}"}.join("\n")
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
@@ -4,7 +4,7 @@ module Stepmod
4
4
  module Utils
5
5
  module Converters
6
6
  class Dd < ReverseAdoc::Converters::Base
7
- def convert(node, state = {})
7
+ def convert(node, _state = {})
8
8
  "#{node.text}\n"
9
9
  end
10
10
 
@@ -12,4 +12,4 @@ module Stepmod
12
12
  end
13
13
  end
14
14
  end
15
- end
15
+ 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
- content = treat(child, state).strip
16
- next if content.empty?
14
+ content = treat(child, state)
15
+ next if content.strip.empty?
17
16
 
18
- res[child] = content
19
- end
17
+ res[child] = content
18
+ end
20
19
  previous = nil
21
- result = ''
22
- converted.each.with_index do |(child, content), i|
23
- if block_tag?(child, previous)
24
- result += "\n\n"
25
- elsif comment_tag?(child, previous)
26
- result += "\n"
27
- else
28
- result += ' '
29
- end
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 == 'comment' || (previous && previous.name === 'comment')
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
- .children
49
- .find { |n| n.is_a?(Nokogiri::XML::Element) }
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
- .new
54
- .convert(first_child_tag)
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 == 'p' &&
62
- defined?(Stepmod::Utils::Converters::Synonym)
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 text].include?(next_sibling.name)
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,8 +4,8 @@ module Stepmod
4
4
  module Utils
5
5
  module Converters
6
6
  class Drop < ReverseAdoc::Converters::Base
7
- def convert(node, state = {})
8
- ''
7
+ def convert(_node, _state = {})
8
+ ""
9
9
  end
10
10
  end
11
11
 
@@ -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, state = {})
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
@@ -15,7 +15,7 @@ module Stepmod
15
15
  end
16
16
 
17
17
  ReverseAdoc::Converters.register :em, Em.new
18
- ReverseAdoc::Converters.register :cite, Em.new
18
+ ReverseAdoc::Converters.register :cite, Em.new
19
19
  end
20
20
  end
21
21
  end
@@ -16,7 +16,7 @@ module Stepmod
16
16
 
17
17
  ReverseAdoc::Converters.register :em, Em.new
18
18
  ReverseAdoc::Converters.register :i, Em.new
19
- ReverseAdoc::Converters.register :cite, Em.new
19
+ ReverseAdoc::Converters.register :cite, Em.new
20
20
  end
21
21
  end
22
22
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'stepmod/utils/html_to_asciimath'
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
- .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 &&
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
- .children
39
- .find do |n|
40
- return false if !n.text? && n.name != 'b'
37
+ .children
38
+ .find do |n|
39
+ return false if !n.text? && n.name != "b"
41
40
 
42
- n.name == 'b'
43
- end
44
- first_strong_node.next.content = first_strong_node.next.content.gsub(/\s?:/, '')
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, state))}\n"
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
- [stem]
57
- ++++
58
- #{remove_trash_symbols(content.strip)}
59
- ++++
58
+ [stem]
59
+ ++++
60
+ #{remove_trash_symbols(content.strip)}
61
+ ++++
60
62
 
61
- TEMPLATE
62
- res = "[[#{cloned_node['id']}]]\n#{res}" if cloned_node['id'] && cloned_node['id'].length > 0
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*?[_]+\w+)\b/, '"\1"')
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 > 0
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
- "\n\n[example]\n====\n#{treat_children(node, state).strip}\n====\n\n"
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 == 'imgfile'
9
+ next unless child.name == "imgfile"
10
10
 
11
- parse_to_svg_reference(child['file'], state)
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 '' unless File.file?(file)
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('//img').first['src'], '.*')
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 'express-g', ExpressG.new
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['linkend'].to_s.split(':').last.split('.')
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, ExpressRefExpressDescription.new
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['linkend'])
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
- #{treat_children(node, state).strip}
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