stepmod-utils 0.6.0 → 0.6.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a5dc18c380e823b42d5e958c7c83008805c7ae44966481bd892ebe8e7119df9b
4
- data.tar.gz: 83e1abb4edb5a8c9b585fca855024fb4cabc689a3223b858dd4b4d7c6f449897
3
+ metadata.gz: 0ba239ce1178c1cff73be94862409e8d0801f45b4844a779502df8c9f33d2c5e
4
+ data.tar.gz: 22e929a35fb7eea95b829f43d06f18cc95d25ef79a8361c273a57bb311624884
5
5
  SHA512:
6
- metadata.gz: b55e1bce8655edcc98ded98f9bd1658ecedafb15c413e123f9de6d5aecfe079f9ed929417683ad54b17e0586b55354baf4a798a94fc4a0908b825b58ca973209
7
- data.tar.gz: 9dd2822119df10d4c6e1f66b5a49329e093c8c1a8b2bfcf05609f67660b3a5b5e0aff62fc86e8b116eb3c7da0721088d1aee91df2d9879b42da243897c10e4ba
6
+ metadata.gz: 5c74b4390e7d32cc70160da65bb1c401b00fc509454f8e35a7ef4148378fab5ab80dd96d7c4a9be9286dab5bbc7bd230a546c9a4a42443257880b2638bf003ed
7
+ data.tar.gz: acdd911c1c8d0213904424fc936827fd1f2e97da77915b9897ca3b417943205e6b4012f30d6ad0679262f43220aada65d6dabd479a5a1ed3a1907614b987930b
@@ -124,6 +124,8 @@ def all_express_files(stepmod_dir)
124
124
  index.xpath("modules/module").each do |item|
125
125
  files << "#{stepmod_dir}/data/modules/#{item['name']}/arm.exp"
126
126
  files << "#{stepmod_dir}/data/modules/#{item['name']}/mim.exp"
127
+ files << "#{stepmod_dir}/data/modules/#{item['name']}/arm_lf.exp"
128
+ files << "#{stepmod_dir}/data/modules/#{item['name']}/mim_lf.exp"
127
129
  end
128
130
 
129
131
  # Skip resource schemas
@@ -169,6 +169,13 @@ log "SRL output documents directory path: `#{srl_output_docs_dir}`"
169
169
  log("*" * 30)
170
170
  log("[SRL MIGRATION] Migration starts!")
171
171
 
172
+ # Excludes migration of originally detached documents
173
+ # See https://github.com/metanorma/iso-10303-srl/issues/67
174
+ STEPMOD2MN_ARGS_EXCLUDE_PARTS = %w(
175
+ 49 50 52 55 104 108 109 110 111 112
176
+ 501 502 505 507 508 509 510 511 512 513 514 519
177
+ ).join(" ")
178
+
172
179
  log("*" * 30)
173
180
  log("[SRL MIGRATION: stepmod2mn.jar] START SVG generation.")
174
181
  log("*" * 30)
@@ -180,7 +187,7 @@ log("[SRL MIGRATION: stepmod2mn.jar] COMPLETE SVG generation.")
180
187
  log("*" * 30)
181
188
  log("[SRL MIGRATION: stepmod2mn.jar] START document migration and SVG generation.")
182
189
  log("*" * 30)
183
- system "java -Xss5m -jar #{stepmod2mn_path} #{stepmod_dir} --output-documents #{srl_output_docs_dir} --output-schemas #{srl_output_schemas_dir}"
190
+ system "java -Xss5m -jar #{stepmod2mn_path} #{stepmod_dir} --output-documents #{srl_output_docs_dir} --output-schemas #{srl_output_schemas_dir} --exclude '#{STEPMOD2MN_ARGS_EXCLUDE_PARTS}'"
184
191
  log("*" * 30)
185
192
  log("[SRL MIGRATION: stepmod2mn.jar] COMPLETE document migration and SVG generation.")
186
193
 
@@ -28,6 +28,13 @@ module Stepmod
28
28
 
29
29
  super(node, state)
30
30
  end
31
+
32
+ def extract_title(node)
33
+ title = node.at("./title")
34
+ return "" if title.nil?
35
+
36
+ treat_children(title, {})
37
+ end
31
38
  end
32
39
 
33
40
  # This replaces the converter
@@ -12,7 +12,7 @@ require "pubid-iso"
12
12
  module Stepmod
13
13
  module Utils
14
14
  class StepmodFileAnnotator
15
- attr_reader :express_file, :resource_docs_cache, :stepmod_dir
15
+ attr_reader :express_file, :resource_docs_cache, :stepmod_dir, :schema_name
16
16
 
17
17
  # @param express_file [String] path to the exp file needed to annotate
18
18
  # @param resource_docs_cache [String] output of ./stepmod-build-resource-docs-cache
@@ -27,6 +27,65 @@ module Stepmod
27
27
  .schemas
28
28
  .first
29
29
  .id
