stepmod-utils 0.4.14 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (87) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/release.yml +4 -3
  3. data/exe/stepmod-annotate-all +5 -4
  4. data/exe/stepmod-convert-express-description +4 -6
  5. data/exe/stepmod-convert-express-resource +4 -6
  6. data/exe/stepmod-extract-concepts +5 -4
  7. data/exe/stepmod-srl-migrate +21 -22
  8. data/exe/stepmod-validate-express +13 -15
  9. data/lib/stepmod/utils/change.rb +33 -5
  10. data/lib/stepmod/utils/change_collection.rb +1 -1
  11. data/lib/stepmod/utils/changes_extractor.rb +23 -3
  12. data/lib/stepmod/utils/concept.rb +12 -10
  13. data/lib/stepmod/utils/converters/blockquote.rb +0 -2
  14. data/lib/stepmod/utils/converters/def.rb +4 -4
  15. data/lib/stepmod/utils/converters/dt.rb +1 -1
  16. data/lib/stepmod/utils/converters/em_express_description.rb +8 -7
  17. data/lib/stepmod/utils/converters/eqn.rb +8 -6
  18. data/lib/stepmod/utils/converters/express_figure.rb +1 -1
  19. data/lib/stepmod/utils/converters/express_g.rb +1 -1
  20. data/lib/stepmod/utils/converters/express_table.rb +1 -1
  21. data/lib/stepmod/utils/converters/ext_description.rb +2 -1
  22. data/lib/stepmod/utils/converters/figure.rb +5 -5
  23. data/lib/stepmod/utils/converters/module_ref.rb +3 -5
  24. data/lib/stepmod/utils/converters/module_ref_express_description.rb +3 -7
  25. data/lib/stepmod/utils/converters/ol.rb +7 -7
  26. data/lib/stepmod/utils/converters/stepmod_ext_description.rb +3 -3
  27. data/lib/stepmod/utils/converters/strong.rb +12 -11
  28. data/lib/stepmod/utils/converters/term.rb +0 -1
  29. data/lib/stepmod/utils/express_bibdata.rb +6 -2
  30. data/lib/stepmod/utils/html_to_asciimath.rb +80 -80
  31. data/lib/stepmod/utils/parsers/mapping_table_parser.rb +31 -0
  32. data/lib/stepmod/utils/parsers/models/a.rb +40 -0
  33. data/lib/stepmod/utils/parsers/models/aa.rb +53 -0
  34. data/lib/stepmod/utils/parsers/models/ae.rb +54 -0
  35. data/lib/stepmod/utils/parsers/models/aimelt.rb +21 -0
  36. data/lib/stepmod/utils/parsers/models/alt.rb +19 -0
  37. data/lib/stepmod/utils/parsers/models/alt_map.rb +46 -0
  38. data/lib/stepmod/utils/parsers/models/alt_scmap.rb +34 -0
  39. data/lib/stepmod/utils/parsers/models/b.rb +58 -0
  40. data/lib/stepmod/utils/parsers/models/bigeqn.rb +55 -0
  41. data/lib/stepmod/utils/parsers/models/bold.rb +52 -0
  42. data/lib/stepmod/utils/parsers/models/bom_ref.rb +21 -0
  43. data/lib/stepmod/utils/parsers/models/constraint.rb +19 -0
  44. data/lib/stepmod/utils/parsers/models/dd.rb +86 -0
  45. data/lib/stepmod/utils/parsers/models/description.rb +86 -0
  46. data/lib/stepmod/utils/parsers/models/dl.rb +24 -0
  47. data/lib/stepmod/utils/parsers/models/dt.rb +86 -0
  48. data/lib/stepmod/utils/parsers/models/eqn.rb +57 -0
  49. data/lib/stepmod/utils/parsers/models/example.rb +84 -0
  50. data/lib/stepmod/utils/parsers/models/express_extref.rb +21 -0
  51. data/lib/stepmod/utils/parsers/models/express_ref.rb +21 -0
  52. data/lib/stepmod/utils/parsers/models/figure.rb +30 -0
  53. data/lib/stepmod/utils/parsers/models/i.rb +52 -0
  54. data/lib/stepmod/utils/parsers/models/img.rb +25 -0
  55. data/lib/stepmod/utils/parsers/models/imgarea.rb +23 -0
  56. data/lib/stepmod/utils/parsers/models/li.rb +86 -0
  57. data/lib/stepmod/utils/parsers/models/mapping_table.rb +26 -0
  58. data/lib/stepmod/utils/parsers/models/module_ref.rb +21 -0
  59. data/lib/stepmod/utils/parsers/models/note.rb +84 -0
  60. data/lib/stepmod/utils/parsers/models/ol.rb +25 -0
  61. data/lib/stepmod/utils/parsers/models/p.rb +56 -0
  62. data/lib/stepmod/utils/parsers/models/refpath.rb +23 -0
  63. data/lib/stepmod/utils/parsers/models/refpath_extend.rb +23 -0
  64. data/lib/stepmod/utils/parsers/models/rules.rb +19 -0
  65. data/lib/stepmod/utils/parsers/models/sc.rb +36 -0
  66. data/lib/stepmod/utils/parsers/models/screen.rb +55 -0
  67. data/lib/stepmod/utils/parsers/models/source.rb +21 -0
  68. data/lib/stepmod/utils/parsers/models/sub.rb +52 -0
  69. data/lib/stepmod/utils/parsers/models/sup.rb +52 -0
  70. data/lib/stepmod/utils/parsers/models/table.rb +29 -0
  71. data/lib/stepmod/utils/parsers/models/td.rb +98 -0
  72. data/lib/stepmod/utils/parsers/models/th.rb +98 -0
  73. data/lib/stepmod/utils/parsers/models/title.rb +53 -0
  74. data/lib/stepmod/utils/parsers/models/tr.rb +26 -0
  75. data/lib/stepmod/utils/parsers/models/tt.rb +68 -0
  76. data/lib/stepmod/utils/parsers/models/ul.rb +21 -0
  77. data/lib/stepmod/utils/parsers/models.rb +0 -0
  78. data/lib/stepmod/utils/parsers/types/string_without_indent.rb +17 -0
  79. data/lib/stepmod/utils/parsers.rb +4 -0
  80. data/lib/stepmod/utils/smrl_description_converter.rb +2 -1
  81. data/lib/stepmod/utils/smrl_resource_converter.rb +2 -1
  82. data/lib/stepmod/utils/stepmod_file_annotator.rb +14 -7
  83. data/lib/stepmod/utils/term.rb +1 -1
  84. data/lib/stepmod/utils/terms_extractor.rb +33 -31
  85. data/lib/stepmod/utils/version.rb +1 -1
  86. data/stepmod-utils.gemspec +4 -3
  87. metadata +76 -13
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e899495da23543691f64da8ac653723b58d18d6c56dc3079d03de2ff4c82b76d
4
- data.tar.gz: c7c95af88056dc3afccdd7e2a627539027fafe58b984e55f89f4d4e84d5d5466
3
+ metadata.gz: 18bfb358046e62d1504ff514004e1c01213a5cd3a86c53985dabcf5ede14e56c
4
+ data.tar.gz: 37bf06f7198d4066bbabba3038ab4107dd4ac16dc65add33d0cd267b26fd2bdd
5
5
  SHA512:
