metanorma-iec 1.4.2 → 2.0.0

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 (49) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/rake.yml +4 -32
  3. data/.gitignore +14 -0
  4. data/Gemfile +6 -0
  5. data/Rakefile +1 -1
  6. data/lib/isodoc/iec/base_convert.rb +25 -59
  7. data/lib/isodoc/iec/html/htmlstyle.css +38 -6
  8. data/lib/isodoc/iec/html/htmlstyle.scss +35 -6
  9. data/lib/isodoc/iec/html/isodoc.css +1 -2
  10. data/lib/isodoc/iec/html/isodoc.scss +1 -2
  11. data/lib/isodoc/iec/html/scripts.html +0 -1
  12. data/lib/isodoc/iec/html/wordstyle.css +13 -11
  13. data/lib/isodoc/iec/html/wordstyle.scss +13 -11
  14. data/lib/isodoc/iec/html_convert.rb +2 -1
  15. data/lib/isodoc/iec/iec.international-standard.xsl +724 -330
  16. data/lib/isodoc/iec/presentation_xml_convert.rb +193 -5
  17. data/lib/isodoc/iec/xref.rb +9 -8
  18. data/lib/{asciidoctor → metanorma}/iec/basicdoc.rng +0 -0
  19. data/lib/{asciidoctor → metanorma}/iec/biblio.rng +0 -0
  20. data/lib/metanorma/iec/converter.rb +143 -0
  21. data/lib/{asciidoctor → metanorma}/iec/front.rb +3 -4
  22. data/lib/{asciidoctor → metanorma}/iec/iec.rng +48 -0
  23. data/lib/{asciidoctor → metanorma}/iec/iec_intro_en.xml +0 -0
  24. data/lib/{asciidoctor → metanorma}/iec/iec_intro_fr.xml +0 -0
  25. data/lib/{asciidoctor → metanorma}/iec/isodoc.rng +90 -18
  26. data/lib/{asciidoctor → metanorma}/iec/isostandard.rng +14 -0
  27. data/lib/metanorma/iec/processor.rb +15 -8
  28. data/lib/{asciidoctor → metanorma}/iec/reqt.rng +0 -0
  29. data/lib/metanorma/iec/version.rb +1 -1
  30. data/lib/metanorma-iec.rb +1 -1
  31. data/metanorma-iec.gemspec +3 -3
  32. data/spec/isodoc/iev_spec.rb +462 -120
  33. data/spec/isodoc/postproc_spec.rb +2 -5
  34. data/spec/isodoc/ref_spec.rb +359 -353
  35. data/spec/isodoc/terms_spec.rb +183 -181
  36. data/spec/{asciidoctor → metanorma}/base_spec.rb +1 -5
  37. data/spec/{asciidoctor → metanorma}/blocks_spec.rb +1 -1
  38. data/spec/metanorma/cleanup_spec.rb +374 -0
  39. data/spec/metanorma/iev_spec.rb +248 -0
  40. data/spec/{asciidoctor → metanorma}/inline_spec.rb +1 -1
  41. data/spec/{asciidoctor → metanorma}/lists_spec.rb +1 -1
  42. data/spec/metanorma/processor_spec.rb +139 -44
  43. data/spec/{asciidoctor → metanorma}/section_spec.rb +1 -1
  44. data/spec/{asciidoctor → metanorma}/validate_spec.rb +1 -1
  45. data/spec/spec_helper.rb +12 -14
  46. metadata +26 -26
  47. data/lib/asciidoctor/iec/converter.rb +0 -105
  48. data/spec/asciidoctor/cleanup_spec.rb +0 -345
  49. data/spec/asciidoctor/iev_spec.rb +0 -243
@@ -64,8 +64,13 @@ RSpec.describe IsoDoc do
64
64
  </body>
65
65
  </html>
66
66
  OUTPUT
67
- expect(xmlpp(IsoDoc::Iec::PresentationXMLConvert.new({}).convert("test", input, true).sub(%r{<localized-strings>.*</localized-strings>}m, ""))).to be_equivalent_to xmlpp(presxml)
68
- expect(xmlpp(IsoDoc::Iec::HtmlConvert.new({}).convert("test", presxml, true))).to be_equivalent_to xmlpp(html)
67
+ expect(xmlpp(IsoDoc::Iec::PresentationXMLConvert.new({})
68
+ .convert("test", input, true)
69
+ .sub(%r{<localized-strings>.*</localized-strings>}m, "")))
70
+ .to be_equivalent_to xmlpp(presxml)
71
+ expect(xmlpp(IsoDoc::Iec::HtmlConvert.new({})
72
+ .convert("test", presxml, true)))
73
+ .to be_equivalent_to xmlpp(html)
69
74
  end
70
75
 
71
76
  it "processes bibliographies under IEV" do
@@ -206,6 +211,7 @@ RSpec.describe IsoDoc do
206
211
  <formattedref format='application/x-isodoc+xml'>
207
212
  <em>TITLE</em>
208
213
  </formattedref>
214
+ <docidentifier type='metanorma-ordinal'>[1]</docidentifier>
209
215
  <docidentifier>B</docidentifier>
210
216
  </bibitem>
211
217
  </references>
@@ -227,8 +233,13 @@ RSpec.describe IsoDoc do
227
233
  </body>
228
234
  </html>
229
235
  OUTPUT