30
+ @schema_name = normalize_schema_name(@schema_name)
31
+ self
32
+ end
33
+
34
+ # Needed to fix scheme casing issues, e.g. xxx_LF => xxx_lf
35
+ def normalize_schema_name(name)
36
+ case name.downcase
37
+ # module schemas have first letter capitalized, rest in lowercase
38
+ when /_arm_lf\Z/i, /_mim_lf\Z/i, /_arm\Z/i, /_mim\Z/i
39
+ name.downcase.capitalize
40
+ # resource schemas are all in lowercase
41
+ else
42
+ name.downcase
43
+ end
44
+ end
45
+
46
+ SCHEMA_VERSION_MATCH_REGEX = /^SCHEMA [0-9a-zA-Z_]+;\s*$/
47
+ def is_missing_version(schema_content)
48
+ m = schema_content.match(SCHEMA_VERSION_MATCH_REGEX)
49
+ if m.nil?
50
+ false
51
+ elsif m[0] # match
52
+ true
53
+ else
54
+ false
55
+ end
56
+ end
57
+
58
+ def build_schema_string_with_version
59
+ # Geometric_tolerance_arm => geometric-tolarance-arm
60
+ name_in_asn1 = @schema_name.downcase.gsub("_", "-")
61
+ schema_type, type_number = case @schema_name.downcase
62
+ when /_arm\Z/i
63
+ [:module, 1]
64
+ when /_mim\Z/i
65
+ [:module, 2]
66
+ when /_arm_lf\Z/i
67
+ [:module, 3]
68
+ when /_mim_lf\Z/i
69
+ [:module, @module_has_arm_lf ? 4 : 3]
70
+ else # any resource schema without version strings
71
+ puts "[annotator-WARNING] this resource schema is missing a version string: #{@schema_name}"
72
+ [:resource, 1]
73
+ end
74
+
75
+ # TODO there are schemas with only arm, arm_lf:
76
+ # schemas/modules/reference_schema_for_sysml_mapping/arm_lf.exp
77
+ # TODO there are schemas with only arm, mim, mim_lf:
78
+ # schemas/modules/limited_length_or_area_indicator_assignment/mim_lf.exp
79
+ part = @identifier.part
80
+ edition = @identifier.edition
81
+ schema_or_object = (schema_type == :module) ? "schema" : "object"
82
+
83
+ "SCHEMA #{@schema_name} '{ " \
84
+ "iso standard 10303 part(#{part}) " \
85
+ "version(#{edition}) " \
86
+ "#{schema_or_object}(1) " \
87
+ "#{name_in_asn1}(#{type_number}) " \
88
+ "}';\n"
30
89
  end
31
90
 
32
91
  def resource_docs_schemas(stepmod_dir)
@@ -48,7 +107,7 @@ module Stepmod
48
107
  end
49
108
 
50
109
  def call
51
- match = File.basename(express_file).match('^(arm|mim|bom)\.exp$')
110
+ match = File.basename(express_file).match('^(arm|mim|bom|arm_lf|mim_lf|DomainModel)\.exp$')
52
111
  descriptions_base = match ? "#{match.captures[0]}_descriptions.xml" : "descriptions.xml"
53
112
 
54
113
  descriptions_file = File.join(File.dirname(express_file),
@@ -107,8 +166,13 @@ module Stepmod
107
166
  resource_docs_file_path(stepmod_dir, bib_file_name)
108
167
  end
109
168
 
110
- output_express << if bib_file && File.exist?(bib_file)
111
- prepend_bibdata(
169
+ unless bib_file && File.exist?(bib_file)
170
+ raise StandardError.new(
171
+ "bib_file for #{schema_name} does not exist: #{bib_file}"
172
+ )
173
+ end
174
+
175
+ output_express << prepend_bibdata(
112
176
  converted_description || "",
113
177
  # bib_file will not be present for resouces
114
178
  # that are not in resource_docs cache.
@@ -117,9 +181,16 @@ module Stepmod
117
181
  @schema_name,
118
182
  match,
119
183
  )
120
- else
121
- converted_description
122
- end
184
+
185
+ if is_missing_version(output_express)
186
+ puts "[annotator-WARNING] schema (#{@schema_name}) missing version string. "\
187
+ "Adding: `#{build_schema_string_with_version}` to schema."
188
+
189
+ output_express.gsub!(
190
+ SCHEMA_VERSION_MATCH_REGEX,
191
+ build_schema_string_with_version
192
+ )
193
+ end
123
194
 
124
195
  {
125
196
  annotated_text: sanitize(output_express),
@@ -171,7 +242,11 @@ processed_images_cache)
171
242
 
172
243
  converted_description = <<~DESCRIPTION
173
244
 
174
- #{Stepmod::Utils::SmrlDescriptionConverter.convert(wrapper, no_notes_examples: true, descriptions_file: descriptions_file)}
245
+ #{Stepmod::Utils::SmrlDescriptionConverter.convert(
246
+ wrapper,
247
+ no_notes_examples: true,
248
+ descriptions_file: descriptions_file
249
+ )}
175
250
  DESCRIPTION
