metanorma-iso 1.10.1 → 1.10.5

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 (52) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ubuntu.yml +1 -1
  3. data/Gemfile +1 -1
  4. data/lib/asciidoctor/iso/base.rb +1 -1
  5. data/lib/asciidoctor/iso/basicdoc.rng +1 -11
  6. data/lib/asciidoctor/iso/biblio.rng +0 -2
  7. data/lib/asciidoctor/iso/front.rb +17 -4
  8. data/lib/asciidoctor/iso/front_id.rb +20 -17
  9. data/lib/asciidoctor/iso/isodoc.rng +61 -19
  10. data/lib/asciidoctor/iso/isostandard-amd.rng +1 -1
  11. data/lib/asciidoctor/iso/isostandard.rng +15 -3
  12. data/lib/asciidoctor/iso/reqt.rng +1 -1
  13. data/lib/asciidoctor/iso/section.rb +1 -1
  14. data/lib/asciidoctor/iso/validate.rb +1 -1
  15. data/lib/asciidoctor/iso/validate_image.rb +1 -1
  16. data/lib/asciidoctor/iso/validate_section.rb +1 -1
  17. data/lib/isodoc/iso/base_convert.rb +14 -31
  18. data/lib/isodoc/iso/html/isodoc.css +0 -1
  19. data/lib/isodoc/iso/html/isodoc.scss +0 -1
  20. data/lib/isodoc/iso/html/style-human.css +40 -9
  21. data/lib/isodoc/iso/html/style-human.scss +36 -9
  22. data/lib/isodoc/iso/html/style-iso.css +35 -6
  23. data/lib/isodoc/iso/html/style-iso.scss +31 -6
  24. data/lib/isodoc/iso/html/wordstyle.css +10 -8
  25. data/lib/isodoc/iso/html/wordstyle.scss +10 -8
  26. data/lib/isodoc/iso/html_convert.rb +81 -22
  27. data/lib/isodoc/iso/index.rb +53 -45
  28. data/lib/isodoc/iso/iso.amendment.xsl +333 -113
  29. data/lib/isodoc/iso/iso.international-standard.xsl +333 -113
  30. data/lib/isodoc/iso/isosts_convert.rb +6 -2
  31. data/lib/isodoc/iso/metadata.rb +27 -22
  32. data/lib/isodoc/iso/presentation_xml_convert.rb +60 -25
  33. data/lib/isodoc/iso/sts_convert.rb +3 -2
  34. data/lib/isodoc/iso/word_convert.rb +0 -2
  35. data/lib/metanorma/iso/processor.rb +2 -2
  36. data/lib/metanorma/iso/version.rb +1 -1
  37. data/metanorma-iso.gemspec +3 -3
  38. data/spec/asciidoctor/base_spec.rb +397 -545
  39. data/spec/asciidoctor/blocks_spec.rb +4 -4
  40. data/spec/asciidoctor/cleanup_spec.rb +15 -12
  41. data/spec/asciidoctor/refs_spec.rb +87 -84
  42. data/spec/isodoc/amd_spec.rb +261 -250
  43. data/spec/isodoc/i18n_spec.rb +7 -7
  44. data/spec/isodoc/inline_spec.rb +242 -216
  45. data/spec/isodoc/iso_spec.rb +3 -1
  46. data/spec/isodoc/postproc_spec.rb +111 -28
  47. data/spec/isodoc/section_spec.rb +3 -3
  48. data/spec/isodoc/terms_spec.rb +34 -41
  49. data/spec/isodoc/xref_spec.rb +3 -3
  50. data/spec/metanorma/processor_spec.rb +110 -14
  51. data/spec/vcr_cassettes/docrels.yml +37 -427
  52. metadata +8 -8
@@ -2,70 +2,72 @@ require "spec_helper"
2
2
 
3
3
  RSpec.describe IsoDoc do
4
4
  it "cross-references notes in amendments" do
