stepmod-utils 0.3.5 → 0.3.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (66) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/rake.yml +1 -1
  3. data/.github/workflows/release.yml +4 -3
  4. data/.rubocop.yml +1 -1
  5. data/Gemfile +3 -3
  6. data/Rakefile +1 -1
  7. data/exe/stepmod-annotate-all +17 -11
  8. data/exe/stepmod-build-resource-docs-cache +8 -7
  9. data/exe/stepmod-convert-express-description +6 -4
  10. data/exe/stepmod-convert-express-resource +6 -4
  11. data/exe/stepmod-extract-terms +99 -28
  12. data/exe/stepmod-find-express-files +8 -7
  13. data/lib/stepmod/utils/bibdata.rb +31 -35
  14. data/lib/stepmod/utils/cleaner.rb +3 -3
  15. data/lib/stepmod/utils/concept.rb +54 -36
  16. data/lib/stepmod/utils/converters/a.rb +6 -13
  17. data/lib/stepmod/utils/converters/blockquote.rb +4 -4
  18. data/lib/stepmod/utils/converters/br.rb +1 -1
  19. data/lib/stepmod/utils/converters/bypass.rb +33 -33
  20. data/lib/stepmod/utils/converters/clause_ref.rb +3 -3
  21. data/lib/stepmod/utils/converters/code.rb +1 -1
  22. data/lib/stepmod/utils/converters/comment.rb +5 -3
  23. data/lib/stepmod/utils/converters/dd.rb +2 -2
  24. data/lib/stepmod/utils/converters/def.rb +19 -19
  25. data/lib/stepmod/utils/converters/drop.rb +2 -2
  26. data/lib/stepmod/utils/converters/dt.rb +2 -2
  27. data/lib/stepmod/utils/converters/em.rb +1 -1
  28. data/lib/stepmod/utils/converters/em_express_description.rb +1 -1
  29. data/lib/stepmod/utils/converters/eqn.rb +28 -26
  30. data/lib/stepmod/utils/converters/example.rb +5 -6
  31. data/lib/stepmod/utils/converters/express_g.rb +10 -9
  32. data/lib/stepmod/utils/converters/express_ref.rb +2 -2
  33. data/lib/stepmod/utils/converters/express_ref_express_description.rb +3 -2
  34. data/lib/stepmod/utils/converters/ext_description.rb +1 -1
  35. data/lib/stepmod/utils/converters/figure.rb +3 -3
  36. data/lib/stepmod/utils/converters/fund_cons.rb +1 -1
  37. data/lib/stepmod/utils/converters/head.rb +3 -2
  38. data/lib/stepmod/utils/converters/hr.rb +2 -2
  39. data/lib/stepmod/utils/converters/ignore.rb +3 -3
  40. data/lib/stepmod/utils/converters/introduction.rb +1 -1
  41. data/lib/stepmod/utils/converters/module_ref.rb +7 -7
  42. data/lib/stepmod/utils/converters/note.rb +5 -6
  43. data/lib/stepmod/utils/converters/ol.rb +7 -5
  44. data/lib/stepmod/utils/converters/p.rb +2 -2
  45. data/lib/stepmod/utils/converters/pass_through.rb +2 -2
  46. data/lib/stepmod/utils/converters/q.rb +1 -1
  47. data/lib/stepmod/utils/converters/schema.rb +1 -1
  48. data/lib/stepmod/utils/converters/stem.rb +1 -1
  49. data/lib/stepmod/utils/converters/stepmod_ext_description.rb +20 -6
  50. data/lib/stepmod/utils/converters/strong.rb +7 -4
  51. data/lib/stepmod/utils/converters/sub.rb +2 -2
  52. data/lib/stepmod/utils/converters/sup.rb +2 -2
  53. data/lib/stepmod/utils/converters/synonym.rb +2 -2
  54. data/lib/stepmod/utils/converters/table.rb +7 -9
  55. data/lib/stepmod/utils/converters/term.rb +27 -9
  56. data/lib/stepmod/utils/converters/text.rb +11 -13
  57. data/lib/stepmod/utils/converters/uof.rb +3 -4
  58. data/lib/stepmod/utils/html_to_asciimath.rb +91 -90
  59. data/lib/stepmod/utils/smrl_description_converter.rb +34 -33
  60. data/lib/stepmod/utils/smrl_resource_converter.rb +50 -49
  61. data/lib/stepmod/utils/stepmod_definition_converter.rb +39 -38
  62. data/lib/stepmod/utils/stepmod_file_annotator.rb +26 -19
  63. data/lib/stepmod/utils/terms_extractor.rb +138 -86
  64. data/lib/stepmod/utils/version.rb +1 -1
  65. data/stepmod-utils.gemspec +11 -6
  66. metadata +62 -20