230
- expect(xmlpp(IsoDoc::Iec::PresentationXMLConvert.new({}).convert("test", input, true).sub(%r{<localized-strings>.*</localized-strings>}m, ""))).to be_equivalent_to xmlpp(presxml)
231
- expect(xmlpp(IsoDoc::Iec::HtmlConvert.new({}).convert("test", presxml, true))).to be_equivalent_to xmlpp(html)
236
+ expect(xmlpp(IsoDoc::Iec::PresentationXMLConvert.new({})
237
+ .convert("test", input, true)
238
+ .sub(%r{<localized-strings>.*</localized-strings>}m, "")))
239
+ .to be_equivalent_to xmlpp(presxml)
240
+ expect(xmlpp(IsoDoc::Iec::HtmlConvert.new({})
241
+ .convert("test", presxml, true)))
242
+ .to be_equivalent_to xmlpp(html)
232
243
  end
233
244
 
234
245
  it "processes IEV terms" do
@@ -241,8 +252,8 @@ RSpec.describe IsoDoc do
241
252
  <sections>
242
253
  <clause id="_terms_and_definitions" obligation="normative"><title>Terms and definitions</title>
243
254
  <terms id="_general" obligation="normative"><title>General</title>
244
- <term id="paddy1"><preferred>paddy</preferred>
245
- <definition><verbaldefinition><p id="_eb29b35e-123e-4d1c-b50b-2714d41e747f">rice retaining its husk after threshing</p></verbaldefinition></definition>
255
+ <term id="paddy1"><preferred><expression><name>paddy</name></expression></preferred>
256
+ <definition><verbal-definition><p id="_eb29b35e-123e-4d1c-b50b-2714d41e747f">rice retaining its husk after threshing</p></verbal-definition></definition>
246
257
  <termexample id="_bd57bbf1-f948-4bae-b0ce-73c00431f892">
247
258
  <p id="_65c9a509-9a89-4b54-a890-274126aeb55c">Foreign seeds, husks, bran, sand, dust.</p>
248
259
  <ul>
@@ -260,11 +271,12 @@ RSpec.describe IsoDoc do
260
271
  <p id="_e73a417d-ad39-417d-a4c8-20e4e2529489">The term "cargo rice" is shown as deprecated, and Note 1 to entry is not included here</p>
261
272
  </modification>
262
273
  </termsource></term>
263
- <term id="paddy"><preferred>paddy</preferred><admitted>paddy rice</admitted>
264
- <admitted>rough rice</admitted>
265
- <deprecates>cargo rice</deprecates>
274
+ <term id="paddy"><preferred><expression><name>paddy</name></expression></preferred>
275
+ <admitted><expression><name>paddy rice</name></expression></admitted>
276
+ <admitted><expression><name>rough rice</name></expression></admitted>
277
+ <deprecates><expression><name>cargo rice</name></expression></deprecates>
266
278
  <domain>rice</domain>
267
- <definition><verbaldefinition><p id="_eb29b35e-123e-4d1c-b50b-2714d41e747f">rice retaining its husk after threshing</p></verbaldefinition></definition>
279
+ <definition><verbal-definition><p id="_eb29b35e-123e-4d1c-b50b-2714d41e747f">rice retaining its husk after threshing</p></verbal-definition></definition>
268
280
  <termexample id="_bd57bbf1-f948-4bae-b0ce-73c00431f893">
269
281
  <ul>
270
282
  <li>A</li>
@@ -287,6 +299,7 @@ RSpec.describe IsoDoc do
287
299
  INPUT
288
300
 
289
301
  presxml = <<~INPUT
302
+ <?xml version='1.0'?>
290
303
  <iso-standard xmlns="http://riboseinc.com/isoxml" type="presentation">
291
304
  <bibdata type='standard'>
292
305
  <docidentifier type='ISO'>IEC 60050-192 ED 1</docidentifier>
@@ -297,7 +310,7 @@ RSpec.describe IsoDoc do
297
310
  <terms id="_general" obligation="normative"><title>192-01 General</title>
298
311
  <term id="paddy1">
299
312
  <name>192-01-01</name>
300
- <preferred>paddy</preferred>
313
+ <preferred><strong>paddy</strong></preferred>
301
314
  <definition><p id="_eb29b35e-123e-4d1c-b50b-2714d41e747f">rice retaining its husk after threshing</p></definition>
302
315
  <termexample id="_bd57bbf1-f948-4bae-b0ce-73c00431f892">
303
316
  <name>EXAMPLE 1</name>
@@ -312,19 +325,16 @@ RSpec.describe IsoDoc do
312
325
  <li>A</li>
313
326
  </ul>
314
327
  </termexample>
315
- <termsource status="modified">
316
- <origin bibitemid="ISO7301" type="inline" citeas="ISO 7301:2011"><locality type="clause"><referenceFrom>3.1</referenceFrom></locality>ISO 7301:2011, 3.1</origin>
317
- <modification>
318
- <p id="_e73a417d-ad39-417d-a4c8-20e4e2529489">The term "cargo rice" is shown as deprecated, and Note 1 to entry is not included here</p>
319
- </modification>
320
- </termsource></term>
328
+ <termsource status="modified">SOURCE:
329
+ <origin bibitemid="ISO7301" type="inline" citeas="ISO 7301:2011"><locality type="clause"><referenceFrom>3.1</referenceFrom></locality>ISO 7301:2011, 3.1</origin>, modified &#x2013;
330
+ The term "cargo rice" is shown as deprecated, and Note 1 to entry is not included here</termsource>
331
+ </term>
321
332
  <term id="paddy">
322
333
  <name>192-01-02</name>
323
- <preferred>paddy</preferred><admitted>paddy rice</admitted>
334
+ <preferred><strong>paddy</strong></preferred><admitted>paddy rice</admitted>
324
335
  <admitted>rough rice</admitted>
325
336
  <deprecates>cargo rice</deprecates>