5
- output = IsoDoc::Iso::PresentationXMLConvert.new({}).convert("test", <<~"INPUT", true)
6
- <iso-standard xmlns="http://riboseinc.com/isoxml">
7
- <bibdata>
8
- <ext>
9
- <doctype>amendment</doctype>
10
- </ext>
11
- </bibdata>
12
- <preface>
13
- <foreword>
14
- <p>
15
- <xref target="N"/>
16
- <xref target="note1"/>
17
- <xref target="note2"/>
18
- <xref target="AN"/>
19
- <xref target="Anote1"/>
20
- <xref target="Anote2"/>
21
- </p>
22
- </foreword>
23
- </preface>
24
- <sections>
25
- <clause id="scope">
26
- <title>Scope</title>
27
- <note id="N">
28
- <p id="_f06fd0d1-a203-4f3d-a515-0bdba0f8d83f">These results are based on a study carried out on three different types of kernel.</p>
29
- </note>
30
- <p>
31
- <xref target="N"/>
32
- </p>
33
- </clause>
34
- <terms id="terms"/>
35
- <clause id="widgets">
36
- <title>Widgets</title>
37
- <clause id="widgets1">
38
- <note id="note1">
39
- <p id="_f06fd0d1-a203-4f3d-a515-0bdba0f8d83f">These results are based on a study carried out on three different types of kernel.</p>
40
- </note>
41
- <note id="note2">
42
- <p id="_f06fd0d1-a203-4f3d-a515-0bdba0f8d83a">These results are based on a study carried out on three different types of kernel.</p>
43
- </note>
5
+ output = IsoDoc::Iso::PresentationXMLConvert.new({})
6
+ .convert("test", <<~"INPUT", true)
7
+ <iso-standard xmlns="http://riboseinc.com/isoxml">
8
+ <bibdata>
9
+ <ext>
10
+ <doctype>amendment</doctype>
11
+ </ext>
12
+ </bibdata>
13
+ <preface>
14
+ <foreword>
44
15
  <p>
16
+ <xref target="N"/>
45
17
  <xref target="note1"/>
46
18
  <xref target="note2"/>
19
+ <xref target="AN"/>
20
+ <xref target="Anote1"/>
21
+ <xref target="Anote2"/>
22
+ </p>
23
+ </foreword>
24
+ </preface>
25
+ <sections>
26
+ <clause id="scope">
27
+ <title>Scope</title>
28
+ <note id="N">
29
+ <p id="_f06fd0d1-a203-4f3d-a515-0bdba0f8d83f">These results are based on a study carried out on three different types of kernel.</p>
30
+ </note>
31
+ <p>
32
+ <xref target="N"/>
47
33
  </p>
48
34
  </clause>
49
- </clause>
50
- </sections>
51
- <annex id="annex1">
52
- <clause id="annex1a">
53
- <note id="AN">
54
- <p id="_f06fd0d1-a203-4f3d-a515-0bdba0f8d83f">These results are based on a study carried out on three different types of kernel.</p>
55
- </note>
56
- </clause>
57
- <clause id="annex1b">
58
- <note id="Anote1">
59
- <p id="_f06fd0d1-a203-4f3d-a515-0bdba0f8d83f">These results are based on a study carried out on three different types of kernel.</p>
60
- </note>
61
- <note id="Anote2">
62
- <p id="_f06fd0d1-a203-4f3d-a515-0bdba0f8d83a">These results are based on a study carried out on three different types of kernel.</p>
63
- </note>
64
- </clause>
65
- </annex>
66
- </iso-standard>
67
- INPUT
68
- expect(xmlpp(output).sub(%r{<localized-strings>.*</localized-strings>}m, ""))
35
+ <terms id="terms"/>
36
+ <clause id="widgets">
37
+ <title>Widgets</title>
38
+ <clause id="widgets1">
39
+ <note id="note1">
40
+ <p id="_f06fd0d1-a203-4f3d-a515-0bdba0f8d83f">These results are based on a study carried out on three different types of kernel.</p>
41
+ </note>
42
+ <note id="note2">
43
+ <p id="_f06fd0d1-a203-4f3d-a515-0bdba0f8d83a">These results are based on a study carried out on three different types of kernel.</p>
44
+ </note>
45
+ <p>
46
+ <xref target="note1"/>
47
+ <xref target="note2"/>
48
+ </p>
49
+ </clause>
50
+ </clause>
51
+ </sections>
52
+ <annex id="annex1">
53
+ <clause id="annex1a">
54
+ <note id="AN">
55
+ <p id="_f06fd0d1-a203-4f3d-a515-0bdba0f8d83f">These results are based on a study carried out on three different types of kernel.</p>
56
+ </note>
57
+ </clause>
58
+ <clause id="annex1b">
59
+ <note id="Anote1">
60
+ <p id="_f06fd0d1-a203-4f3d-a515-0bdba0f8d83f">These results are based on a study carried out on three different types of kernel.</p>
61
+ </note>
62
+ <note id="Anote2">
63
+ <p id="_f06fd0d1-a203-4f3d-a515-0bdba0f8d83a">These results are based on a study carried out on three different types of kernel.</p>
64
+ </note>
65
+ </clause>
66
+ </annex>
67
+ </iso-standard>
68
+ INPUT
69
+ expect(xmlpp(output)
70
+ .sub(%r{<localized-strings>.*</localized-strings>}m, ""))
69
71
  .to be_equivalent_to xmlpp(<<~"OUTPUT")
