isodoc 1.6.2 → 1.6.7

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 (58) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/rake.yml +2 -12
  3. data/.hound.yml +3 -1
  4. data/.rubocop.yml +4 -6
  5. data/Rakefile +2 -2
  6. data/isodoc.gemspec +3 -2
  7. data/lib/isodoc-yaml/i18n-en.yaml +1 -0
  8. data/lib/isodoc-yaml/i18n-fr.yaml +1 -0
  9. data/lib/isodoc-yaml/i18n-zh-Hans.yaml +1 -0
  10. data/lib/isodoc.rb +0 -2
  11. data/lib/isodoc/convert.rb +7 -1
  12. data/lib/isodoc/function/blocks.rb +5 -4
  13. data/lib/isodoc/function/cleanup.rb +52 -43
  14. data/lib/isodoc/function/inline.rb +7 -7
  15. data/lib/isodoc/function/references.rb +32 -51
  16. data/lib/isodoc/function/section.rb +28 -16
  17. data/lib/isodoc/function/table.rb +21 -22
  18. data/lib/isodoc/function/terms.rb +6 -7
  19. data/lib/isodoc/function/to_word_html.rb +6 -3
  20. data/lib/isodoc/function/utils.rb +181 -163
  21. data/lib/isodoc/gem_tasks.rb +8 -9
  22. data/lib/isodoc/headlesshtml_convert.rb +8 -7
  23. data/lib/isodoc/html_convert.rb +5 -1
  24. data/lib/isodoc/html_function/comments.rb +14 -12
  25. data/lib/isodoc/html_function/footnotes.rb +14 -7
  26. data/lib/isodoc/html_function/html.rb +30 -26
  27. data/lib/isodoc/html_function/postprocess.rb +191 -182
  28. data/lib/isodoc/html_function/sectionsplit.rb +230 -0
  29. data/lib/isodoc/metadata.rb +22 -20
  30. data/lib/isodoc/metadata_contributor.rb +31 -28
  31. data/lib/isodoc/pdf_convert.rb +11 -13
  32. data/lib/isodoc/presentation_function/bibdata.rb +61 -30
  33. data/lib/isodoc/presentation_function/inline.rb +34 -27
  34. data/lib/isodoc/presentation_function/section.rb +54 -19
  35. data/lib/isodoc/presentation_xml_convert.rb +2 -0
  36. data/lib/isodoc/sassc_importer.rb +1 -1
  37. data/lib/isodoc/version.rb +1 -1
  38. data/lib/isodoc/word_function/postprocess.rb +50 -36
  39. data/lib/isodoc/xref.rb +2 -0
  40. data/lib/isodoc/xref/xref_counter.rb +1 -2
  41. data/lib/isodoc/xref/xref_gen.rb +21 -14
  42. data/lib/isodoc/xref/xref_gen_seq.rb +60 -35
  43. data/lib/isodoc/xref/xref_sect_gen.rb +15 -15
  44. data/spec/assets/scripts_override.html +3 -0
  45. data/spec/isodoc/blocks_spec.rb +624 -997
  46. data/spec/isodoc/cleanup_spec.rb +40 -42
  47. data/spec/isodoc/i18n_spec.rb +694 -821
  48. data/spec/isodoc/inline_spec.rb +482 -328
  49. data/spec/isodoc/metadata_spec.rb +384 -379
  50. data/spec/isodoc/postproc_spec.rb +163 -55
  51. data/spec/isodoc/presentation_xml_spec.rb +355 -278
  52. data/spec/isodoc/ref_spec.rb +5 -5
  53. data/spec/isodoc/section_spec.rb +216 -199
  54. data/spec/isodoc/sectionsplit_spec.rb +190 -0
  55. data/spec/isodoc/table_spec.rb +41 -42
  56. data/spec/isodoc/terms_spec.rb +84 -84
  57. data/spec/isodoc/xref_spec.rb +974 -932
  58. metadata +22 -5
@@ -125,7 +125,7 @@ RSpec.describe IsoDoc do
125
125
  <language current="true">en</language>
126
126
  </bibdata>
127
127
  <preface>
128
- <foreword>
128
+ <foreword displayorder="1">
129
129
  <p id='_f06fd0d1-a203-4f3d-a515-0bdba0f8d83f'>
130
130
  <eref bibitemid='ISO712'>[110]</eref>