@@ -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 '' if state[:no_notes_examples]
9
+ return "" if state[:no_notes_examples]
11
10
 
12
11
  <<~TEMPLATE
13
12
 
14
- [example]
15
- ====
16
- #{treat_children(node, state).strip}
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 == '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,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['linkend'])
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
- require 'reverse_adoc/converters/figure'
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 '' if state[:no_notes_examples]
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
-
@@ -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,21 +5,21 @@ 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]
15
+ # {{individual products}}
16
16
 
17
17
  ref = node.text.strip
18
18
  if !ref.empty?
19
- " term:[#{normalized_ref(ref)}] "
19
+ " {{#{normalized_ref(ref)}}} "
20
20
  elsif
21
- ref = node['linkend'].split(':').first
22
- " *#{ref}*"
21
+ ref = node["linkend"].split(":").first
22
+ " *#{ref}* "
23
23
  end
24
24
  end
25
25
 
@@ -28,10 +28,10 @@ module Stepmod
28
28
  def normalized_ref(ref)
29
29
  return unless ref || ref.empty?
30
30
 
31
- ref.squeeze(' ').strip
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 '' if state[:no_notes_examples]
9
+ return "" if state[:no_notes_examples]
11
10
 
12
11
  <<~TEMPLATE
13
12
 
14
- [NOTE]
15
- --
16
- #{treat_children(node, state).strip}
17
- --
13
+ [NOTE]
14
+ --
15
+ #{treat_children(node, state).strip}
16
+ --
18
17
 
19
18
  TEMPLATE
20
19
  end
@@ -5,14 +5,18 @@ 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
+ children_s = treat_children(node, state.merge(
13
+ ol_count: ol_count,
14
+ tdsinglepara: true,
15
+ ))
16
+
17
+ "\n\n#{anchor}#{attrs}#{children_s}\n"
13
18
  # Why do we add this?
14
19
  # res = "\n" + res if node.parent && node.parent.name == 'note'
15
- res
16
20
  end
17
21
 
18
22
  def number_style(node)
@@ -22,8 +26,6 @@ module Stepmod
22
26
  when "a" then "loweralpha"
23
27
  when "I" then "upperroman"
24
28
  when "i" then "lowerroman"
25
- else
26
- nil
27
29
  end
28
30
  end
29
31
 
@@ -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,8 +3,8 @@ 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
9
  # We only want ENTITY entries, not their attributes
10
10
  # https://github.com/metanorma/iso-10303-2/issues/36#issuecomment-841300092
@@ -13,8 +13,21 @@ module Stepmod
13
13
  child_text = treat_children(node, state).strip
14
14
  return nil if child_text.empty?
15
15
 
16
- # Only taking the first paragraph of the definition
17
- child_text = child_text.split("\n").first
16
+ # Unless the first paragraph ends with "between" and is followed by a
17
+ # list, don't split
18
+ first_child = child_text.split("\n").first
19
+
20
+ unless (
21
+ first_child =~ /between:?\s*\Z/ ||
22
+ first_child =~ /include:?\s*\Z/ ||
23
+ first_child =~ /of:?\s*\Z/ ||
24
+ first_child =~ /[:;]\s*\Z/
25
+ ) &&
26
+ child_text =~ /\n\n\*/
27
+
28
+ # Only taking the first paragraph of the definition
29
+ child_text = first_child
30
+ end
18
31
 
19
32
  # # Only taking the first sentence
20
33
  # if child_text.contains?(".")
@@ -32,13 +45,14 @@ module Stepmod
32
45
  <<~TEMPLATE
33
46
  === #{linkend.last}
34
47
 
35
- #{domain ? "domain:[" + domain + "]" : ""}
48
+ #{domain ? "domain:[#{domain}]" : ''}
36
49
 
37
50
  #{child_text}
38
51
  TEMPLATE
39
52
  end
40
53
  end
41
- ReverseAdoc::Converters.register :ext_description, StepmodExtDescription.new
54
+ ReverseAdoc::Converters.register :ext_description,
55
+ StepmodExtDescription.new
42
56
  end
43
57
  end
44
58
  end
@@ -4,14 +4,17 @@ 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(
15
+ node,
16
+ "#{content[/^\s*/]}*#{content.strip}*#{content[/\s*$/]}"
17
+ )
15
18
  end
16
19
  end
17
20
 
@@ -30,7 +33,7 @@ module Stepmod
30
33
 
31
34
  def braces_sibling?(sibling, end_of_text = false)
32
35
  match = end_of_text ? /\($/ : /^\)/