6
- metadata.gz: 599a6815246bc9a9242be9bafd86e9adb0ad16d29f93295b2772eeceffe5773a6560a23a563890f7ef8d1a1a3e23e849b9f2f3d6abfc3f7a3de55d554c17491e
7
- data.tar.gz: af84267ff33afbb543de2b491b7c4bbc1ecd7c837235a75a5cee8e4136d4b8fffb89b5778a6b9448a5f787fffbe31775a6e5c800c057375189dfb031f9957e4d
6
+ metadata.gz: 767a9ba90526a414738cbc5bafe61b0e80da0f5b7ed9a714aa10442f87ca200303bd565ad718b0e5c2f5255311d174400fa00be6932f2b291c0b1ee55ed597b8
7
+ data.tar.gz: a73c95f1f931e1023f44bf308888a38cb1f1f7bc570e7fe910131e50e843b6c2d0384bb863f33fe35456ffdd39512ca85bb0e85f13cb62c7b663dc7178d78e39
@@ -7,11 +7,12 @@ on:
7
7
  inputs:
8
8
  next_version:
9
9
  description: |
10
- Next release version. Possible values: x.y.z, major, minor, patch or pre|rc|etc
10
+ Next release version. Possible values: x.y.z, major, minor, patch (or pre|rc|etc).
11
+ Also, you can pass 'skip' to skip 'git tag' and do 'gem push' for the current version
11
12
  required: true
12
13
  default: 'skip'
13
- push:
14
- tags: [ v* ]
14
+ repository_dispatch:
15
+ types: [ do-release ]
15
16
 
16
17
  jobs:
17
18
  release:
@@ -58,17 +58,20 @@ stepmod_dir = options[:stepmod_dir]
58
58
  raise StandardError.new("--stepmod-dir not set") unless stepmod_dir
59
59
 