70
72
  <?xml version='1.0'?>
71
73
  <iso-standard type="presentation" xmlns="http://riboseinc.com/isoxml">
@@ -156,7 +158,8 @@ RSpec.describe IsoDoc do
156
158
  end
157
159
 
158
160
  it "cross-references sections" do
159
- output = IsoDoc::Iso::PresentationXMLConvert.new({}).convert("test", <<~"INPUT", true)
161
+ output = IsoDoc::Iso::PresentationXMLConvert.new({})
162
+ .convert("test", <<~"INPUT", true)
160
163
  <iso-standard xmlns="http://riboseinc.com/isoxml">
161
164
  <bibdata>
162
165
  <ext>
@@ -233,104 +236,105 @@ RSpec.describe IsoDoc do
233
236
  </bibliography>
234
237
  </iso-standard>
235
238
  INPUT
236
- expect(xmlpp(output).sub(%r{<localized-strings>.*</localized-strings>}m, ""))
239
+ expect(xmlpp(output)
240
+ .sub(%r{<localized-strings>.*</localized-strings>}m, ""))
237
241
  .to be_equivalent_to xmlpp(<<~"OUTPUT")
238
- <iso-standard xmlns='http://riboseinc.com/isoxml' type='presentation'>
239
- <bibdata>
240
- <ext>
241
- <doctype language=''>amendment</doctype>
242
- </ext>
243
- </bibdata>
244
-
245
- <preface>
246
- <foreword obligation='informative' displayorder='1'>
247
- <title>Foreword</title>
248
- <p id='A'>
249
- This is a preamble
250
- <xref target='C'>0.1</xref>
251
- <xref target='C1'>0.2</xref>
252
- <xref target='D'>Scope</xref>
253
- <xref target='H'>[H]</xref>
254
- <xref target='I'>[I]</xref>
255
- <xref target='J'>[J]</xref>
256
- <xref target='K'>[K]</xref>
257
- <xref target='L'>[L]</xref>
258
- <xref target='M'>Clause 4</xref>
259
- <xref target='N'>Introduction</xref>
260
- <xref target='O'>Clause 4.2</xref>
261
- <xref target='P'>Annex A</xref>
262
- <xref target='Q'>A.1</xref>
263
- <xref target='Q1'>A.1.1</xref>
264
- <xref target='Q2'>Annex A, Appendix 1</xref>
265
- <xref target='R'>[R]</xref>
266
- </p>
267
- </foreword>
268
- <introduction id='B' obligation='informative' displayorder='2'>
269
- <title depth='1'>Introduction</title>
270
- <clause id='C' inline-header='false' obligation='informative'>
271
- <title depth='2'>Introduction Subsection</title>
272
- </clause>
273
- <clause id='C1' inline-header='true' obligation='informative'>Text</clause>
274
- </introduction>
275
- </preface>
276
- <sections>
277
- <clause id='D' obligation='normative' type='scope' displayorder='3'>
278
- <title depth='1'>Scope</title>
279
- <p id='E'>Text</p>
280
- </clause>
281
- <clause id='M' inline-header='false' obligation='normative' displayorder='5'>
282
- <title depth='1'>Clause 4</title>
283
- <clause id='N' inline-header='false' obligation='normative'>
284
- <title depth='2'>Introduction</title>
285
- </clause>
286
- <clause id='O' inline-header='false' obligation='normative'>
287
- <title depth='2'>Clause 4.2</title>
288
- </clause>
289
- </clause>
290
- </sections>
291
- <annex id='P' inline-header='false' obligation='normative' displayorder='6'>
292
- <title>
293
- <strong>Annex A</strong>
294
- <br/>
295
- (normative)
296
- <br/>
297
- <br/>
298
- <strong>Annex</strong>
299
- </title>
300
- <clause id='Q' inline-header='false' obligation='normative'>
301
- <title depth='2'>
302
- A.1
303
- <tab/>
304
- Annex A.1
305
- </title>
306
- <clause id='Q1' inline-header='false' obligation='normative'>
307
- <title depth='3'>
308
- A.1.1
309
- <tab/>
310
- Annex A.1a
311
- </title>
312
- </clause>
313
- </clause>
314
- <appendix id='Q2' inline-header='false' obligation='normative'>
315
- <title depth='2'>
316
- Appendix 1
317
- <tab/>
318
- An Appendix
319
- </title>
320
- </appendix>
321
- </annex>
322
- <bibliography>
323
- <references id='R' normative='true' obligation='informative' displayorder='4'>
324
- <title depth='1'>Normative References</title>
325
- </references>
326
- <clause id='S' obligation='informative' displayorder='7'>
327
- <title depth='1'>Bibliography</title>
328
- <references id='T' normative='false' obligation='informative'>
329
- <title depth='2'>Bibliography Subsection</title>
330
- </references>
331
- </clause>
332
- </bibliography>
333
- </iso-standard>
242
+ <iso-standard xmlns='http://riboseinc.com/isoxml' type='presentation'>
243
+ <bibdata>
244
+ <ext>
245
+ <doctype language=''>amendment</doctype>
246
+ </ext>
247
+ </bibdata>
248
+
249
+ <preface>
250
+ <foreword obligation='informative' displayorder='1'>
251
+ <title>Foreword</title>
252
+ <p id='A'>
253
+ This is a preamble
254
+ <xref target='C'>0.1</xref>
255
+ <xref target='C1'>0.2</xref>
256
+ <xref target='D'>Scope</xref>
257
+ <xref target='H'>[H]</xref>
258
+ <xref target='I'>[I]</xref>
259
+ <xref target='J'>[J]</xref>
260
+ <xref target='K'>[K]</xref>
261
+ <xref target='L'>[L]</xref>
262
+ <xref target='M'>Clause 4</xref>
263
+ <xref target='N'>Introduction</xref>
264
+ <xref target='O'>Clause 4.2</xref>
265
+ <xref target='P'>Annex A</xref>
266
+ <xref target='Q'>A.1</xref>
267
+ <xref target='Q1'>A.1.1</xref>
268
+ <xref target='Q2'>Annex A, Appendix 1</xref>
269
+ <xref target='R'>[R]</xref>
270
+ </p>
271
+ </foreword>
272
+ <introduction id='B' obligation='informative' displayorder='2'>
273
+ <title depth='1'>Introduction</title>
274
+ <clause id='C' inline-header='false' obligation='informative'>
275
+ <title depth='2'>Introduction Subsection</title>
276
+ </clause>
277
+ <clause id='C1' inline-header='true' obligation='informative'>Text</clause>
278
+ </introduction>
279
+ </preface>
280
+ <sections>
281
+ <clause id='D' obligation='normative' type='scope' displayorder='3'>
282
+ <title depth='1'>Scope</title>
283
+ <p id='E'>Text</p>
284
+ </clause>
285
+ <clause id='M' inline-header='false' obligation='normative' displayorder='5'>
286
+ <title depth='1'>Clause 4</title>
287
+ <clause id='N' inline-header='false' obligation='normative'>
288
+ <title depth='2'>Introduction</title>
289
+ </clause>
290
+ <clause id='O' inline-header='false' obligation='normative'>
291
+ <title depth='2'>Clause 4.2</title>
292
+ </clause>
293
+ </clause>
294
+ </sections>
295
+ <annex id='P' inline-header='false' obligation='normative' displayorder='6'>
296
+ <title>
297
+ <strong>Annex A</strong>
298
+ <br/>
299
+ (normative)
300
+ <br/>
301
+ <br/>
302
+ <strong>Annex</strong>
303
+ </title>
304
+ <clause id='Q' inline-header='false' obligation='normative'>
305
+ <title depth='2'>
306
+ A.1
307
+ <tab/>
308
+ Annex A.1
309
+ </title>
310
+ <clause id='Q1' inline-header='false' obligation='normative'>
311
+ <title depth='3'>
312
+ A.1.1
313
+ <tab/>
314
+ Annex A.1a
315
+ </title>
316
+ </clause>
317
+ </clause>
318
+ <appendix id='Q2' inline-header='false' obligation='normative'>
319
+ <title depth='2'>
320
+ Appendix 1
321
+ <tab/>
322
+ An Appendix
323
+ </title>
324
+ </appendix>
325
+ </annex>
326
+ <bibliography>
327
+ <references id='R' normative='true' obligation='informative' displayorder='4'>
328
+ <title depth='1'>Normative References</title>
329
+ </references>
330
+ <clause id='S' obligation='informative' displayorder='7'>
331
+ <title depth='1'>Bibliography</title>
332
+ <references id='T' normative='false' obligation='informative'>
333
+ <title depth='2'>Bibliography Subsection</title>
334
+ </references>
335
+ </clause>
336
+ </bibliography>
337
+ </iso-standard>
334
338
  OUTPUT