326
- <domain>rice</domain>
327
- <definition><p id="_eb29b35e-123e-4d1c-b50b-2714d41e747f">rice retaining its husk after threshing</p></definition>
337
+ <definition><p id="_eb29b35e-123e-4d1c-b50b-2714d41e747f">&#x3c;rice&#x3e; rice retaining its husk after threshing</p></definition>
328
338
  <termexample id="_bd57bbf1-f948-4bae-b0ce-73c00431f893">
329
339
  <name>EXAMPLE</name>
330
340
  <ul>
@@ -340,7 +350,7 @@ RSpec.describe IsoDoc do
340
350
  <ul><li>A</li></ul>
341
351
  <p id="_19830f33-e46c-42cc-94ca-a5ef101132d5">The starch of waxy rice consists almost entirely of amylopectin. The kernels have a tendency to stick together after cooking.</p>
342
352
  </termnote>
343
- <termsource status="identical">
353
+ <termsource status="identical">SOURCE:
344
354
  <origin bibitemid="ISO7301" type="inline" citeas="ISO 7301:2011"><locality type="clause"><referenceFrom>3.1</referenceFrom></locality>ISO 7301:2011, 3.1</origin>
345
355
  </termsource></term>
346
356
  </terms>
@@ -356,87 +366,95 @@ RSpec.describe IsoDoc do
356
366
  <div class='boilerplate_legal'/>
357
367
  </div>
358
368
  #{IEC_TITLE1}
359
- <div id='_terms_and_definitions'>
360
- <h1>1&#160; Terms and definitions</h1>
361
- <br/>
362
- <div id='_general'>
363
- <p class='zzSTDTitle2'>
364
- <b>192-01 General</b>
365
- </p>
366
- <p class='TermNum' id='paddy1'>192-01-01</p>
367
- <p class='Terms' style='text-align:left;'>paddy</p>
368
- <p id='_eb29b35e-123e-4d1c-b50b-2714d41e747f'>rice retaining its husk after threshing</p>
369
- <div id='_bd57bbf1-f948-4bae-b0ce-73c00431f892' class='example'>
370
- <p>
371
- <span class='example_label'>EXAMPLE 1</span>
372
- &#160; Foreign seeds, husks, bran, sand, dust.
373
- </p>
374
- <ul>
375
- <li>A</li>
376
- </ul>
377
- </div>
378
- <div id='_bd57bbf1-f948-4bae-b0ce-73c00431f894' class='example'>
379
- <p>
380
- <span class='example_label'>EXAMPLE 2</span>
381
- &#160;
382
- </p>
383
- <ul>
384
- <li>A</li>
385
- </ul>
386
- </div>
387
- <p>
388
- [TERMREF]
389
- <a href='#ISO7301'>ISO 7301:2011, 3.1</a>
390
- [MODIFICATION]The term "cargo rice" is shown as deprecated, and
391
- Note 1 to entry is not included here [/TERMREF]
392
- </p>
393
- <p class='TermNum' id='paddy'>192-01-02</p>
394
- <p class='Terms' style='text-align:left;'>paddy, &lt;rice&gt;</p>
395
- <p class='AltTerms' style='text-align:left;'>paddy rice, &lt;rice&gt;</p>
396
- <p class='AltTerms' style='text-align:left;'>rough rice, &lt;rice&gt;</p>
397
- <p class='DeprecatedTerms' style='text-align:left;'>DEPRECATED: cargo rice, &lt;rice&gt;</p>
398
- <p id='_eb29b35e-123e-4d1c-b50b-2714d41e747f'>rice retaining its husk after threshing</p>
399
- <div id='_bd57bbf1-f948-4bae-b0ce-73c00431f893' class='example'>
400
- <p>
401
- <span class='example_label'>EXAMPLE</span>
402
- &#160;
403
- </p>
404
- <ul>
405
- <li>A</li>
406
- </ul>
407
- </div>
408
- <div class='Note' id='_671a1994-4783-40d0-bc81-987d06ffb74e'>
409
- <p>
410
- Note 1 to entry: The starch of waxy rice consists almost entirely
411
- of amylopectin. The kernels have a tendency to stick together
412
- after cooking.
413
- </p>
414
- </div>
415
- <div class='Note' id='_671a1994-4783-40d0-bc81-987d06ffb74f'>
416
- <p>
417
- Note 2 to entry:
418
- <ul>
419
- <li>A</li>
420
- </ul>
421
- <p id='_19830f33-e46c-42cc-94ca-a5ef101132d5'>
422
- The starch of waxy rice consists almost entirely of amylopectin.
423
- The kernels have a tendency to stick together after cooking.
424
- </p>
425
- </p>
426
- </div>
427
- <p>
428
- [TERMREF]
429
- <a href='#ISO7301'>ISO 7301:2011, 3.1</a>
430
- [/TERMREF]
431
- </p>
432
- </div>
433
- </div>
434
- </div>
435
- </body>
436
- </html>
369
+ <div id='_terms_and_definitions'>
370
+ <h1>1&#160; Terms and definitions</h1>
371
+ <br/>
372
+ <div id='_general'>
373
+ <h2 class='zzSTDTitle2'>
374
+ <b>192-01 General</b>
375
+ </h2>
376
+ <p class='TermNum' id='paddy1'>192-01-01</p>
377
+ <p class='Terms' style='text-align:left;'>
378
+ <b>paddy</b>
379
+ </p>
380
+ <p id='_eb29b35e-123e-4d1c-b50b-2714d41e747f'>rice retaining its husk after threshing</p>
381
+ <div id='_bd57bbf1-f948-4bae-b0ce-73c00431f892' class='example'>
382
+ <p>
383
+ <span class='example_label'>EXAMPLE 1</span>
384
+ &#160; Foreign seeds, husks, bran, sand, dust.
385
+ </p>
386
+ <ul>
387
+ <li>A</li>
388
+ </ul>
389
+ </div>
390
+ <div id='_bd57bbf1-f948-4bae-b0ce-73c00431f894' class='example'>
391
+ <p>
392
+ <span class='example_label'>EXAMPLE 2</span>
393
+ &#160;
394
+ </p>
395
+ <ul>
396
+ <li>A</li>
397
+ </ul>
398
+ </div>
399
+ <p>
400
+ SOURCE:
401
+ <a href='#ISO7301'>ISO 7301:2011, 3.1</a>
402
+ , modified &#8211; The term "cargo rice" is shown as deprecated, and
403
+ Note 1 to entry is not included here
404
+ </p>
405
+ <p class='TermNum' id='paddy'>192-01-02</p>
406
+ <p class='Terms' style='text-align:left;'>
407
+ <b>paddy</b>
408
+ </p>
409
+ <p class='AltTerms' style='text-align:left;'>paddy rice</p>
410
+ <p class='AltTerms' style='text-align:left;'>rough rice</p>
411
+ <p class='DeprecatedTerms' style='text-align:left;'>DEPRECATED: cargo rice</p>
412
+ <p id='_eb29b35e-123e-4d1c-b50b-2714d41e747f'>&lt;rice&gt; rice retaining its husk after threshing</p>
413
+ <div id='_bd57bbf1-f948-4bae-b0ce-73c00431f893' class='example'>
414
+ <p>
415
+ <span class='example_label'>EXAMPLE</span>
416
+ &#160;
417
+ </p>
418
+ <ul>
419
+ <li>A</li>
420
+ </ul>
421
+ </div>
422
+ <div id='_671a1994-4783-40d0-bc81-987d06ffb74e' class='Note'>
423
+ <p>
424
+ Note 1 to entry: The starch of waxy rice consists almost entirely
425
+ of amylopectin. The kernels have a tendency to stick together
426
+ after cooking.
427
+ </p>
428
+ </div>
429
+ <div id='_671a1994-4783-40d0-bc81-987d06ffb74f' class='Note'>
430
+ <p>
431
+ Note 2 to entry:
432
+ <ul>
433
+ <li>A</li>
434
+ </ul>
435
+ <p id='_19830f33-e46c-42cc-94ca-a5ef101132d5'>
436
+ The starch of waxy rice consists almost entirely of amylopectin.
437
+ The kernels have a tendency to stick together after cooking.
438
+ </p>
439
+ </p>
440
+ </div>
441
+ <p>
442
+ SOURCE:
443
+ <a href='#ISO7301'>ISO 7301:2011, 3.1</a>
444
+ </p>
445
+ </div>
446
+ </div>
447
+ </div>
448
+ </body>
449
+ </html>
437
450
  OUTPUT