60
60
  stepmod_path = Pathname.new(stepmod_dir)
61
- unless (stepmod_path.join("data").exist? && stepmod_path.join("data").directory?)
61
+ unless stepmod_path.join("data").exist? && stepmod_path.join("data").directory?
62
62
  raise StandardError.new("--stepmod-dir should be the root STEPmod directory and contains data/")
63
63
  end
64
+
64
65
  log "STEPmod data path: `#{stepmod_dir}`"
65
66
 
66
67
  srl_output_schemas_dir = options[:srl_output_schemas_dir]
67
68
  raise StandardError.new("--schemas directory for SRL schemas not set") unless srl_output_schemas_dir
69
+
68
70
  log "SRL schemas output path: `#{srl_output_schemas_dir}`"
69
71
 
70
72
  srl_output_docs_dir = options[:srl_output_docs_dir]
71
73
  raise StandardError.new("--documents directory for SRL documents (generated by stepmod2mn) not set") unless srl_output_docs_dir
74
+
72
75
  log "SRL documents path: `#{srl_output_docs_dir}`"
73
76
 
74
77
  unless File.exist?(srl_output_docs_dir) && File.directory?(srl_output_docs_dir)
@@ -126,7 +129,7 @@ def file_system_path(filepath, filename_cache)
126
129
  filename_cache[dir][filepath.downcase]
127
130
  end
128
131
 
129
- MAX_THREADS = 1 #[2, Concurrent.processor_count].max * 2
132
+ MAX_THREADS = 1 # [2, Concurrent.processor_count].max * 2
130
133
  MAX_QUEUE_SIZE = MAX_THREADS * 4
131
134
  # https://github.com/ruby-concurrency/concurrent-ruby/blob/master/docs-source/thread_pools.md
132
135
  # pool = Concurrent::ThreadPoolExecutor.new(
@@ -143,7 +146,6 @@ FileUtils.mkdir_p(srl_output_schemas_dir)
143
146
  srl_output_schemas_path = Pathname.new(srl_output_schemas_dir)
144
147
  srl_output_docs_path = Pathname.new(srl_output_docs_dir)
145
148
 
146
-
147
149
  files.each do |file|
148
150
  puts "#{Thread.current.object_id}: `#{file}` processing..."
149
151
 
@@ -153,7 +155,6 @@ files.each do |file|
153
155
  ).call
154
156
 
155
157
  destination_rel_path = Pathname.new(file).dirname.relative_path_from(stepmod_path.join("data"))
156
- directory_type = destination_rel_path.each_filename.to_a.first
157
158
 
158
159
  destination_path = srl_output_schemas_path.join(destination_rel_path)
159
160
  FileUtils.mkdir_p(destination_path)
@@ -17,10 +17,8 @@ input_content = ARGF.read
17
17
 
18
18
  result = Stepmod::Utils::SmrlDescriptionConverter.convert(input_content, {})
19
19
  result.split("\n").each do |line|
20
- begin
21
- $stdout.puts(line)
22
- $stdout.flush
23
- rescue Errno::EPIPE
24
- exit(74)
25
- end
20
+ $stdout.puts(line)
21
+ $stdout.flush
22
+ rescue Errno::EPIPE
23
+ exit(74)
26
24
  end
@@ -17,10 +17,8 @@ input_content = ARGF.read
17
17
 
18
18
  result = Stepmod::Utils::SmrlResourceConverter.convert(input_content, {})
19
19
  result.split("\n").each do |line|
20
- begin
21
- $stdout.puts(line)
22
- $stdout.flush
23
- rescue Errno::EPIPE
24
- exit(74)
25
- end
20
+ $stdout.puts(line)
21
+ $stdout.flush
22
+ rescue Errno::EPIPE
23
+ exit(74)
26
24
  end
@@ -77,7 +77,8 @@ else
77
77
  )
78
78
  end
79
79
 
80
- default_output_dir = File.join(File.expand_path("..", stepmod_dir), "output_yaml")
80
+ default_output_dir = File.join(File.expand_path("..", stepmod_dir),
81
+ "output_yaml")
81
82
  output_dir = options[:output_dir] || default_output_dir
82
83
  unless File.directory?(output_dir)
83
84
  FileUtils.mkdir_p(output_dir)
@@ -164,7 +165,7 @@ end
164
165
  yaml_outputs = {
165
166
  clause_4_sections: {},
166
167
  clause_5_sections: {},
167
- bibliographies: {}
168
+ bibliographies: {},
168
169
  }
169
170
 
170
171
  part_resources.each do |(_bibdata, current_part_resources)|
