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
@@ -18,4 +18,4 @@ module Stepmod
18
18
  ReverseAdoc::Converters.register :fund_cons, FundCons.new
19
19
  end
20
20
  end
21
- end
21
+ end
@@ -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, state = {})
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(node, state = {})
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(node, state = {})
8
- '' # noop
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
@@ -12,4 +12,4 @@ module Stepmod
12
12
  ReverseAdoc::Converters.register :introduction, Introduction.new
13
13
  end
14
14
  end
15
- end
15
+ end
@@ -5,18 +5,22 @@ module Stepmod
5
5
  module Converters
6
6
  class ModuleRef < ReverseAdoc::Converters::Base
7
7
  def convert(node, _state = {})
8
- ref = node['linkend']
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
- # term:[individual products]
16
- if node['linkend'].split(':').length > 1
17
- ref = node.text
15
+ # {{individual products}}
16
+
17
+ ref = node.text.strip
18
+ if !ref.empty?
19
+ " {{#{normalized_ref(ref)}}} "
20
+ elsif
21
+ ref = node["linkend"].split(":").first
22
+ " *#{ref}*"
18
23
  end
19
- " term:[#{normalized_ref(ref)}] "
20
24
  end
21
25
 
22
26
  private
@@ -24,10 +28,10 @@ module Stepmod
24
28
  def normalized_ref(ref)
25
29
  return unless ref || ref.empty?
26
30
 
27
- ref.squeeze(' ').strip
31
+ ref.squeeze(" ").strip
28
32
  end
29
33
  end
30
34
  ReverseAdoc::Converters.register :module_ref, ModuleRef.new
31
35
  end
32
36
  end
33
- end
37
+ end
@@ -5,10 +5,20 @@ module Stepmod
5
5
  module Converters
6
6
  class Note < ReverseAdoc::Converters::Base
7
7
  def convert(node, state = {})
8
- "\n\n[NOTE]\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
+ [NOTE]
14
+ --
15
+ #{treat_children(node, state).strip}
16
+ --
17
+
18
+ TEMPLATE
9
19
  end
10
20
  end
11
21
  ReverseAdoc::Converters.register :note, Note.new
12
22
  end
13
23
  end
14
- end
24
+ 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['id']
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
- res = "\n\n#{anchor}#{attrs}#{treat_children(node, state.merge(ol_count: ol_count, tdsinglepara: true))}\n"
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['id']
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
@@ -4,10 +4,10 @@ module Stepmod
4
4
  module Utils
5
5
  module Converters
6
6
  class PassThrough < ReverseAdoc::Converters::Base
7
- def convert(node, state = {})
7
+ def convert(node, _state = {})
8
8
  node.to_s
9
9
  end
10
10
  end
11
11
  end
12
12
  end
13
- end
13
+ end
@@ -13,4 +13,4 @@ module Stepmod
13
13
  ReverseAdoc::Converters.register :q, Q.new
14
14
  end
15
15
  end
16
- end
16
+ end
@@ -5,7 +5,7 @@ module Stepmod
5
5
  module Converters
6
6
  class Schema < ReverseAdoc::Converters::Base
7
7
  def convert(node, state = {})
8
- state = state.merge(schema_name: node['name'])
8
+ state = state.merge(schema_name: node["name"])
9
9
  <<~TEMPLATE