438
- expect(xmlpp(IsoDoc::Iec::PresentationXMLConvert.new({}).convert("test", input, true).sub(%r{<localized-strings>.*</localized-strings>}m, ""))).to be_equivalent_to xmlpp(presxml)
439
- expect(xmlpp(IsoDoc::Iec::HtmlConvert.new({}).convert("test", presxml, true))).to be_equivalent_to xmlpp(html)
451
+ expect(xmlpp(IsoDoc::Iec::PresentationXMLConvert.new({})
452
+ .convert("test", input, true)
453
+ .sub(%r{<localized-strings>.*</localized-strings>}m, "")))
454
+ .to be_equivalent_to xmlpp(presxml)
455
+ expect(xmlpp(IsoDoc::Iec::HtmlConvert.new({})
456
+ .convert("test", presxml, true)))
457
+ .to be_equivalent_to xmlpp(html)
440
458
  end
441
459
 
442
460
  it "populates Word template with terms reference labels" do
@@ -451,8 +469,8 @@ RSpec.describe IsoDoc do
451
469
  <sections>
452
470
  <clause id="_terms_and_definitions" obligation="normative" displayorder="1"><title>Terms and definitions</title>
453
471
  <terms id="_general" obligation="normative"><title>General</title>
454
- <term id="paddy1"><preferred>paddy</preferred>
455
- <definition><verbaldefinition><p id="_eb29b35e-123e-4d1c-b50b-2714d41e747f">rice retaining its husk after threshing</p></verbaldefinition></definition>
472
+ <term id="paddy1"><preferred><expression><name>paddy</name></expression></preferred>
473
+ <definition><verbal-definition><p id="_eb29b35e-123e-4d1c-b50b-2714d41e747f">rice retaining its husk after threshing</p></verbal-definition></definition>
456
474
  <termsource status="modified">
457
475
  <origin bibitemid="ISO7301" type="inline" citeas="ISO 7301:2011"><locality type="clause"><referenceFrom>3.1</referenceFrom></locality>ISO 7301:2011, 3.1</origin>
458
476
  <modification>
@@ -477,23 +495,16 @@ RSpec.describe IsoDoc do
477
495
  <title>192-01 General</title>
478
496
  <term id='paddy1'>
479
497
  <name>192-01-01</name>
480
- <preferred>paddy</preferred>
498
+ <preferred><strong>paddy</strong></preferred>
481
499
  <definition>
482
500
  <p id='_eb29b35e-123e-4d1c-b50b-2714d41e747f'>rice retaining its husk after threshing</p>
483
501
  </definition>