176
251
 
177
252
  if description["linkend"].nil?
@@ -216,12 +291,15 @@ processed_images_cache)
216
291
  bib = Nokogiri::XML(File.read(bibdata_file)).root
217
292
  bibdata = extract_bib_data(match, bib, schema_and_entity)
218
293
 
294
+ # for schema version string generation
295
+ @identifier = bibdata[:identifier]
296
+
219
297
  return description.to_s if @added_bibdata[schema_and_entity]
220
298
 
221
299
  published_in = <<~PUBLISHED_IN
222
300
 
223
301
  (*"#{schema_and_entity}.__published_in"
224
- #{bibdata[:identifier]}
302
+ #{bibdata[:identifier].to_s(with_edition: true)}
225
303
  *)
226
304
  PUBLISHED_IN
227
305
 
@@ -269,17 +347,17 @@ processed_images_cache)
269
347
  end
270
348
 
271
349
  def module?(match)
272
- match && %w[arm mim].include?(match.captures[0])
350
+ match && %w[arm mim arm_lf mim_lf].include?(match.captures[0])
273
351
  end
274
352
 
275
353
  def bom?(match)
276
- match && %w[bom].include?(match.captures[0])
354
+ match && %w[bom DomainModel].include?(match.captures[0])
277
355
  end
278
356
 
279
357
  def extract_bib_file_name(match, default_file_name = "")
280
358
  return default_file_name || "" unless match
281
359
 
282
- if %w[arm mim].include?(match.captures[0])
360
+ if %w[arm mim arm_lf mim_lf].include?(match.captures[0])
283
361
  "module.xml"
284
362
  else
285
363
  "business_object_model.xml"
@@ -287,9 +365,21 @@ processed_images_cache)
287
365
  end
288
366
 
289
367
  def extract_bib_data(match, bib, schema_and_entity)
368
+ # for schema version string generation
369
+ @identifier = identifier(bib)
370
+
290
371
  return resource_bib_data(bib, schema_and_entity) unless match
291
372
 
292
373
  if module?(match)
374
+ @module_has_arm = !bib.xpath("arm").first.nil?
375
+ @module_has_mim = !bib.xpath("mim").first.nil?
376
+ @module_has_arm_lf = !bib.xpath("arm_lf").first.nil?
377
+ @module_has_mim_lf = !bib.xpath("mim_lf").first.nil?
378
+
379
+ puts "[annotator] module has schemas: " \
380
+ "ARM(#{@module_has_arm}) MIM(#{@module_has_mim}) " \
381
+ "ARM_LF(#{@module_has_arm_lf}) MIM_LF(#{@module_has_mim_lf})"
382
+
293
383
  module_bib_data(bib, match.captures[0])
294
384
  elsif bom?(match)
295
385
  bom_bib_data(bib)
@@ -314,7 +404,7 @@ processed_images_cache)
314
404
  pubid.year = year.split("-").first if year && !year.empty?
315
405
  pubid.edition = edition if edition && !edition.empty?
316
406
 
317
- pubid.to_s(with_edition: true)
407
+ pubid
318
408
  end
319
409
 
320
410
  def resource_bib_data(bib, schema_and_entity)
@@ -322,6 +412,7 @@ processed_images_cache)
322
412
 
323
413
  {
324
414
  identifier: identifier(bib),
415
+ edition: bib.attributes["version"],
325
416
  number: schema.attributes["number"],
326
417
  supersedes_concept: schema.attributes["number.supersedes"],
327
418
  status: bib.attributes["status"],
@@ -332,6 +423,7 @@ processed_images_cache)
332
423
  def module_bib_data(bib, type)
333
424
  {
334
425
  identifier: identifier(bib),
426
+ edition: bib.attributes["version"],
335
427
  number: bib.attributes["wg.number.#{type}"],
336
428
  supersedes_concept: bib.attributes["wg.number.#{type}.supersedes"],
337
429
  status: bib.attributes["status"],
@@ -342,6 +434,7 @@ processed_images_cache)
342
434
  def bom_bib_data(bib)
343
435
  {
344
436
  identifier: identifier(bib),
437
+ edition: bib.attributes["version"],
345
438
  number: bib.attributes["wg.number.bom.exp"],
346
439
  supersedes_concept: bib.attributes["wg.number.bom.supersedes"],
347
440
  status: bib.attributes["status"],
@@ -1,5 +1,5 @@
1
1
  module Stepmod
2
2
  module Utils
3
- VERSION = "0.6.0".freeze
3
+ VERSION = "0.6.2".freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stepmod-utils
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.6.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-04-19 00:00:00.000000000 Z
11
+ date: 2024-04-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
@@ -415,7 +415,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
415
415
  - !ruby/object:Gem::Version
416
416
  version: '0'
417
417
  requirements: []
418
- rubygems_version: 3.3.26
418
+ rubygems_version: 3.3.27
419
419
  signing_key:
420
420
  specification_version: 4
421
421
  summary: Stepmod-utils is a toolkit that works on STEPmod data.