10
10
  (*"#{node['name']}"
11
11
  #{treat_children(node, state).strip}
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'stepmod/utils/converters/em'
3
+ require "stepmod/utils/converters/em"
4
4
 
5
5
  module Stepmod
6
6
  module Utils
@@ -3,20 +3,43 @@ module Stepmod
3
3
  module Converters
4
4
  class StepmodExtDescription < ReverseAdoc::Converters::Base
5
5
  def convert(node, state = {})
6
- state = state.merge(schema_name: node['linkend'])
7
- linkend = node['linkend'].split('.')
6
+ state = state.merge(schema_name: node["linkend"])
7
+ linkend = node["linkend"].split(".")
8
8
 
9
- # We ignore all the WHERE and IP rules because those are not terms
10
- return nil if linkend.last =~ /^wr/
9
+ # We only want ENTITY entries, not their attributes
10
+ # https://github.com/metanorma/iso-10303-2/issues/36#issuecomment-841300092
11
+ return nil if linkend.length != 2
12
+
13
+ child_text = treat_children(node, state).strip
14
+ return nil if child_text.empty?
15
+
16
+ # Only taking the first paragraph of the definition
17
+ child_text = child_text.split("\n").first
18
+
19
+ # # Only taking the first sentence
20
+ # if child_text.contains?(".")
21
+ # child_text = child_text.split(".").first
22
+ # end
23
+
24
+ domain = case linkend.first
25
+ when /_mim$/, /_arm$/
26
+ "STEP module"
27
+ # when /_schema$/
28
+ else
29
+ "STEP resource"
30
+ end
11
31
 
12
32
  <<~TEMPLATE
13
- === #{node['linkend'].split('.').last}
33
+ === #{linkend.last}
34
+
35
+ #{domain ? "domain:[#{domain}]" : ''}
14
36
 
15
- <STEP resource> #{treat_children(node, state).strip}
37
+ #{child_text}
16
38
  TEMPLATE
17
39
  end
18
40
  end
19
- ReverseAdoc::Converters.register :ext_description, StepmodExtDescription.new
41
+ ReverseAdoc::Converters.register :ext_description,
42
+ StepmodExtDescription.new
20
43
  end
21
44
  end
22
45
  end
@@ -4,14 +4,15 @@ module Stepmod
4
4
  module Utils
5
5
  module Converters
6
6
  class Strong < ReverseAdoc::Converters::Base
7
- BLANK_CHARS = "{blank}".freeze
7
+ BLANK_CHARS = "{blank}"
8
8
 
9
9
  def convert(node, state = {})
10
10
  content = treat_children(node, state.merge(already_strong: true))
11
11
  if content.strip.empty? || state[:already_strong]
12
12
  content
13
13
  else
14
- handle_express_escape_seq(node, "#{content[/^\s*/]}*#{content.strip}*#{content[/\s*$/]}")
14
+ handle_express_escape_seq(node,
15
+ "#{content[/^\s*/]}*#{content.strip}*#{content[/\s*$/]}")
15
16
  end
16
17
  end
17
18
 
@@ -30,7 +31,7 @@ module Stepmod
30
31
 
31
32
  def braces_sibling?(sibling, end_of_text = false)
32
33
  match = end_of_text ? /\($/ : /^\)/
33
- sibling && sibling.text? && sibling.text =~ match
34
+ sibling&.text? && sibling.text =~ match
34
35
  end
35
36
  end
36
37
 
@@ -38,4 +39,4 @@ module Stepmod
38
39
  ReverseAdoc::Converters.register :b, Strong.new
39
40
  end
40
41
  end
41
- end
42
+ end
@@ -6,7 +6,7 @@ module Stepmod
6
6
  class Sub < ReverseAdoc::Converters::Base
7
7
  def convert(node, state = {})
8
8
  content = treat_children(node, state)
9
- return stem_notation(content) if node.parent.name == 'eqn'
9
+ return stem_notation(content) if node.parent.name == "eqn"
10
10
 
11
11
  "#{content[/^\s*/]}~#{content.strip}~#{content[/\s*$/]}"
12
12
  end
@@ -21,4 +21,4 @@ module Stepmod
21
21
  ReverseAdoc::Converters.register :sub, Sub.new
22
22
  end
23
23
  end
24
- end
24
+ end
@@ -6,7 +6,7 @@ module Stepmod
6
6
  class Sup < ReverseAdoc::Converters::Base
7
7
  def convert(node, state = {})
8
8
  content = treat_children(node, state)
9
- return stem_notation(content) if node.parent.name == 'eqn'
9
+ return stem_notation(content) if node.parent.name == "eqn"
10
10
 
11
11
  "#{content[/^\s*/]}^#{content.strip}^#{content[/\s*$/]}"
12
12
  end
@@ -19,4 +19,4 @@ module Stepmod
19
19
  ReverseAdoc::Converters.register :sup, Sup.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 Synonym < ReverseAdoc::Converters::Base
7
- def convert(node, state = {})
7
+ def convert(node, _state = {})
8
8
  "alt:[#{node.text.strip}]"
9
9
  end
10
10
  end
@@ -12,4 +12,4 @@ module Stepmod
12
12
  ReverseAdoc::Converters.register :synonym, Synonym.new
13
13
  end
14
14
  end
15
- end
15
+ end
@@ -5,12 +5,13 @@ module Stepmod
5
5
  module Converters
6
6
  class Table < ReverseAdoc::Converters::Base
7
7
  def convert(node, state = {})
8
- id = node['id']
8
+ id = node["id"]
9
9
  anchor = id ? "[[#{id}]]\n" : ""
10
- title = node['caption'].to_s
10
+ title = node["caption"].to_s
11
11
  title = ".#{title}\n" unless title.empty?
12
12
  attrs = style(node)
13
- "\n\n#{anchor}#{attrs}#{title}|===\n#{treat_children(node, state)}\n|===\n"
13
+ "\n\n#{anchor}#{attrs}#{title}|===\n#{treat_children(node,
14
+ state)}\n|===\n"
14
15
  end