335
339
  end
336
340
 
@@ -428,96 +432,96 @@ RSpec.describe IsoDoc do
428
432
  </iso-standard>
429
433
  INPUT
430
434
  presxml = <<~OUTPUT
431
- <iso-standard xmlns="http://riboseinc.com/isoxml" type="presentation">
432
- <bibdata>
433
- <ext>
434
- <doctype language="">amendment</doctype>
435
- </ext>
436
- </bibdata>
437
- <boilerplate>
438
- <copyright-statement>
439
- <clause>
440
- <title depth="1">Copyright</title>
441
- </clause>
442
- </copyright-statement>
443
- <license-statement>
444
- <clause>
445
- <title depth="1">License</title>
446
- </clause>
447
- </license-statement>
448
- <legal-statement>
449
- <clause>
450
- <title depth="1">Legal</title>
451
- </clause>
452
- </legal-statement>
453
- <feedback-statement>
454
- <clause>
455
- <title depth="1">Feedback</title>
456
- </clause>
457
- </feedback-statement>
458
- </boilerplate>
459
- <preface>
460
- <abstract obligation="informative" displayorder="1">
461
- <title>Abstract</title>
462
- </abstract>
463
- <foreword obligation="informative" displayorder="2">
464
- <title>Foreword</title>
465
- <p id="A">This is a preamble</p>
466
- </foreword>
467
- <introduction id="B" obligation="informative" displayorder="3">
468
- <title depth="1">Introduction</title>
469
- <clause id="C" inline-header="false" obligation="informative">
470
- <title depth="2">Introduction Subsection</title>
471
- </clause>
472
- </introduction>
473
- <clause id="B1" displayorder="4">
474
- <title depth="1">Dedication</title>
475
- </clause>
476
- <clause id="B2" displayorder="5">
477
- <title depth="1">Note to reader</title>
478
- </clause>
479
- <acknowledgements obligation="informative" displayorder="6">
480
- <title>Acknowledgements</title>
481
- </acknowledgements>
482
- </preface>
483
- <sections>
484
- <clause id="M" inline-header="false" obligation="normative" displayorder="8">
485
- <title depth="1">Clause 4</title>
486
- <clause id="N" inline-header="false" obligation="normative">
487
- <title depth="2">Introduction</title>
488
- </clause>
489
- <clause id="O" inline-header="false" obligation="normative">
490
- <title depth="2">Clause 4.2</title>
491
- </clause>
492
- <clause id="O1" inline-header="true" obligation="normative"/>
493
- </clause>
494
- <clause id="D" obligation="normative" displayorder="9">
495
- <title depth="1">Scope</title>
496
- <p id="E">Text</p>
497
- </clause>
498
- </sections>
499
- <annex id="P" inline-header="false" obligation="normative" displayorder="10">
500
- <title><strong>Annex A</strong><br/>(normative)<br/><br/><strong>Annex</strong></title>
501
- <clause id="Q" inline-header="false" obligation="normative">
502
- <title depth="2">A.1<tab/>Annex A.1</title>
503
- <clause id="Q1" inline-header="false" obligation="normative">
504
- <title depth="3">A.1.1<tab/>Annex A.1a</title>
505
- </clause>
506
- </clause>
507
- </annex>
508
- <annex id="P1" inline-header="false" obligation="normative" displayorder="11"><title><strong>Annex B</strong><br/>(normative)</title></annex>
509
- <bibliography>
510
- <references id="R" normative="true" obligation="informative" displayorder="7">
511
- <title depth="1">Normative References</title>
512
- </references>
513
- <clause id="S" obligation="informative" displayorder="12">
514
- <title depth="1">Bibliography</title>
515
- <references id="T" normative="false" obligation="informative">
516
- <title depth="2">Bibliography Subsection</title>
517
- </references>
518
- </clause>
519
- </bibliography>
520
- </iso-standard>
435
+ <iso-standard xmlns="http://riboseinc.com/isoxml" type="presentation">
436
+ <bibdata>
437
+ <ext>
438
+ <doctype language="">amendment</doctype>
439
+ </ext>
440
+ </bibdata>
441
+ <boilerplate>
442
+ <copyright-statement>
443
+ <clause>
444
+ <title depth="1">Copyright</title>
445
+ </clause>
446
+ </copyright-statement>
447
+ <license-statement>
448
+ <clause>
449
+ <title depth="1">License</title>
450
+ </clause>
451
+ </license-statement>
452
+ <legal-statement>
453
+ <clause>
454
+ <title depth="1">Legal</title>
455
+ </clause>
456
+ </legal-statement>
457
+ <feedback-statement>
458
+ <clause>
459
+ <title depth="1">Feedback</title>
460
+ </clause>
461
+ </feedback-statement>
462
+ </boilerplate>
463
+ <preface>
464
+ <abstract obligation="informative" displayorder="1">
465
+ <title>Abstract</title>
466
+ </abstract>
467
+ <foreword obligation="informative" displayorder="2">
468
+ <title>Foreword</title>
469
+ <p id="A">This is a preamble</p>
470
+ </foreword>
471
+ <introduction id="B" obligation="informative" displayorder="3">
472
+ <title depth="1">Introduction</title>
473
+ <clause id="C" inline-header="false" obligation="informative">
474
+ <title depth="2">Introduction Subsection</title>
475
+ </clause>
476
+ </introduction>
477
+ <clause id="B1" displayorder="4">
478
+ <title depth="1">Dedication</title>
479
+ </clause>
480
+ <clause id="B2" displayorder="5">
481
+ <title depth="1">Note to reader</title>
482
+ </clause>
483
+ <acknowledgements obligation="informative" displayorder="6">
484
+ <title>Acknowledgements</title>
485
+ </acknowledgements>
486
+ </preface>
487
+ <sections>
488
+ <clause id="M" inline-header="false" obligation="normative" displayorder="8">
489
+ <title depth="1">Clause 4</title>
490
+ <clause id="N" inline-header="false" obligation="normative">
491
+ <title depth="2">Introduction</title>
492
+ </clause>
493
+ <clause id="O" inline-header="false" obligation="normative">
494
+ <title depth="2">Clause 4.2</title>
495
+ </clause>
496
+ <clause id="O1" inline-header="true" obligation="normative"/>
497
+ </clause>
498
+ <clause id="D" obligation="normative" displayorder="9">
499
+ <title depth="1">Scope</title>
500
+ <p id="E">Text</p>
501
+ </clause>
502
+ </sections>
503
+ <annex id="P" inline-header="false" obligation="normative" displayorder="10">
504
+ <title><strong>Annex A</strong><br/>(normative)<br/><br/><strong>Annex</strong></title>
505
+ <clause id="Q" inline-header="false" obligation="normative">
506
+ <title depth="2">A.1<tab/>Annex A.1</title>
507
+ <clause id="Q1" inline-header="false" obligation="normative">
508
+ <title depth="3">A.1.1<tab/>Annex A.1a</title>
509
+ </clause>
510
+ </clause>
511
+ </annex>
512
+ <annex id="P1" inline-header="false" obligation="normative" displayorder="11"><title><strong>Annex B</strong><br/>(normative)</title></annex>
513
+ <bibliography>
514
+ <references id="R" normative="true" obligation="informative" displayorder="7">
515
+ <title depth="1">Normative References</title>
516
+ </references>
517
+ <clause id="S" obligation="informative" displayorder="12">
518
+ <title depth="1">Bibliography</title>
519
+ <references id="T" normative="false" obligation="informative">
520
+ <title depth="2">Bibliography Subsection</title>
521
+ </references>
522
+ </clause>
523
+ </bibliography>
524
+ </iso-standard>
521
525
  OUTPUT