@@ -204,9 +205,9 @@ extract_bibliographies(resource_concepts, yaml_outputs[:bibliographies])
204
205
  {
205
206
  clause_4_sections: "resource_sections.yaml",
206
207
  clause_5_sections: "module_sections.yaml",
207
- bibliographies: "bib.yaml"
208
+ bibliographies: "bib.yaml",
208
209
  }.each_pair do |var, filename|
209
210
  path = File.join(output_dir, filename)
210
211
  File.write(path, yaml_outputs[var].values.to_yaml)
211
- log "INFO: #{var.to_s} written to #{path}."
212
+ log "INFO: #{var} written to #{path}."
212
213
  end
@@ -15,7 +15,7 @@ require "optparse"
15
15
 
16
16
  def log(message, indent = 0)
17
17
  indent_spaces = " " * (indent * 2)
18
- puts "[stepmod-utils] #{message}"
18
+ puts "[stepmod-utils] #{indent_spaces}#{message}"
19
19
  end
20
20
 
21
21
  def copy_files_to_schemas(path, stepmod_path, srl_output_schemas_dir)
@@ -34,13 +34,12 @@ def copy_files_to_schemas(path, stepmod_path, srl_output_schemas_dir)
34
34
  end
35
35
 
36
36
  def copy_files_to_document(path, stepmod_path, srl_output_docs_dir)
37
- base_path = path.dirname.relative_path_from(File.join(stepmod_path, "data"))
38
37
  file_name = path.basename
39
- module_xml_path = path.dirname.join('module.xml')
38
+ module_xml_path = path.dirname.join("module.xml")
40
39
  # puts "module_xml_path #{module_xml_path}"
41
40
  module_xml = Nokogiri::XML(IO.read(module_xml_path)).root
42
41
 
43
- part_number = module_xml.xpath('//module').first.attr('part')
42
+ part_number = module_xml.xpath("//module").first.attr("part")
44
43
  # module_name = module_xml.xpath('//module').first.attr('name')
45
44
 
46
45
  new_dir = File.join(srl_output_docs_dir, "iso-10303-#{part_number}")
@@ -99,19 +98,19 @@ OptionParser.new do |opts|
99
98
  end.parse!
100
99
 
101
100
  def download_stepmod2mn(path)
102
- if path && path.exist?
101
+ if path&.exist?
103
102
  puts "Specified `stepmod2mn.jar` found, skipping download."
104
103
  return path
105
104
  end
106
105
 
107
106
  puts "Specified `stepmod2mn.jar` not found, downloading from GitHub."
108
107
 
109
- require 'octokit'
108
+ require "octokit"
110
109
  require "down"
111
110
  require "fileutils"
112
111
 
113
112
  client = Octokit::Client.new
114
- download_url = client.latest_release('metanorma/stepmod2mn').assets.first.browser_download_url
113
+ download_url = client.latest_release("metanorma/stepmod2mn").assets.first.browser_download_url
115
114
 
116
115
  filename = Pathname.new(download_url).basename.to_s
117
116
 
@@ -147,7 +146,7 @@ end
147
146
 
148
147
  stepmod_path = Pathname.new(stepmod_dir)
149
148
  unless stepmod_path.exist? && stepmod_path.directory? &&
150
- stepmod_path.join("data").exist? && stepmod_path.join("data").directory?
149
+ stepmod_path.join("data").exist? && stepmod_path.join("data").directory?
151
150
  puts "Specified STEPmod directory not found, not a directory, or does not contain `data/`. Aborting."
152
151
  exit 1
153
152
  end
@@ -167,32 +166,32 @@ unless File.directory?(srl_output_docs_dir)
167
166
  end
168
167
  log "SRL output documents directory path: `#{srl_output_docs_dir}`"
169
168
 
170
- log("*"*30)
169
+ log("*" * 30)
171
170
  log("[SRL MIGRATION] Migration starts!")
172
171
 
173
- log("*"*30)
172
+ log("*" * 30)
174
173
  log("[SRL MIGRATION: stepmod2mn.jar] START SVG generation.")
175
- log("*"*30)
174
+ log("*" * 30)
176
175
  system "java -Xss5m -jar #{stepmod2mn_path} #{stepmod_dir} --output-documents #{srl_output_docs_dir} --output-schemas #{srl_output_schemas_dir} --svg"
177
176
 
178
- log("*"*30)
177
+ log("*" * 30)
179
178
  log("[SRL MIGRATION: stepmod2mn.jar] COMPLETE SVG generation.")
180
179
 
181
- log("*"*30)
180
+ log("*" * 30)
182
181
  log("[SRL MIGRATION: stepmod2mn.jar] START document migration and SVG generation.")