484
- <termsource status='modified'>
485
- <origin bibitemid='ISO7301' type='inline' citeas='ISO 7301:2011'>
486
- <locality type='clause'>
502
+ <termsource status='modified'>SOURCE:
503
+ <origin bibitemid='ISO7301' type='inline' citeas='ISO 7301:2011'><locality type='clause'>
487
504
  <referenceFrom>3.1</referenceFrom>
488
- </locality>
489
- ISO 7301:2011, 3.1
490
- </origin>
491
- <modification>
492
- <p id='_e73a417d-ad39-417d-a4c8-20e4e2529489'>
505
+ </locality>ISO 7301:2011, 3.1</origin>, modified &#x2013;
493
506
  The term "cargo rice" is shown as deprecated, and Note 1 to
494
507
  entry is not included here
495
- </p>
496
- </modification>
497
508
  </termsource>
498
509
  </term>
499
510
  </terms>
@@ -501,9 +512,13 @@ RSpec.describe IsoDoc do
501
512
  </sections>
502
513
  </iso-standard>
503
514
  OUTPUT
504
- expect(xmlpp(IsoDoc::Iec::PresentationXMLConvert.new({}).convert("test", input, true).sub(%r{<localized-strings>.*</localized-strings>}m, ""))).to be_equivalent_to xmlpp(presxml)
515
+ expect(xmlpp(IsoDoc::Iec::PresentationXMLConvert.new({})
516
+ .convert("test", input, true)
517
+ .sub(%r{<localized-strings>.*</localized-strings>}m, "")))
518
+ .to be_equivalent_to xmlpp(presxml)
505
519
  IsoDoc::Iec::WordConvert.new({}).convert("test", presxml, false)
506
- word = File.read("test.doc").sub(/^.*<div class="WordSection3">/m, '<div class="WordSection3">')
520
+ word = File.read("test.doc")
521
+ .sub(/^.*<div class="WordSection3">/m, '<div class="WordSection3">')
507
522
  .sub(%r{<br clear="all" style="page-break-before:left;mso-break-type:section-break"/>.*$}m, "")
508
523
  expect(xmlpp(word)).to be_equivalent_to xmlpp(<<~"OUTPUT")
509
524
  <div class='WordSection3'>
@@ -523,14 +538,14 @@ RSpec.describe IsoDoc do
523
538
  </p>
524
539
  <div>
525
540
  <a name='_general' id='_general'/>
526
- <p class='zzSTDTitle2'>
541
+ <h2 class='zzSTDTitle2'>
527
542
  <b>192-01 General</b>
528
- </p>
543
+ </h2>
529
544
  <p class='TermNum'>
530
545
  <a name='paddy1' id='paddy1'/>
531
546
  192-01-01
532
547
  </p>
533
- <p class='Terms' style='text-align:left;'>paddy</p>
548
+ <p class='Terms' style='text-align:left;'><b>paddy</b></p>
534
549
  <p class='MsoNormal'>
535
550
  <a name='_eb29b35e-123e-4d1c-b50b-2714d41e747f' id='_eb29b35e-123e-4d1c-b50b-2714d41e747f'/>
536
551
  rice retaining its husk after threshing
@@ -538,7 +553,7 @@ RSpec.describe IsoDoc do
538
553
  <p class='MsoNormal'>
539
554
  SOURCE:
540
555
  <a href='#ISO7301'>ISO 7301:2011, 3.1</a>
541
- , modified &#x2014; The term "cargo rice" is shown as deprecated, and
556
+ , modified &#x2013; The term "cargo rice" is shown as deprecated, and
542
557
  Note 1 to entry is not included here
543
558
  </p>
544
559
  </div>
@@ -546,4 +561,331 @@ RSpec.describe IsoDoc do
546
561
  </div>
547
562
  OUTPUT
548
563
  end