131
131
  <eref bibitemid='ISBN'>[1]</eref>
@@ -139,7 +139,7 @@ RSpec.describe IsoDoc do
139
139
  </foreword>
140
140
  </preface>
141
141
  <bibliography>
142
- <references id='_normative_references' obligation='informative' normative='true'>
142
+ <references id='_normative_references' obligation='informative' normative='true' displayorder="2">
143
143
  <title depth='1'>1.<tab/>Normative References</title>
144
144
  <p>
145
145
  The following documents are referred to in the text in such a way that
@@ -219,7 +219,7 @@ RSpec.describe IsoDoc do
219
219
  <docidentifier type='metanorma'>[5]</docidentifier>
220
220
  </bibitem>
221
221
  </references>
222
- <references id='_bibliography' obligation='informative' normative='false'>
222
+ <references id='_bibliography' obligation='informative' normative='false' displayorder="3">
223
223
  <title depth="1">Bibliography</title>
224
224
  <bibitem id='ISBN' type='ISBN'>
225
225
  <title format='text/plain'>Chemicals for analytical laboratory use</title>
@@ -278,7 +278,7 @@ RSpec.describe IsoDoc do
278
278
  </bibitem>
279
279
  <bibitem id='ref11'>
280
280
  <title>Internet Calendaring and Scheduling Core Object Specification (iCalendar)</title>
281
- <docidentifier type='IETF'>RFC 10</docidentifier>
281
+ <docidentifier type='IETF'>IETF RFC 10</docidentifier>
282
282
  </bibitem>
283
283
  <bibitem id='ref12'>
284
284
  <formattedref format='application/x-isodoc+xml'>
@@ -287,7 +287,7 @@ RSpec.describe IsoDoc do
287
287
  .
288
288
  </formattedref>
289
289
  <docidentifier type='metanorma'>[Citn]</docidentifier>
290
- <docidentifier type='IETF'>RFC 20</docidentifier>
290
+ <docidentifier type='IETF'>IETF RFC 20</docidentifier>
291
291
  </bibitem>
292
292
  </references>
293
293
  </bibliography>
@@ -129,30 +129,32 @@ RSpec.describe IsoDoc do
129
129
  end
130
130
 
131
131
  it "processes document with no content" do