183
- log("*"*30)
182
+ log("*" * 30)
184
183
  system "java -Xss5m -jar #{stepmod2mn_path} #{stepmod_dir} --output-documents #{srl_output_docs_dir} --output-schemas #{srl_output_schemas_dir}"
185
- log("*"*30)
184
+ log("*" * 30)
186
185
  log("[SRL MIGRATION: stepmod2mn.jar] COMPLETE document migration and SVG generation.")
187
186
 
188
- log("*"*30)
187
+ log("*" * 30)
189
188
  log("[SRL MIGRATION: stepmod-utils] START Annotated EXPRESS generation.")
190
- log("*"*30)
189
+ log("*" * 30)
191
190
  system "stepmod-annotate-all --stepmod-dir #{stepmod_dir} --documents #{srl_output_docs_dir} --schemas #{srl_output_schemas_dir}"
192
- log("*"*30)
191
+ log("*" * 30)
193
192
  log("[SRL MIGRATION: stepmod-utils] COMPLETE Annotated EXPRESS generation.")
194
193
 
195
- log("*"*30)
194
+ log("*" * 30)
196
195
  log("[SRL MIGRATION: stepmod-utils] START EXPRESS change YAML extraction.")
197
196
  system "stepmod-extract-changes -p #{stepmod_dir}"
198
197
 
@@ -208,10 +207,10 @@ Dir.glob("#{stepmod_dir}/data/**/changes.yaml").each do |filepath|
208
207
  copy_files_to_document(path, stepmod_dir, srl_output_docs_dir)
209
208
  end
210
209
 
211
- log("*"*30)
210
+ log("*" * 30)
212
211
  log("[SRL MIGRATION: stepmod-utils] COMPLETE EXPRESS change YAML extraction.")
213
212
 
214
- log("*"*30)
213
+ log("*" * 30)
215
214
  log("[SRL MIGRATION] Migration complete!")
216
215
 
217
- log("*"*30)
216
+ log("*" * 30)
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require 'nokogiri'
4
- require 'expressir'
5
- require 'expressir/express/parser'
6
- require 'expressir/express/formatter'
3
+ require "nokogiri"
4
+ require "expressir"
5
+ require "expressir/express/parser"
6
+ require "expressir/express/formatter"
7
7
 
8
8
  stepmod_dir = ARGV.pop || "iso-10303-stepmod-wg12"
9
9
  stepmod_path = Pathname.new(stepmod_dir)
@@ -38,7 +38,7 @@ end
38
38
 
39
39
  def parse_express_schema(path)
40
40
  Expressir::Express::Parser.from_file(path)
41
- rescue
41
+ rescue StandardError
42
42
  puts "ERROR: Broken schema detected in #{path}!"
43
43
  nil
44
44
  end
@@ -54,7 +54,7 @@ puts REPO_INDEX_XML
54
54
  puts
55
55
  puts "NOTE: SHOULD_REWRITE mode is turned #{SHOULD_REWRITE ? 'ON' : 'OFF'}"
56
56
 
57
- all_express_files(stepmod_dir).each_with_index do |exp_file, i|
57
+ all_express_files(stepmod_dir).each_with_index do |exp_file, _i|
58
58
  # puts "i #{i}"
59
59
  # next if i > 10
60
60
 
@@ -62,7 +62,6 @@ all_express_files(stepmod_dir).each_with_index do |exp_file, i|
62
62
  exp_path = Pathname.new(exp_file)
63
63
  repo = parse_express_schema(exp_file)
64
64
 
65
-
66
65
  schemas_status[exp_path.to_s] = repo ? true : false
67
66
 
68
67
  if repo.nil?
@@ -77,28 +76,27 @@ all_express_files(stepmod_dir).each_with_index do |exp_file, i|
77
76
  formatted_schema = format_express_schema(repo)
78
77
  # experimental_path = exp_path.dirname.join(exp_path.basename('.exp').to_s+".x.exp")
79
78
 
80
- puts "rewriting : #{exp_path.to_s}"
79
+ puts "rewriting : #{exp_path}"
81
80
  exp_path.truncate(0)
82
81
  exp_path.write(formatted_schema)
83
82
  end
84
-
85
83
  end
86
84
 
87
- puts "*"*30
85
+ puts "*" * 30
88
86
 
89
- if schemas_status.values.include?(false)
87
+ if schemas_status.value?(false)
90
88
  puts "The following schemas failed validation:"
91
- schemas_status.select do |path, status|
89
+ schemas_status.select do |_path, status|
92
90
  status == false