33
- sibling && sibling.text? && sibling.text =~ match
36
+ sibling&.text? && sibling.text =~ match
34
37
  end
35
38
  end
36
39
 
@@ -38,4 +41,4 @@ module Stepmod
38
41
  ReverseAdoc::Converters.register :b, Strong.new
39
42
  end
40
43
  end
41
- end
44
+ 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,29 +1,47 @@
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
7
7
  module Converters
8
8
  class Term < ReverseAdoc::Converters::Base
9
+
10
+ # We strip all the children in the case for "stem:[d]-manifold"
11
+ # vs "stem:[d] -manifold"
12
+ def treat_children(node, state)
13
+ res = node.children.map { |child| treat(child, state) }
14
+ res.map(&:strip).reject(&:empty?).join("")
15
+ end
16
+
9
17
  def convert(node, state = {})
10
18
  first_child = node.children.find do |child|
11
- child.name == 'text' && !child.text.to_s.strip.empty?
12
- end
19
+ child.name == "text" && !child.text.to_s.strip.empty?
20
+ end
21
+
13
22
  unless first_child &&
14
- node.text.split(';').length == 2 &&
15
- defined?(Stepmod::Utils::Converters::Synonym)
16
- return "=== #{treat_children(node, state).strip}"
23
+ node.text.split(";").length == 2 &&
24
+ defined?(Stepmod::Utils::Converters::Synonym)
25
+ return "=== #{treat_acronym(treat_children(node, state).strip)}"
17
26
  end
18
27
 
19
- term_def, alt = node.text.split(';')
28
+ term_def, alt = node.text.split(";")
20
29
  alt_xml = Nokogiri::XML::Text.new(alt, Nokogiri::XML::Document.new)
21
30
  converted_alt = Stepmod::Utils::Converters::Synonym.new.convert(alt_xml)
22
- "=== #{term_def}\n\n#{converted_alt}"
31
+ "=== #{treat_acronym(term_def)}\n\n#{converted_alt}"
32
+ end
33
+
34
+ private
35
+
36
+ def treat_acronym(term_def)
37
+ return term_def.strip if term_def !~ /.+\(.+?\)$/
38
+
39
+ _, term_text, term_acronym = term_def.match(/(.+?)(\(.+\))$/).to_a
40
+ "#{term_text.strip}\nalt:[#{term_acronym.gsub(/\(|\)/, '')}]"
23
41
  end
24
42
  end
25
43
 
26
44
  ReverseAdoc::Converters.register :term, Term.new
27
45
  end
28
46
  end
29
- end
47
+ end
@@ -16,14 +16,14 @@ module Stepmod
16
16
 
17
17
  def treat_empty(node, state)
18
18
  parent = node.parent.name.to_sym
19
- if [:ol, :ul].include?(parent) # Otherwise the identation is broken
20
- ''
19
+ if %i[ol ul].include?(parent) # Otherwise the identation is broken
20
+ ""
21
21
  elsif state[:tdsinglepara]
22
- ''
23
- elsif node.text == ' ' # Regular whitespace text node
24
- ' '
22
+ ""
23
+ elsif node.text == " " # Regular whitespace text node
24
+ " "
25
25
  else
26
- ''
26
+ ""
27
27
  end
28
28
  end
29
29
 
@@ -34,9 +34,7 @@ module Stepmod
34
34
  text = remove_border_newlines(text)
35
35
 
36
36
  text = preserve_keychars_within_backticks(text)
37
- text = preserve_tags(text)
38
-
39
- text
37
+ preserve_tags(text)
40
38
  end
41
39
 
42
40
  def preserve_nbsp(text)
@@ -44,20 +42,20 @@ module Stepmod
44
42
  end
45
43
 
46
44
  def preserve_tags(text)
47
- text.gsub(/[<>]/, '>' => '\>', '<' => '\<')
45
+ text.gsub(/[<>]/, ">" => '\>', "<" => '\<')
48
46
  end
49
47
 
50
48
  def remove_border_newlines(text)
51
- text.gsub(/\A\n+/, '').gsub(/\n+\z/, '')
49
+ text.gsub(/\A\n+/, "").gsub(/\n+\z/, "")
52
50
  end
53
51
 
54
52
  def remove_inner_newlines(text)
55
- text.tr("\n\t", ' ').squeeze(' ')
53
+ text.tr("\n\t", " ").squeeze(" ")
56
54
  end
57
55
 
58
56
  def preserve_keychars_within_backticks(text)
59
57
  text.gsub(/`.*?`/) do |match|
60
- match.gsub('\_', '_').gsub('\*', '*')
58
+ match.gsub('\_', "_").gsub('\*', "*")
61
59
  end
62
60
  end
63
61
  end