132
- expect(xmlpp(IsoDoc::HtmlConvert.new({})
133
- .convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT")
134
- <iso-standard xmlns="http://riboseinc.com/isoxml">
135
- <preface/>
136
- <sections/>
137
- </iso-standard>
132
+ input = <<~INPUT
133
+ <iso-standard xmlns="http://riboseinc.com/isoxml">
134
+ <preface/>
135
+ <sections/>
136
+ </iso-standard>
138
137
  INPUT
139
- <html xmlns:epub="http://www.idpf.org/2007/ops" lang="en">
140
- <head/>
141
- <body lang="en">
142
- <div class="title-section">
143
- <p>&#160;</p>
144
- </div>
145
- <br/>
146
- <div class="prefatory-section">
147
- <p>&#160;</p>
148
- </div>
149
- <br/>
150
- <div class="main-section">
151
- <p class="zzSTDTitle1"/>
152
- </div>
153
- </body>
154
- </html>
138
+ output = <<~OUTPUT
139
+ <html xmlns:epub="http://www.idpf.org/2007/ops" lang="en">
140
+ <head/>
141
+ <body lang="en">
142
+ <div class="title-section">
143
+ <p>&#160;</p>
144
+ </div>
145
+ <br/>
146
+ <div class="prefatory-section">
147
+ <p>&#160;</p>
148
+ </div>
149
+ <br/>
150
+ <div class="main-section">
151
+ <p class="zzSTDTitle1"/>
152
+ </div>
153
+ </body>
154
+ </html>
155
155
  OUTPUT
156
+ expect(xmlpp(IsoDoc::HtmlConvert.new({})
157
+ .convert("test", input, true))).to be_equivalent_to xmlpp(output)
156
158
  end
157
159
 
158
160
  it "processes section names" do
@@ -261,50 +263,50 @@ RSpec.describe IsoDoc do
261
263
  INPUT
262
264
 
263
265
  presxml = <<~"PRESXML"
264
- <iso-standard xmlns='http://riboseinc.com/isoxml' type="presentation">
266
+ <iso-standard xmlns='http://riboseinc.com/isoxml' type='presentation'>
265
267
  <boilerplate>
266
268
  <copyright-statement>
267
269
  <clause>
268
- <title depth="1">Copyright</title>
270
+ <title depth='1'>Copyright</title>
269
271
  </clause>
270
272
  </copyright-statement>
271
273
  <license-statement>
272
274
  <clause>
273
- <title depth="1">License</title>
275
+ <title depth='1'>License</title>
274
276
  </clause>
275
277
  </license-statement>
276
278
  <legal-statement>
277
279
  <clause>
278
- <title depth="1">Legal</title>
280
+ <title depth='1'>Legal</title>
279
281
  </clause>
280
282
  </legal-statement>
281
283
  <feedback-statement>
282
284
  <clause>
283
- <title depth="1">Feedback</title>
285
+ <title depth='1'>Feedback</title>
284
286
  </clause>
285
287
  </feedback-statement>
286
288
  </boilerplate>
287
289
  <preface>
288
- <abstract obligation='informative'>
290
+ <abstract obligation='informative' displayorder='1'>
289
291
  <title>Abstract</title>
290
292
  </abstract>
291
- <foreword obligation='informative'>
293
+ <foreword obligation='informative' displayorder='2'>
292
294
  <title>Foreword</title>
293
295
  <p id='A'>This is a preamble</p>
294
296
  </foreword>
295
- <introduction id='B' obligation='informative'>
297
+ <introduction id='B' obligation='informative' displayorder='3'>
296
298
  <title>Introduction</title>
297
299
  <clause id='C' inline-header='false' obligation='informative'>
298
300
  <title depth='2'>Introduction Subsection</title>
299
301
  </clause>
300
302
  </introduction>
301
- <clause id='B1'>
303
+ <clause id='B1' displayorder='4'>
302
304
  <title depth='1'>Dedication</title>
303
305
  </clause>
304
- <clause id='B2'>
306
+ <clause id='B2' displayorder='5'>
305
307
  <title depth='1'>Note to reader</title>
306
308
  </clause>
307
- <acknowledgements obligation='informative'>
309
+ <acknowledgements obligation='informative' displayorder='6'>
308
310
  <title>Acknowledgements</title>
309
311
  </acknowledgements>
310
312
  </preface>
@@ -316,11 +318,11 @@ RSpec.describe IsoDoc do
316
318
  <admonition id='NN2' type='warning'>
317
319
  <p>Initial admonition</p>
318
320
  </admonition>
319
- <clause id='D' obligation='normative' type='scope'>
321
+ <clause id='D' obligation='normative' type='scope' displayorder='7'>
320
322
  <title depth='1'>1.<tab/>Scope</title>
321
323
  <p id='E'>Text</p>
322
324
  </clause>
323
- <clause id='H' obligation='normative'>
325
+ <clause id='H' obligation='normative' displayorder='9'>
324
326
  <title depth='1'>3.<tab/>Terms, Definitions, Symbols and Abbreviated Terms</title>
325
327
  <terms id='I' obligation='normative'>
326
328
  <title depth='2'>3.1.<tab/>Normal Terms</title>
@@ -330,21 +332,21 @@ RSpec.describe IsoDoc do
330
332
  </term>
331
333
  </terms>
332
334
  <definitions id='K'>
333
- <title depth='2'>3.2.<tab/>Definitions</title>
335
+ <title depth='2'>3.2.<tab/>Definitions</title>
334
336
  <dl>
335
337
  <dt>Symbol</dt>
336
338
  <dd>Definition</dd>
337
339
  </dl>
338
340
  </definitions>
339
341
  </clause>
340
- <definitions id='L'>
341
- <title depth='1'>4.<tab/>Symbols and abbreviated terms</title>
342
+ <definitions id='L' displayorder='10'>
343
+ <title depth='1'>4.<tab/>Symbols and abbreviated terms</title>
342
344
  <dl>
343
345
  <dt>Symbol</dt>
344
346
  <dd>Definition</dd>
345
347
  </dl>
346
348
  </definitions>
347
- <clause id='M' inline-header='false' obligation='normative'>
349
+ <clause id='M' inline-header='false' obligation='normative' displayorder='11'>
348
350
  <title depth='1'>5.<tab/>Clause 4</title>
349
351
  <clause id='N' inline-header='false' obligation='normative'>
350
352
  <title depth='2'>5.1.<tab/>Introduction</title>
@@ -357,8 +359,14 @@ RSpec.describe IsoDoc do
357
359
  </clause>
358
360
  </clause>
359
361
  </sections>
360
- <annex id='P' inline-header='false' obligation='normative'>
361
- <title> <strong>Annex A</strong><br/>(normative)<br/><br/><strong>Annex</strong>
362
+ <annex id='P' inline-header='false' obligation='normative' displayorder='12'>
363
+ <title>
364
+ <strong>Annex A</strong>
365
+ <br/>
366
+ (normative)
367
+ <br/>
368
+ <br/>
369
+ <strong>Annex</strong>
362
370
  </title>
363
371
  <clause id='Q' inline-header='false' obligation='normative'>
364
372
  <title depth='2'>A.1.<tab/>Annex A.1</title>
@@ -370,17 +378,21 @@ RSpec.describe IsoDoc do
370
378
  </references>
371
379
  </clause>
372
380
  </annex>
373
- <annex id='P1' inline-header='false' obligation='normative'>
374
- <title><strong>Annex B</strong><br/>(normative)</title>
381
+ <annex id='P1' inline-header='false' obligation='normative' displayorder='13'>
382
+ <title>
383
+ <strong>Annex B</strong>
384
+ <br/>
385
+ (normative)
386
+ </title>
375
387
  </annex>
376
388
  <bibliography>
377
- <references id='R' obligation='informative' normative='true'>
378
- <title depth='1'>2.<tab/>Normative References</title>
389
+ <references id='R' obligation='informative' normative='true' displayorder='8'>
390
+ <title depth='1'>2.<tab/>Normative References</title>
379
391
  </references>
380
- <clause id='S' obligation='informative'>
392
+ <clause id='S' obligation='informative' displayorder='14'>
381
393
  <title depth='1'>Bibliography</title>
382
394
  <references id='T' obligation='informative' normative='false'>
383
- <title depth="2">Bibliography Subsection</title>
395
+ <title depth='2'>Bibliography Subsection</title>
384
396
  </references>
385
397
  </clause>
386
398
  </bibliography>
@@ -691,96 +703,95 @@ RSpec.describe IsoDoc do
691
703
  end
692
704
 
693
705
  it "processes section names suppressing section numbering" do
694
- expect(xmlpp(IsoDoc::PresentationXMLConvert.new({ suppressheadingnumbers: true })
695
- .convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT")
696
- <iso-standard xmlns="http://riboseinc.com/isoxml">
697
- <preface>
698
- <foreword obligation="informative">
699
- <title>Foreword</title>
700
- <p id="A">This is a preamble</p>
701
- </foreword>
702
- <introduction id="B" obligation="informative"><title>Introduction</title><clause id="C" inline-header="false" obligation="informative">
703
- <title>Introduction Subsection</title>
704
- </clause>
705
- </introduction></preface><sections>
706
- <clause id="D" obligation="normative" type="scope">
707
- <title>Scope</title>
708
- <p id="E">Text</p>
709
- </clause>
706
+ input = <<~INPUT
707
+ <iso-standard xmlns="http://riboseinc.com/isoxml">
708
+ <preface>
709
+ <foreword obligation="informative">
710
+ <title>Foreword</title>
711
+ <p id="A">This is a preamble</p>
712
+ </foreword>
713
+ <introduction id="B" obligation="informative"><title>Introduction</title><clause id="C" inline-header="false" obligation="informative">
714
+ <title>Introduction Subsection</title>
715
+ </clause>
716
+ </introduction></preface><sections>
717
+ <clause id="D" obligation="normative" type="scope">
718
+ <title>Scope</title>
719
+ <p id="E">Text</p>
720
+ </clause>
710
721
 
711
- <clause id="H" obligation="normative"><title>Terms, Definitions, Symbols and Abbreviated Terms</title><terms id="I" obligation="normative">
712
- <title>Normal Terms</title>
713
- <term id="J">
714
- <preferred>Term2</preferred>
715
- </term>
716
- </terms>
717
- <definitions id="K">
718
- <dl>
719
- <dt>Symbol</dt>
720
- <dd>Definition</dd>
721
- </dl>
722
- </definitions>
723
- </clause>
724
- <definitions id="L">
725
- <dl>
726
- <dt>Symbol</dt>
727
- <dd>Definition</dd>
728
- </dl>
729
- </definitions>
730
- <clause id="M" inline-header="false" obligation="normative"><title>Clause 4</title><clause id="N" inline-header="false" obligation="normative">
731
- <title>Introduction</title>
732
- </clause>
733
- <clause id="O" inline-header="false" obligation="normative">
734
- <title>Clause 4.2</title>
735
- </clause>
736
- <clause id="O1" inline-header="false" obligation="normative">
737
- </clause>
738
- </clause>
722
+ <clause id="H" obligation="normative"><title>Terms, Definitions, Symbols and Abbreviated Terms</title><terms id="I" obligation="normative">
723
+ <title>Normal Terms</title>
724
+ <term id="J">
725
+ <preferred>Term2</preferred>
726
+ </term>
727
+ </terms>
728
+ <definitions id="K">
729
+ <dl>
730
+ <dt>Symbol</dt>
731
+ <dd>Definition</dd>
732
+ </dl>
733
+ </definitions>
734
+ </clause>
735
+ <definitions id="L">
736
+ <dl>
737
+ <dt>Symbol</dt>
738
+ <dd>Definition</dd>
739
+ </dl>
740
+ </definitions>
741
+ <clause id="M" inline-header="false" obligation="normative"><title>Clause 4</title><clause id="N" inline-header="false" obligation="normative">
742
+ <title>Introduction</title>
743
+ </clause>
744
+ <clause id="O" inline-header="false" obligation="normative">
745
+ <title>Clause 4.2</title>
746
+ </clause>
747
+ <clause id="O1" inline-header="false" obligation="normative">
748
+ </clause>
749
+ </clause>
739
750
 
740
- </sections><annex id="P" inline-header="false" obligation="normative">
741
- <title>Annex</title>
742
- <clause id="Q" inline-header="false" obligation="normative">
743
- <title>Annex A.1</title>
744
- <clause id="Q1" inline-header="false" obligation="normative">
745
- <title>Annex A.1a</title>
746
- </clause>
747
- </clause>
748
- </annex><bibliography><references id="R" obligation="informative" normative="true">
749
- <title>Normative References</title>
750
- </references><clause id="S" obligation="informative">
751
- <title>Bibliography</title>
752
- <references id="T" obligation="informative" normative="false">
753
- <title>Bibliography Subsection</title>
754
- </references>
755
- </clause>
756
- </bibliography>
757
- </iso-standard>
751
+ </sections><annex id="P" inline-header="false" obligation="normative">
752
+ <title>Annex</title>
753
+ <clause id="Q" inline-header="false" obligation="normative">
754
+ <title>Annex A.1</title>
755
+ <clause id="Q1" inline-header="false" obligation="normative">
756
+ <title>Annex A.1a</title>
757
+ </clause>
758
+ </clause>
759
+ </annex><bibliography><references id="R" obligation="informative" normative="true">
760
+ <title>Normative References</title>
761
+ </references><clause id="S" obligation="informative">
762
+ <title>Bibliography</title>
763
+ <references id="T" obligation="informative" normative="false">
764
+ <title>Bibliography Subsection</title>
765
+ </references>
766
+ </clause>
767
+ </bibliography>
768
+ </iso-standard>
758
769
  INPUT
759
- <?xml version='1.0'?>
760
- <iso-standard xmlns='http://riboseinc.com/isoxml' type="presentation">
770
+ output = <<~OUTPUT
771
+ <iso-standard xmlns='http://riboseinc.com/isoxml' type='presentation'>
761
772
  <preface>
762
- <foreword obligation='informative'>
773
+ <foreword obligation='informative' displayorder='1'>
763
774
  <title>Foreword</title>
764
775
  <p id='A'>This is a preamble</p>
765
776
  </foreword>
766
- <introduction id='B' obligation='informative'>
777
+ <introduction id='B' obligation='informative' displayorder='2'>
767
778
  <title>Introduction</title>
768
779
  <clause id='C' inline-header='false' obligation='informative'>
769
- <title depth="2">Introduction Subsection</title>
780
+ <title depth='2'>Introduction Subsection</title>
770
781
  </clause>
771
782
  </introduction>
772
783
  </preface>
773
784
  <sections>
774
- <clause id='D' obligation='normative' type="scope">
775
- <title depth="1">Scope</title>
785
+ <clause id='D' obligation='normative' type='scope' displayorder='3'>
786
+ <title depth='1'>Scope</title>
776
787
  <p id='E'>Text</p>
777
788
  </clause>
778
- <clause id='H' obligation='normative'>
779
- <title depth="1">Terms, Definitions, Symbols and Abbreviated Terms</title>
789
+ <clause id='H' obligation='normative' displayorder='5'>
790
+ <title depth='1'>Terms, Definitions, Symbols and Abbreviated Terms</title>
780
791
  <terms id='I' obligation='normative'>
781
- <title depth="2">Normal Terms</title>
792
+ <title depth='2'>Normal Terms</title>
782
793
  <term id='J'>
783
- <name>3.1.1.</name>
794
+ <name>3.1.1.</name>
784
795
  <preferred>Term2</preferred>
785
796
  </term>
786
797
  </terms>
@@ -791,24 +802,24 @@ RSpec.describe IsoDoc do
791
802
  </dl>
792
803
  </definitions>
793
804
  </clause>
794
- <definitions id='L'>
805
+ <definitions id='L' displayorder='6'>
795
806
  <dl>
796
807
  <dt>Symbol</dt>
797
808
  <dd>Definition</dd>
798
809
  </dl>
799
810
  </definitions>
800
- <clause id='M' inline-header='false' obligation='normative'>
801
- <title depth="1">Clause 4</title>
811
+ <clause id='M' inline-header='false' obligation='normative' displayorder='7'>
812
+ <title depth='1'>Clause 4</title>
802
813
  <clause id='N' inline-header='false' obligation='normative'>
803
- <title depth="2">Introduction</title>
814
+ <title depth='2'>Introduction</title>
804
815
  </clause>
805
816
  <clause id='O' inline-header='false' obligation='normative'>
806
- <title depth="2">Clause 4.2</title>
817
+ <title depth='2'>Clause 4.2</title>
807
818
  </clause>
808
819
  <clause id='O1' inline-header='false' obligation='normative'> </clause>
809
820
  </clause>
810
821
  </sections>
811
- <annex id='P' inline-header='false' obligation='normative'>
822
+ <annex id='P' inline-header='false' obligation='normative' displayorder='8'>
812
823
  <title>
813
824
  <strong>Annex A</strong>
814
825
  <br/>
@@ -818,51 +829,55 @@ RSpec.describe IsoDoc do
818
829
  <strong>Annex</strong>
819
830
  </title>
820
831
  <clause id='Q' inline-header='false' obligation='normative'>
821
- <title depth="2">Annex A.1</title>
832
+ <title depth='2'>Annex A.1</title>
822
833
  <clause id='Q1' inline-header='false' obligation='normative'>
823
- <title depth="3">Annex A.1a</title>
834
+ <title depth='3'>Annex A.1a</title>
824
835
  </clause>
825
836
  </clause>
826
837
  </annex>
827
838
  <bibliography>
828
- <references id='R' obligation='informative' normative='true'>
829
- <title depth="1">Normative References</title>
839
+ <references id='R' obligation='informative' normative='true' displayorder='4'>
840
+ <title depth='1'>Normative References</title>
830
841
  </references>
831
- <clause id='S' obligation='informative'>
832
- <title depth="1">Bibliography</title>
842
+ <clause id='S' obligation='informative' displayorder='9'>
843
+ <title depth='1'>Bibliography</title>
833
844
  <references id='T' obligation='informative' normative='false'>
834
- <title depth="2">Bibliography Subsection</title>
845
+ <title depth='2'>Bibliography Subsection</title>
835
846
  </references>
836
847
  </clause>
837
848
  </bibliography>
838
849
  </iso-standard>
839
850
  OUTPUT
851
+ expect(xmlpp(IsoDoc::PresentationXMLConvert.new({ suppressheadingnumbers: true })
852
+ .convert("test", input, true))).to be_equivalent_to xmlpp(output)
840
853
  end
841
854
 
842
855
  it "processes section titles without ID" do
843
- expect(xmlpp(IsoDoc::PresentationXMLConvert.new({ suppressheadingnumbers: true })
844
- .convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT")
845
- <iso-standard xmlns="http://riboseinc.com/isoxml">
846
- <preface>
847
- <introduction id="B" obligation="informative"><title>Introduction</title><clause obligation="informative">
848
- <title>Introduction Subsection</title>
849
- </clause>
850
- </introduction>
851
- </preface>
852
- </iso-standard>
856
+ input = <<~INPUT
857
+ <iso-standard xmlns="http://riboseinc.com/isoxml">
858
+ <preface>
859
+ <introduction id="B" obligation="informative"><title>Introduction</title><clause obligation="informative">
860
+ <title>Introduction Subsection</title>
861
+ </clause>
862
+ </introduction>
863
+ </preface>
864
+ </iso-standard>
853
865
  INPUT
854
- <?xml version='1.0'?>
855
- <iso-standard xmlns='http://riboseinc.com/isoxml' type="presentation">
856
- <preface>
857
- <introduction id='B' obligation='informative'>
858
- <title>Introduction</title>
859
- <clause obligation='informative'>
860
- <title depth="1">Introduction Subsection</title>
861
- </clause>
862
- </introduction>
863
- </preface>
864
- </iso-standard>
866
+ output = <<~OUTPUT
867
+ <?xml version='1.0'?>
868
+ <iso-standard xmlns='http://riboseinc.com/isoxml' type="presentation">
869
+ <preface>
870
+ <introduction id='B' obligation='informative' displayorder="1">
871
+ <title>Introduction</title>
872
+ <clause obligation='informative'>
873
+ <title depth="1">Introduction Subsection</title>
874
+ </clause>
875
+ </introduction>
876
+ </preface>
877
+ </iso-standard>
865
878
  OUTPUT
879
+ expect(xmlpp(IsoDoc::PresentationXMLConvert.new({ suppressheadingnumbers: true })
880
+ .convert("test", input, true))).to be_equivalent_to xmlpp(output)
866
881
  end
867
882
 
868
883
  it "processes simple terms & definitions" do
@@ -881,7 +896,7 @@ RSpec.describe IsoDoc do
881
896
  presxml = <<~"OUTPUT"
882
897
  <iso-standard xmlns='http://riboseinc.com/isoxml' type="presentation">
883
898
  <sections>
884
- <terms id='H' obligation='normative'>
899
+ <terms id='H' obligation='normative' displayorder="1">
885
900
  <title depth='1'>1.<tab/>Terms, Definitions, Symbols and Abbreviated Terms</title>
886
901
  <term id='J'>
887
902
  <name>1.1.</name>
@@ -928,7 +943,7 @@ RSpec.describe IsoDoc do
928
943
  presxml = <<~"PRESXML"
929
944
  <iso-standard xmlns='http://riboseinc.com/isoxml' type="presentation">
930
945
  <sections>
931
- <clause id='M' inline-header='false' obligation='normative'>
946
+ <clause id='M' inline-header='false' obligation='normative' displayorder="1">
932
947
  <title depth='1'>1.<tab/>Clause 4</title>
933
948
  <clause id='N' inline-header='false' obligation='normative'>
934
949
  <title depth='2'>1.1.<tab/>Introduction</title>
@@ -983,7 +998,7 @@ RSpec.describe IsoDoc do
983
998
  <?xml version='1.0'?>
984
999
  <iso-standard xmlns='http://riboseinc.com/isoxml' type="presentation">
985
1000
  <sections>
986
- <clause id='M' inline-header='false' obligation='normative'>
1001
+ <clause id='M' inline-header='false' obligation='normative' displayorder="1">
987
1002
  <title depth="1">Clause 4</title>
988
1003
  <clause id='N' inline-header='false' obligation='normative'>
989
1004
  <title depth="2">Introduction</title>
@@ -998,48 +1013,50 @@ RSpec.describe IsoDoc do
998
1013
  end
999
1014
 
1000
1015
  it "processes sections without titles" do
1001
- expect(xmlpp(IsoDoc::PresentationXMLConvert.new({})
1002
- .convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT")
1003
- <iso-standard xmlns="http://riboseinc.com/isoxml" type="presentation">
1004
- <preface>
1005
- <introduction id="M" inline-header="false" obligation="normative"><clause id="N" inline-header="false" obligation="normative">
1006
- <title>Intro</title>
1007
- </clause>
1008
- <clause id="O" inline-header="true" obligation="normative">
1009
- </clause></clause>
1010
- </preface>
1011
- <sections>
1012
- <clause id="M1" inline-header="false" obligation="normative"><clause id="N1" inline-header="false" obligation="normative">
1013
- </clause>
1014
- <clause id="O1" inline-header="true" obligation="normative">
1015
- </clause></clause>
1016
- </sections>
1016
+ input = <<~INPUT
1017
+ <iso-standard xmlns="http://riboseinc.com/isoxml" type="presentation">
1018
+ <preface>
1019
+ <introduction id="M" inline-header="false" obligation="normative"><clause id="N" inline-header="false" obligation="normative">
1020
+ <title>Intro</title>
1021
+ </clause>
1022
+ <clause id="O" inline-header="true" obligation="normative">
1023
+ </clause></clause>
1024
+ </preface>
1025
+ <sections>
1026
+ <clause id="M1" inline-header="false" obligation="normative"><clause id="N1" inline-header="false" obligation="normative">
1027
+ </clause>
1028
+ <clause id="O1" inline-header="true" obligation="normative">
1029
+ </clause></clause>
1030
+ </sections>
1017
1031
 
1018
- </iso-standard>
1019
- INPUT
1020
- <?xml version='1.0'?>
1021
- <iso-standard xmlns='http://riboseinc.com/isoxml' type="presentation">
1022
- <preface>
1023
- <introduction id='M' inline-header='false' obligation='normative'>
1024
- <clause id='N' inline-header='false' obligation='normative'>
1025
- <title depth="2">Intro</title>
1026
- </clause>
1027
- <clause id='O' inline-header='true' obligation='normative'> </clause>
1028
- </introduction>
1029
- </preface>
1030
- <sections>
1031
- <clause id='M1' inline-header='false' obligation='normative'>
1032
- <title>1.</title>
1033
- <clause id='N1' inline-header='false' obligation='normative'>
1034
- <title>1.1.</title>
1035
- </clause>
1036
- <clause id='O1' inline-header='true' obligation='normative'>
1037
- <title>1.2.</title>
1038
- </clause>
1032
+ </iso-standard>
1033
+ INPUT
1034
+ output = <<~OUTPUT
1035
+ <?xml version='1.0'?>
1036
+ <iso-standard xmlns='http://riboseinc.com/isoxml' type="presentation">
1037
+ <preface>
1038
+ <introduction id='M' inline-header='false' obligation='normative' displayorder="1">
1039
+ <clause id='N' inline-header='false' obligation='normative'>
1040
+ <title depth="2">Intro</title>
1039
1041
  </clause>
1040
- </sections>
1041
- </iso-standard>
1042
- OUTPUT
1042
+ <clause id='O' inline-header='true' obligation='normative'> </clause>
1043
+ </introduction>
1044
+ </preface>
1045
+ <sections>
1046
+ <clause id='M1' inline-header='false' obligation='normative' displayorder="2">
1047
+ <title>1.</title>
1048
+ <clause id='N1' inline-header='false' obligation='normative'>
1049
+ <title>1.1.</title>
1050
+ </clause>
1051
+ <clause id='O1' inline-header='true' obligation='normative'>
1052
+ <title>1.2.</title>
1053
+ </clause>
1054
+ </clause>
1055
+ </sections>
1056
+ </iso-standard>
1057
+ OUTPUT
1058
+ expect(xmlpp(IsoDoc::PresentationXMLConvert.new({})
1059
+ .convert("test", input, true))).to be_equivalent_to xmlpp(output)
1043
1060
  end
1044
1061
 
1045
1062
  it "processes clauses containing normative references" do
@@ -1070,7 +1087,7 @@ RSpec.describe IsoDoc do
1070
1087
  presxml = <<~OUTPUT
1071
1088
  <iso-standard xmlns="http://riboseinc.com/isoxml" type="presentation">
1072
1089
  <bibliography>
1073
- <clause id="D" obligation="informative">
1090
+ <clause id="D" obligation="informative" displayorder="2">
1074
1091
  <title depth="1">Bibliography</title>
1075
1092
  <references id="E" obligation="informative" normative="false">
1076
1093
  <title depth="2">Bibliography Subsection 1</title>
@@ -1079,7 +1096,7 @@ RSpec.describe IsoDoc do
1079
1096
  <title depth="2">Bibliography Subsection 2</title>
1080
1097
  </references>
1081
1098
  </clause>
1082
- <clause id="A" obligation="informative"><title depth="1">1.<tab/>First References</title>
1099
+ <clause id="A" obligation="informative" displayorder="1"><title depth="1">1.<tab/>First References</title>
1083
1100
  <references id="B" obligation="informative" normative="true">
1084
1101
  <title depth="2">1.1.<tab/>Normative References 1</title>
1085
1102
  </references>