93
- end.each_pair do |path, status|
91
+ end.each_pair do |path, _status|
94
92
  puts "SCHEMA: #{path}"
95
93
  end
96
- puts "*"*30
94
+ puts "*" * 30
97
95
 
98
96
  exit 1
99
97
  end
100
98
 
101
99
  puts "All schemas passed validation."
102
- puts "*"*30
100
+ puts "*" * 30
103
101
 
104
102
  exit 0
@@ -5,7 +5,7 @@ require "stepmod/utils/change_edition_collection"
5
5
  module Stepmod
6
6
  module Utils
7
7
  class Change
8
- attr_accessor :schema_name
8
+ attr_accessor :schema_name, :mapping_table
9
9
  attr_reader :change_editions
10
10
 
11
11
  MODULE_TYPES = {
@@ -14,12 +14,19 @@ module Stepmod
14
14
  arm_longform: "arm_lf",
15
15
  mim_longform: "mim_lf",
16
16
  mapping: "mapping",
17
- changes: "",
17
+ changes: "changes",
18
+ mapping_table: "mapping",
18
19
  }.freeze
19
20
 
21
+ TYPES_WITHOUT_EXTENSION = %w[
22
+ changes
23
+ mapping_table
24
+ ].freeze
25
+
20
26
  def initialize(stepmod_dir:, schema_name:, type:)
21
27
  @stepmod_dir = stepmod_dir
22
28
  @change_editions = Stepmod::Utils::ChangeEditionCollection.new
29
+ @mapping_table = {}
23
30
  @schema_name = schema_name
24
31
  @type = type
25
32
  end
@@ -42,10 +49,14 @@ module Stepmod
42
49
  alias_method :[], :fetch_change_edition
43
50
 
44
51
  def save_to_file
45
- change_hash = to_h
52
+ change_hash = if @type == "mapping_table"
53
+ @mapping_table
54
+ else
55
+ to_h
56
+ end
46
57
  return if change_hash.empty?
47
58
 
48
- File.write(filepath(@type), Psych.dump(change_hash))
59
+ File.write(filepath(@type), Psych.dump(stringify_keys(change_hash)))
49
60
  end
50
61
 
51
62
  def to_h
@@ -72,7 +83,7 @@ module Stepmod
72
83
  end
73
84
 
74
85
  def filename(type)
75
- return "changes.yaml" if type.to_s == "changes"
86
+ return "#{MODULE_TYPES[type.to_sym]}.yaml" if TYPES_WITHOUT_EXTENSION.include?(type.to_s)
76
87
 
77
88
  "#{MODULE_TYPES[type.to_sym] || schema_name}.changes.yaml"
78
89
  end
@@ -84,6 +95,23 @@ module Stepmod
84
95
  "modules"
85
96
  end
86
97
  end
98
+
99
+ # Hash#transform_keys is not available in Ruby 2.4
100
+ # so we have to do this ourselves :(
101
+ # symbolize hash keys
102
+ def stringify_keys(hash)
103
+ result = {}
104
+ hash.each_pair do |key, value|
105
+ result[key.to_s] = if value.is_a?(Hash)
106
+ stringify_keys(value)
107
+ elsif value.is_a?(Array)
108
+ value.map { |v| stringify_keys(v) }
109
+ else
110
+ value
111
+ end
112
+ end
113
+ result
114
+ end
87
115
  end
88
116
  end
89
117
  end
@@ -24,7 +24,7 @@ module Stepmod
24
24
  end
25
25
 
26
26
  def save_to_files
27
- @changes.values.each(&:save_to_file)
27
+ @changes.each_value(&:save_to_file)
28
28
  end
29
29
 
30
30
  def count
@@ -1,6 +1,7 @@
1
1
  require "nokogiri"
2
2
  require "stepmod/utils/change_collection"
3
3
  require "stepmod/utils/smrl_description_converter"
4
+ require_relative "parsers"
4
5
 
5
6
  module Stepmod
6
7
  module Utils
@@ -30,7 +31,11 @@ module Stepmod
30
31
  all_modules_changes_files.each do |module_change_file|
31
32
  xml_changes = Nokogiri::XML(File.read(module_change_file)).root
32
33
  schema_name = Pathname.new(module_change_file).parent.basename.to_s
33
- add_module_changes_to_collection(xml_changes, @collection, schema_name)
34
+ add_module_changes_to_collection(xml_changes, @collection,
35
+ schema_name)
36
+
37
+ add_mapping_table_changes_to_collection(xml_changes, schema_name,
38
+ @collection)
34
39
  end
35
40
 
36
41
  @collection
@@ -38,6 +43,17 @@ module Stepmod
38
43
 