564
+
565
+ it "convert termbase references to the current document to xrefs" do
566
+ input = <<~INPUT
567
+ <iso-standard xmlns="http://riboseinc.com/isoxml">
568
+ <bibdata type='standard'>
569
+ <docidentifier type='ISO'>IEC 60050-192 ED 1</docidentifier>
570
+ <docnumber>60050</docnumber>
571
+ <ext>
572
+ <doctype>international-standard</doctype>
573
+ <horizontal>false</horizontal>
574
+ <structuredidentifier>
575
+ <project-number part="192">IEC 60050</project-number>
576
+ </structuredidentifier>
577
+ <stagename>International standard</stagename>
578
+ </ext>
579
+ </bibdata>
580
+ <sections>
581
+ <clause id="_terms_and_definitions" obligation="normative" displayorder="1"><title>Terms and definitions</title>
582
+ <terms id="_general" obligation="normative"><title>General</title>
583
+ <term id="term-durability"><preferred><expression><name>durability</name></expression><field-of-application>of an item</field-of-application></preferred>
584
+ <definition><verbaldefinition><p id="_eb29b35e-123e-4d1c-b50b-2714d41e747f">rice retaining its husk after threshing</p></verbaldefinition></definition>
585
+ <termnote id="_5f49cfad-e57e-5029-78cf-5b7e3e10a3b3">
586
+ <p id="_8c830e60-8f09-73a2-6393-2a27d9c5b1ce">Dependability includes availability (<concept><refterm>192-01-02</refterm><renderterm>192-01-02</renderterm><termref base="IEV" target="192-01-02"/></concept>, <concept><refterm>191-01-02</refterm><renderterm>191-01-02</renderterm><termref base="IEV" target="191-01-02"/></concept>)</p>
587
+ </termnote>
588
+ </term>
589
+ <term id="term-sub-item"><preferred><expression><name>sub item</name></expression></preferred><definition><verbal-definition><p id="_6952e988-8803-159d-a32e-57147fbf3d86">part of the subject being considered</p></verbal-definition></definition>
590
+ </term>
591
+ </terms>
592
+ </clause>
593
+ </sections>
594
+ </iso-standard>
595
+ INPUT
596
+ presxml = <<~PRESXML
597
+ <?xml version='1.0'?>
598
+ <iso-standard xmlns='http://riboseinc.com/isoxml' type='presentation'>
599
+ <bibdata type='standard'>
600
+ <docidentifier type='ISO'>IEC 60050-192 ED 1</docidentifier>
601
+ <docnumber>60050</docnumber>
602
+ <ext>
603
+ <doctype language=''>international-standard</doctype>
604
+ <doctype language='fr'>Norme international</doctype>
605
+ <doctype language='en'>International Standard</doctype>
606
+ <horizontal language=''>false</horizontal>
607
+ <structuredidentifier>
608
+ <project-number part='192'>IEC 60050</project-number>
609
+ </structuredidentifier>
610
+ <stagename>International standard</stagename>
611
+ </ext>
612
+ </bibdata>
613
+ <sections>
614
+ <clause id='_terms_and_definitions' obligation='normative' displayorder='1'>
615
+ <title depth='1'>1<tab/>Terms and definitions</title>
616
+ <terms id='_general' obligation='normative'>
617
+ <title>192-01 General</title>
618
+ <term id='term-durability'>
619
+ <name>192-01-01</name>
620
+ <preferred><strong>durability</strong>, &#x3c;of an item&#x3e;</preferred>
621
+ <definition>
622
+ <verbaldefinition>
623
+ <p id='_eb29b35e-123e-4d1c-b50b-2714d41e747f'>rice retaining its husk after threshing</p>
624
+ </verbaldefinition>
625
+ </definition>
626
+ <termnote id='_5f49cfad-e57e-5029-78cf-5b7e3e10a3b3'>
627
+ <name>Note 1 to entry</name>
628
+ <p id='_8c830e60-8f09-73a2-6393-2a27d9c5b1ce'>Dependability includes availability (<em>192-01-02</em>
629
+ (<xref target='term-sub-item'>192-01-02</xref>),
630
+ <em>191-01-02</em>
631
+ [term defined in
632
+ <termref base='IEV' target='191-01-02'/>])</p>
633
+ </termnote>
634
+ </term>
635
+ <term id='term-sub-item'>
636
+ <name>192-01-02</name>
637
+ <preferred><strong>sub item</strong></preferred>
638
+ <definition>
639
+ <p id='_6952e988-8803-159d-a32e-57147fbf3d86'>part of the subject being considered</p>
640
+ </definition>
641
+ </term>
642
+ </terms>
643
+ </clause>
644
+ </sections>
645
+ </iso-standard>
646
+ PRESXML
647
+ expect(xmlpp(IsoDoc::Iec::PresentationXMLConvert.new({})
648
+ .convert("test", input, true)
649
+ .sub(%r{<localized-strings>.*</localized-strings>}m, "")))
650
+ .to be_equivalent_to xmlpp(presxml)
651
+ end
652
+
653
+ it "processes multilingual IEV terms" do
654
+ input = <<~INPUT
655
+ <iso-standard xmlns="http://riboseinc.com/isoxml">
656
+ <bibdata type='standard'>
657
+ <docidentifier type='ISO'>IEC 60050-192 ED 1</docidentifier>
658
+ <docnumber>60050</docnumber>
659
+ </bibdata>
660
+ <sections>
661
+ <clause id="_terms_and_definitions" obligation="normative"><title>Terms and definitions</title>
662
+ <terms id="_general" obligation="normative"><title>General</title>
663
+ <term id="item" language="en" tag="item">
664
+ <preferred><expression language="en"><name>system</name></expression><field-of-application>in dependability</field-of-application></preferred>
665
+ <preferred><expression language="de"><name>Betrachtungseinheit</name<grammar><gender>feminine</gender></grammar></expression></preferred>
666
+ <preferred><expression language="ja"><name>アイテム</name></expression></preferred>
667
+ <preferred><expression language="de"><name>Einheit</name><grammar><gender>feminine</gender></grammar></expression></preferred>
668
+ <preferred><expression language="zh"><name>&#20135;&#21697;</name></expression><field-of-application>在可靠性方面</field-of-application></preferred>
669
+ <preferred><expression language="ar"><name>نظام،</name></expression><field-of-application>في الاعتمادیة</field-of-application></preferred>
670
+ <admitted><expression><name>paddy rice</name></expression></admitted>
671
+ <admitted><expression><name>rough rice</name></expression></admitted>
672
+ <deprecates><expression><name>cargo rice</name></expression></deprecates>
673
+ <related type='contrast'><preferred><expression><name>Fifth Designation</name></expression></preferred><xref target="paddy1"/></related>
674
+ <definition><verbal-definition><p id="_eb29b35e-123e-4d1c-b50b-2714d41e747f">set of interrelated items that collectively fulfil a requirement</p></verbal-definition></definition>
675
+ <termnote id="_671a1994-4783-40d0-bc81-987d06ffb74e">
676
+ <p id="_19830f33-e46c-42cc-94ca-a5ef101132d5">A system is considered to have a defined real or abstract boundary.</p>
677
+ </termnote>
678
+ <termnote id="_671a1994-4783-40d0-bc81-987d06ffb74d">
679
+ <p id="_19830f33-e46c-42cc-94ca-a5ef101132d5">External resources (from outside the system boundary) may be required for the system to operate.</p>
680
+ </termnote>
681
+ <termexample id="_671a1994-4783-40d0-bc81-987d06ffb740">
682
+ <p id="_19830f33-e46c-42cc-94ca-a5ef101132d0">External resources (from outside the system boundary) may be required for the system to operate.</p>
683
+ </termexample>
684
+ <termsource status="modified">
685
+ <origin bibitemid="ISO7301" type="inline" citeas="ISO 7301:2011"><locality type="clause"><referenceFrom>3.1</referenceFrom></locality>ISO 7301:2011, 3.1</origin>
686
+ <modification>modified by extension to suit the dependability context</modification>
687
+ </termsource></term>
688
+ <term id="item-fr" language="fr" tag="item">
689
+ <preferred><expression language="fr"><name>entité</name<grammar><gender>masculine</gender></grammar></expression>
690
+ <field-of-application>en sûreté de fonctionnement</field-of-application>
691
+ </preferred>
692
+ <related type='contrast'><preferred><expression><name>Designation cinquième</name></expression></preferred><xref target="paddy1"/></related>
693
+ <related type='see'><preferred><expression><name>Designation sixième</name></expression></preferred><xref target="paddy1"/></related>
694
+ <definition><verbal-definition><p id="_eb29b35e-123e-4d1c-b50b-2714d41e747d">ensemble d’entités reliées entre elles qui satisfont collectivement à une exigence</p></verbal-definition></definition>
695
+ <termnote id="_671a1994-4783-40d0-bc81-987d06ffb74c">
696
+ <p id="_19830f33-e46c-42cc-94ca-a5ef101132d5">Un système est considéré comme ayant une frontière définie, réelle ou abstraite.</p>
697
+ </termnote>
698
+ <termnote id="_671a1994-4783-40d0-bc81-987d06ffb74b">
699
+ <p id="_19830f33-e46c-42cc-94ca-a5ef101132d5">Des ressources externes (provenant d’au-delà de la frontière) peuvent être nécessaires au fonctionnement du système.</p>
700
+ </termnote>
701
+ <termexample id="_671a1994-4783-40d0-bc81-987d06ffb741">
702
+ <p id="_19830f33-e46c-42cc-94ca-a5ef101132d1">External resources (from outside the system boundary) may be required for the system to operate.</p>
703
+ </termexample>
704
+ <termsource status="modified">
705
+ <origin bibitemid="ISO7301" type="inline" citeas="ISO 7301:2011"><locality type="clause"><referenceFrom>3.1</referenceFrom></locality>ISO 7301:2011, 3.1</origin>
706
+ <modification>modifié pour adapter au contexte de la sûreté de fonctionnement</modification>
707
+ </termsource></term>
708
+ <term id="paddy1"><preferred><expression><name>paddy</name></expression></preferred>
709
+ <definition><verbal-definition><p id="_eb29b35e-123e-4d1c-b50b-2714d41e747d">rice retaining its husk after threshing</p></verbal-definition></definition>
710
+ </term>
711
+ </terms>
712
+ </clause>
713
+ </sections>
714
+ </iso-standard>
715
+ INPUT
716
+
717
+ presxml = <<~PRESXML
718
+ <iso-standard xmlns='http://riboseinc.com/isoxml' type='presentation'>
719
+ <bibdata type='standard'>
720
+ <docidentifier type='ISO'>IEC 60050-192 ED 1</docidentifier>
721
+ <docnumber>60050</docnumber>
722
+ </bibdata>
723
+ <sections>
724
+ <clause id='_terms_and_definitions' obligation='normative' displayorder='1'>
725
+ <title depth='1'>
726
+ 1
727
+ <tab/>
728
+ Terms and definitions
729
+ </title>
730
+ <terms id='_general' obligation='normative'>
731
+ <title>192-01 General</title>
732
+ <term id='item' language='en,fr'>
733
+ <name>192-01-01</name>
734
+ <preferred>
735
+ <strong>system</strong>
736
+ , &#x3c;in dependability&#x3e;
737
+ </preferred>
738
+ <admitted>paddy rice</admitted>
739
+ <admitted>rough rice</admitted>
740
+ <deprecates>cargo rice</deprecates>
741
+ <definition>
742
+ <p id='_eb29b35e-123e-4d1c-b50b-2714d41e747f'>set of interrelated items that collectively fulfil a requirement</p>
743
+ </definition>
744
+ <p>
745
+ CONTRAST:
746
+ <strong>Fifth Designation</strong>
747
+ (
748
+ <xref target='paddy1'>192-01-02</xref>
749
+ )
750
+ </p>
751
+ <termexample id='_671a1994-4783-40d0-bc81-987d06ffb740'>
752
+ <name>EXAMPLE</name>
753
+ <p id='_19830f33-e46c-42cc-94ca-a5ef101132d0'>
754
+ External resources (from outside the system boundary) may be
755
+ required for the system to operate.
756
+ </p>
757
+ </termexample>
758
+ <termnote id='_671a1994-4783-40d0-bc81-987d06ffb74e'>
759
+ <name>Note 1 to entry</name>
760
+ <p id='_19830f33-e46c-42cc-94ca-a5ef101132d5'>A system is considered to have a defined real or abstract boundary.</p>
761
+ </termnote>
762
+ <termnote id='_671a1994-4783-40d0-bc81-987d06ffb74d'>
763
+ <name>Note 2 to entry</name>
764
+ <p id='_19830f33-e46c-42cc-94ca-a5ef101132d5'>
765
+ External resources (from outside the system boundary) may be
766
+ required for the system to operate.
767
+ </p>
768
+ </termnote>
769
+ <termsource status='modified'>
770
+ SOURCE:
771
+ <origin bibitemid='ISO7301' type='inline' citeas='ISO 7301:2011'>
772
+ <locality type='clause'>
773
+ <referenceFrom>3.1</referenceFrom>
774
+ </locality>
775
+ ISO 7301:2011, 3.1
776
+ </origin>
777
+ , modified &#x2013; modified by extension to suit the dependability
778
+ context
779
+ </termsource>
780
+ <preferred>
781
+ <strong>entit&#xE9;</strong>
782
+ , &#x3c;en s&#xFB;ret&#xE9; de fonctionnement&#x3e;, m
783
+ </preferred>
784
+ <definition>
785
+ <p id='_eb29b35e-123e-4d1c-b50b-2714d41e747d'>
786
+ ensemble d&#x2019;entit&#xE9;s reli&#xE9;es entre elles qui
787
+ satisfont collectivement &#xE0; une exigence
788
+ </p>
789
+ </definition>
790
+ <p>
791
+ CONTRASTEZ:
792
+ <strong>Designation cinqui&#xE8;me</strong>
793
+ (
794
+ <xref target='paddy1'>192-01-02</xref>
795
+ )
796
+ </p>
797
+ <p>
798
+ VOIR:
799
+ <strong>Designation sixi&#xE8;me</strong>
800
+ (
801
+ <xref target='paddy1'>192-01-02</xref>
802
+ )
803
+ </p>
804
+ <termexample id='_671a1994-4783-40d0-bc81-987d06ffb741'>
805
+ <name>EXEMPLE</name>
806
+ <p id='_19830f33-e46c-42cc-94ca-a5ef101132d1'>
807
+ External resources (from outside the system boundary) may be
808
+ required for the system to operate.
809
+ </p>
810
+ </termexample>
811
+ <termnote id='_671a1994-4783-40d0-bc81-987d06ffb74c'>
812
+ <name>Note 1 &#xE0; l&#x2019;article</name>
813
+ <p id='_19830f33-e46c-42cc-94ca-a5ef101132d5'>
814
+ Un syst&#xE8;me est consid&#xE9;r&#xE9; comme ayant une
815
+ fronti&#xE8;re d&#xE9;finie, r&#xE9;elle ou abstraite.
816
+ </p>
817
+ </termnote>
818
+ <termnote id='_671a1994-4783-40d0-bc81-987d06ffb74b'>
819
+ <name>Note 2 &#xE0; l&#x2019;article</name>
820
+ <p id='_19830f33-e46c-42cc-94ca-a5ef101132d5'>
821
+ Des ressources externes (provenant d&#x2019;au-del&#xE0; de la
822
+ fronti&#xE8;re) peuvent &#xEA;tre n&#xE9;cessaires au
823
+ fonctionnement du syst&#xE8;me.
824
+ </p>
825
+ </termnote>
826
+ <termsource status='modified'>
827
+ SOURCE:
828
+ <origin bibitemid='ISO7301' type='inline' citeas='ISO 7301:2011'>
829
+ <locality type='clause'>
830
+ <referenceFrom>3.1</referenceFrom>
831
+ </locality>
832
+ ISO 7301:2011, 3.1
833
+ </origin>
834
+ , modifi&#xE9; &#x2013; modifi&#xE9; pour adapter au contexte de la
835
+ s&#xFB;ret&#xE9; de fonctionnement
836
+ </termsource>
837
+ <dl type='other-lang'>
838
+ <dt>ar</dt>
839
+ <dd language='ar' script='Arab'>
840
+ <preferred>
841
+ <strong>&#x61C;&#x646;&#x638;&#x627;&#x645;&#x60C;&#x61C;</strong>
842
+ &#x61C;, &#x3c;&#x641;&#x64A;
843
+ &#x627;&#x644;&#x627;&#x639;&#x62A;&#x645;&#x627;&#x62F;&#x6CC;&#x629;&#x3e;&#x61C;
844
+ </preferred>
845
+ </dd>
846
+ <dt>de</dt>
847
+ <dd language='de' script='Latn'>
848
+ <preferred>
849
+ <strong>Betrachtungseinheit</strong>
850
+ , f
851
+ </preferred>
852
+ <preferred>
853
+ <strong>Einheit</strong>
854
+ , f
855
+ </preferred>
856
+ </dd>
857
+ <dt>ja</dt>
858
+ <dd language='ja' script='Jpan'>
859
+ <preferred>
860
+ <strong>&#x30A2;&#x30A4;&#x30C6;&#x30E0;</strong>
861
+ </preferred>
862
+ </dd>
863
+ <dt>zh</dt>
864
+ <dd language='zh' script='Hans'>
865
+ <preferred>
866
+ <strong>&#x4EA7;&#x54C1;</strong>
867
+ &#x3001;&#x3c;&#x5728;&#x53EF;&#x9760;&#x6027;&#x65B9;&#x9762;&#x3e;
868
+ </preferred>
869
+ </dd>
870
+ </dl>
871
+ </term>
872
+ <term id='paddy1'>
873
+ <name>192-01-02</name>
874
+ <preferred>
875
+ <strong>paddy</strong>
876
+ </preferred>
877
+ <definition>
878
+ <p id='_eb29b35e-123e-4d1c-b50b-2714d41e747d'>rice retaining its husk after threshing</p>
879
+ </definition>
880
+ </term>
881
+ </terms>
882
+ </clause>
883
+ </sections>
884
+ </iso-standard>
885
+ PRESXML
886
+ expect(xmlpp(IsoDoc::Iec::PresentationXMLConvert.new({})
887
+ .convert("test", input, true)
888
+ .sub(%r{<localized-strings>.*</localized-strings>}m, "")))
889
+ .to be_equivalent_to xmlpp(presxml)
890
+ end
549
891
  end