522
526
  html = <<~OUTPUT
523
527
  <html lang="en" xmlns:epub="http://www.idpf.org/2007/ops">
@@ -634,7 +638,8 @@ RSpec.describe IsoDoc do
634
638
  OUTPUT
635
639
  expect(xmlpp(IsoDoc::Iso::PresentationXMLConvert.new({}).convert("test", input, true))
636
640
  .sub(%r{<localized-strings>.*</localized-strings>}m, "")).to be_equivalent_to xmlpp(presxml)
637
- expect(xmlpp(IsoDoc::Iso::HtmlConvert.new({}).convert("test", presxml, true))).to be_equivalent_to xmlpp(html)
641
+ expect(xmlpp(IsoDoc::Iso::HtmlConvert.new({}).convert("test", presxml,
642
+ true))).to be_equivalent_to xmlpp(html)
638
643
  end
639
644
 
640
645
  it "processes IsoXML metadata" do
@@ -642,7 +647,7 @@ RSpec.describe IsoDoc do
642
647
  _ = c.convert_init(<<~"INPUT", "test", false)
643
648
  <iso-standard xmlns="http://riboseinc.com/isoxml">
644
649
  INPUT
645
- expect(metadata(c.info(Nokogiri::XML(<<~"INPUT"), nil))).to be_equivalent_to <<~"OUTPUT"
650
+ input = <<~INPUT
646
651
  <iso-standard xmlns="https://www.metanorma.org/ns/iso">