39
44
  private
40
45
 
46
+ def add_mapping_table_changes_to_collection(xml_data, schema_name,
47
+ collection)
48
+ mapping_table = xml_data.at_xpath("//mapping_table")
49
+ return unless mapping_table
50
+
51
+ shale_object = Stepmod::Utils::Parsers::MappingTableParser.parse(mapping_table)
52
+
53
+ change = collection.fetch_or_initialize(schema_name, "mapping_table")
54
+ change.mapping_table = shale_object.to_hash
55
+ end
56
+
41
57
  # rubocop:disable Metrics/MethodLength
42
58
  def add_resource_changes_to_collection(xml_data, collection)
43
59
  xml_data.xpath("//changes").each do |changes_node|
@@ -135,17 +151,21 @@ module Stepmod
135
151
 
136
152
  change_node.xpath("mapping.changes").each do |changes|
137
153
  changes.xpath("mapping.change").each do |change|
138
- mappings << { "change" => change.text }
154
+ mappings << { "change" => clean_string(change.text.strip) }
139
155
  end
140
156
 
141
157
  changes.xpath("description").each do |change|
142
- mappings << { "description" => change.text }
158
+ mappings << { "description" => clean_string(change.text.strip) }
143
159
  end
144
160
  end
145
161
 
146
162
  mappings
147
163
  end
148
164
 
165
+ def clean_string(string)
166
+ string.gsub(/[\n\t]/, " ").squeeze(" ")
167
+ end
168
+
149
169
  def extract_change_edition(schema_changes, options)
150
170
  type = options[:type] || "schema"
151
171
  node_type = type.gsub("_longform", "")
@@ -17,7 +17,8 @@ module Stepmod
17
17
  # TODO: converted_definition is not supposed to be an attribute, it is
18
18
  # supposed to be a method!
19
19
  class << self