15
16
 
16
17
  def frame(node)
@@ -23,8 +24,6 @@ module Stepmod
23
24
  "frame=sides"
24
25
  when "box", "border"
25
26
  "frame=all"
26
- else
27
- nil
28
27
  end
29
28
  end
30
29
 
@@ -38,13 +37,11 @@ module Stepmod
38
37
  "rules=cols"
39
38
  when "none"
40
39
  "rules=none"
41
- else
42
- nil
43
40
  end
44
41
  end
45
42
 
46
43
  def style(node)
47
- width = "width=#{node['width']}" if node['width']
44
+ width = "width=#{node['width']}" if node["width"]
48
45
  attrs = []
49
46
  frame_attr = frame(node)
50
47
  rules_attr = rules(node)
@@ -52,6 +49,7 @@ module Stepmod
52
49
  attrs += frame_attr if frame_attr
53
50
  attrs += rules_attr if rules_attr
54
51
  return "" if attrs.empty?
52
+
55
53
  "[#{attrs.join(',')}]\n"
56
54
  end
57
55
  end
@@ -59,4 +57,4 @@ module Stepmod
59
57
  ReverseAdoc::Converters.register :table, Table.new
60
58
  end
61
59
  end
62
- end
60
+ end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'stepmod/utils/converters/synonym'
3
+ require "stepmod/utils/converters/synonym"
4
4
 
5
5
  module Stepmod
6
6
  module Utils
@@ -8,22 +8,31 @@ module Stepmod
8
8
  class Term < ReverseAdoc::Converters::Base
9
9
  def convert(node, state = {})
10
10
  first_child = node.children.find do |child|
11
- child.name == 'text' && !child.text.to_s.strip.empty?
12
- end
11
+ child.name == "text" && !child.text.to_s.strip.empty?
12
+ end
13
13
  unless first_child &&
14
- node.text.split(';').length == 2 &&
15
- defined?(Stepmod::Utils::Converters::Synonym)
16
- return "=== #{treat_children(node, state).strip}"
14
+ node.text.split(";").length == 2 &&
15
+ defined?(Stepmod::Utils::Converters::Synonym)
16
+ return "=== #{treat_acronym(treat_children(node, state).strip)}"
17
17
  end
18
18
 
19
- term_def, alt = node.text.split(';')
19
+ term_def, alt = node.text.split(";")
20
20
  alt_xml = Nokogiri::XML::Text.new(alt, Nokogiri::XML::Document.new)
21
21
  converted_alt = Stepmod::Utils::Converters::Synonym.new.convert(alt_xml)
22
- "=== #{term_def}\n\n#{converted_alt}"
22
+ "=== #{treat_acronym(term_def)}\n\n#{converted_alt}"
23
+ end
24
+
25
+ private
26
+
27
+ def treat_acronym(term_def)
28
+ return term_def if term_def !~ /.+\(.+?\)$/
29
+
30
+ _, term_text, term_acronym = term_def.match(/(.+?)(\(.+\))$/).to_a
31
+ "#{term_text}\nalt:[#{term_acronym.gsub(/\(|\)/, '')}]"
23
32
  end
24
33
  end
25
34
 
26
35
  ReverseAdoc::Converters.register :term, Term.new
27
36
  end
28
37
  end
29
- end
38
+ end