647
652
  <bibdata type="standard">
648
653
  <title format="text/plain" language="en" type="main">Introduction — Main Title — Title — Title Part  — Mass fraction of
@@ -733,6 +738,7 @@ RSpec.describe IsoDoc do
733
738
  <sections/>
734
739
  </iso-standard>
735
740
  INPUT
741
+ output = <<~OUTPUT
736
742
  {:accesseddate=>"XXX",
737
743
  :agency=>"ISO",
738
744
  :circulateddate=>"XXX",
@@ -792,6 +798,8 @@ RSpec.describe IsoDoc do
792
798
  :vote_starteddate=>"XXX",
793
799
  :wg=>"C 3"}
794
800
  OUTPUT
801
+ expect(metadata(c.info(Nokogiri::XML(input), nil)))
802
+ .to be_equivalent_to output
795
803
  end
796
804
 
797
805
  it "processes IsoXML metadata in French" do
@@ -803,7 +811,7 @@ RSpec.describe IsoDoc do
803
811
  </bibdata>
804
812
  </iso-standard>
805
813
  INPUT
806
- expect(metadata(c.info(Nokogiri::XML(<<~"INPUT"), nil))).to be_equivalent_to <<~"OUTPUT"
814
+ input = <<~INPUT
807
815
  <iso-standard xmlns="https://www.metanorma.org/ns/iso">
808
816
  <bibdata type="standard">
809
817
  <title format="text/plain" language="en" type="main">Introduction — Main Title — Title — Title Part  — Mass fraction of
@@ -895,6 +903,7 @@ RSpec.describe IsoDoc do
895
903
  <sections/>
896
904
  </iso-standard>
897
905
  INPUT
906
+ output = <<~OUTPUT
898
907
  {:accesseddate=>"XXX",
899
908
  :agency=>"ISO",
900
909
  :circulateddate=>"XXX",
@@ -954,6 +963,8 @@ RSpec.describe IsoDoc do
954
963
  :vote_starteddate=>"XXX",
955
964
  :wg=>"C 3"}
956
965
  OUTPUT
966
+ expect(metadata(c.info(Nokogiri::XML(input), nil)))
967
+ .to be_equivalent_to output
957
968
  end
958
969
 
959
970
  it "processes middle title" do