20
- def parse(definition_xml, reference_anchor:, reference_clause:, file_path:, language_code: "eng")
20
+ def parse(definition_xml, reference_anchor:, reference_clause:,
21
+ file_path:, language_code: "eng")
21
22
  converted_definition = Stepmod::Utils::StepmodDefinitionConverter.convert(
22
23
  definition_xml,
23
24
  {
@@ -64,14 +65,15 @@ module Stepmod
64
65
  end
65
66
 
66
67
  term = Stepmod::Utils::Converters::Term
67
- .new
68
- .convert(
69
- definition_xml.xpath(".//term").first
70
- )
68
+ .new
69
+ .convert(
70
+ definition_xml.xpath(".//term").first,
71
+ )
71
72
 
72
73
  # [4..-1] because we want to skip the initial `=== {title}`
73
74
  designations = [
74
- { "designation" => term[4..-1], "type" => "expression", "normative_status" => "preferred" },
75
+ { "designation" => term[4..-1], "type" => "expression",
76
+ "normative_status" => "preferred" },
75
77
  ]
76
78
 
77
79
  alts.each do |alt|
@@ -84,10 +86,10 @@ module Stepmod
84
86
  def definition_xml_definition(definition_xml, reference_anchor)
85
87
  # We reject the <p> that was considered an alternative term (length<=20)
86
88
  text_nodes = definition_xml
87
- .xpath(".//def")
88
- .first
89
- .children
90
- .reject { |n| n.name == "p" && n.text.length <= 20 }
89
+ .xpath(".//def")
90
+ .first
91
+ .children
92
+ .reject { |n| n.name == "p" && n.text.length <= 20 }
91
93
 
92
94
  wrapper = "<def>#{text_nodes.map(&:to_s).join}</def>"
93
95
 
@@ -6,12 +6,10 @@ module Stepmod
6
6
  class Blockquote < Stepmod::Utils::Converters::Base
7
7
  def convert(node, state = {})
8
8
  id = node["id"]
9
- anchor = id ? "[[#{id}]]\n" : ""
10
9
  cite = node["cite"]
11
10
  attrs = cite ? "[quote, #{cite}]\n" : ""
12
11
  content = treat_children(node, state).strip
13
12
  content = ReverseAdoc.cleaner.remove_newlines(content)
14
- # "\n\n> " << content.lines.to_a.join('> ') << "\n\n"
15
13
  "\n\n#{attrs}____\n" << content.lines.to_a.join("") << "\n____\n\n"
16
14
  end
17
15
  end
@@ -50,13 +50,13 @@ module Stepmod
50
50
  def additional_block(node)
51
51
  # Treat first `p` tag as an `alt` block, metanorma/stepmod-utils#9
52
52
  first_child_tag = node
53
- .children
54
- .find { |n| n.is_a?(Nokogiri::XML::Element) }
53
+ .children
54
+ .find { |n| n.is_a?(Nokogiri::XML::Element) }
55
55
  return unless can_transform_to_alt?(first_child_tag)
56
56
 
57
57
  result = Stepmod::Utils::Converters::Synonym
58
- .new
59
- .convert(first_child_tag)
58
+ .new
59
+ .convert(first_child_tag)
60
60
 
61
61
  first_child_tag.remove
62
62
  "#{result}\n\n"
@@ -5,7 +5,7 @@ module Stepmod
5
5
  module Converters
6
6
  class Dt < Stepmod::Utils::Converters::Base
7
7
  def convert(node, _state = {})
8
- return "\n\n{blank}::" if node.text.strip.length.zero?
8
+ return "\n\n{blank}::" if node.text.strip.empty?
9
9
 
10
10
  "\n\n#{node.text}:: "
11
11
  end
@@ -13,18 +13,19 @@ module Stepmod
13
13
  def italic_converted(node, state)
14
14
  cloned_node = node.clone
15
15
  equations = extract_equations(cloned_node)
16
- content = treat_children(cloned_node, state.merge(already_italic: true))
16
+ content = treat_children(cloned_node,
17
+ state.merge(already_italic: true))
17
18
  equation_content = equations.map do |equation|
18
19
  treat(equation, state.merge(equation: true, already_italic: true))
19
20
  end
20
21
 
21
22
  content = if state[:equation] && state[:convert_bold_and_italics]
22
- "ii(#{content.strip})"
23
- elsif content.strip.empty? || state[:already_italic] || state[:equation]
24
- content
25
- else
26
- "#{content[/^\s*/]}_#{content.strip}_#{content[/\s*$/]}"
27
- end
23
+ "ii(#{content.strip})"
24
+ elsif content.strip.empty? || state[:already_italic] || state[:equation]
25
+ content
26
+ else
27
+ "#{content[/^\s*/]}_#{content.strip}_#{content[/\s*$/]}"
28
+ end
28
29
 
29
30
  [content, equation_content].compact.join("")
30
31
  end
@@ -26,8 +26,8 @@ module Stepmod
26
26
 
27
27
  def definition_node?(node)
28
28
  first_strong_node = node
29
- .children
30
- .find do |n|
29
+ .children
30
+ .find do |n|
31
31
  return false if !n.text? && n.name != "b"
32
32
 
33
33
  n.name == "b"
@@ -39,8 +39,8 @@ module Stepmod
39
39
 
40
40
  def definition_converted(cloned_node, state)
41
41
  first_strong_node = cloned_node
42
- .children
43
- .find do |n|
42
+ .children
43
+ .find do |n|
44
44
  return false if !n.text? && n.name != "b"
45
45
 
46
46
  n.name == "b"
@@ -56,7 +56,8 @@ module Stepmod
56
56
 
57
57
  def stem_converted(cloned_node, state)
58
58
  remove_tags_not_in_context(cloned_node) unless state[:convert_bold_and_italics]
59
- internal_content = treat_children(cloned_node, state.merge(equation: true))
59
+ internal_content = treat_children(cloned_node,
60
+ state.merge(equation: true))
60
61
  content = Stepmod::Utils::HtmlToAsciimath.new.call(internal_content)
61
62
  res = <<~TEMPLATE
62
63
  #{source_type_comment(cloned_node)}
@@ -107,7 +108,8 @@ module Stepmod
107
108
  end
108
109
 
109
110
  def log_equation(node, state, equation_converted)
110
- equation_converted_with_bold_and_italics = stem_converted(node.clone, state.merge(convert_bold_and_italics: true))
111
+ equation_converted_with_bold_and_italics = stem_converted(node.clone,
112
+ state.merge(convert_bold_and_italics: true))
111
113
 
112
114
  return if equation_converted_with_bold_and_italics == equation_converted
113
115
 
@@ -1,11 +1,11 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative "./figure"
3
4
 
4
5
  module Stepmod
5
6
  module Utils
6
7
  module Converters
7
8
  class ExpressFigure < Stepmod::Utils::Converters::Figure
8
-
9
9
  # def self.pattern(state, id)
10
10
  # "figure-exp-#{id}"
11
11
  # end
@@ -19,7 +19,7 @@ module Stepmod
19
19
 
20
20
  image_document = Nokogiri::XML(File.read(file))
21
21
  svg_filename = File.basename(image_document.xpath("//img").first["src"],
22
- ".*")
22
+ ".*")
23
23
  <<~SVGMAP
24
24
 
25
25
  *)