isodoc 1.2.7 → 1.4.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/rake.yml +14 -9
  3. data/README.adoc +1 -3
  4. data/isodoc.gemspec +1 -1
  5. data/lib/isodoc-yaml/i18n-en.yaml +56 -0
  6. data/lib/isodoc-yaml/i18n-fr.yaml +64 -7
  7. data/lib/isodoc-yaml/i18n-zh-Hans.yaml +1 -0
  8. data/lib/isodoc/base_style/blocks.scss +2 -2
  9. data/lib/isodoc/base_style/typography.scss +1 -1
  10. data/lib/isodoc/convert.rb +13 -85
  11. data/lib/isodoc/css.rb +95 -0
  12. data/lib/isodoc/function/inline.rb +0 -33
  13. data/lib/isodoc/function/inline_simple.rb +10 -1
  14. data/lib/isodoc/function/lists.rb +2 -1
  15. data/lib/isodoc/function/references.rb +8 -13
  16. data/lib/isodoc/function/section.rb +1 -1
  17. data/lib/isodoc/function/table.rb +10 -0
  18. data/lib/isodoc/function/to_word_html.rb +2 -2
  19. data/lib/isodoc/gem_tasks.rb +4 -0
  20. data/lib/isodoc/html_function/html.rb +7 -0
  21. data/lib/isodoc/html_function/mathvariant_to_plain.rb +82 -0
  22. data/lib/isodoc/html_function/postprocess.rb +41 -20
  23. data/lib/isodoc/i18n.rb +15 -2
  24. data/lib/isodoc/metadata_contributor.rb +4 -3
  25. data/lib/isodoc/presentation_function/bibdata.rb +3 -3
  26. data/lib/isodoc/presentation_function/block.rb +14 -9
  27. data/lib/isodoc/presentation_function/inline.rb +126 -22
  28. data/lib/isodoc/presentation_function/section.rb +9 -0
  29. data/lib/isodoc/presentation_xml_convert.rb +5 -0
  30. data/lib/isodoc/version.rb +1 -1
  31. data/lib/isodoc/word_convert.rb +0 -20
  32. data/lib/isodoc/word_function/body.rb +12 -0
  33. data/lib/isodoc/word_function/postprocess.rb +38 -80
  34. data/lib/isodoc/word_function/postprocess_cover.rb +55 -0
  35. data/lib/isodoc/word_function/table.rb +10 -0
  36. data/lib/isodoc/xref.rb +1 -0
  37. data/lib/isodoc/xref/xref_counter.rb +20 -9
  38. data/lib/isodoc/xref/xref_gen.rb +20 -2
  39. data/lib/isodoc/xref/xref_sect_gen.rb +1 -1
  40. data/spec/assets/html.scss +14 -0
  41. data/spec/assets/i18n.yaml +7 -6
  42. data/spec/isodoc/blocks_spec.rb +2 -1
  43. data/spec/isodoc/cleanup_spec.rb +0 -1
  44. data/spec/isodoc/footnotes_spec.rb +4 -5
  45. data/spec/isodoc/i18n_spec.rb +23 -2
  46. data/spec/isodoc/inline_spec.rb +182 -202
  47. data/spec/isodoc/lists_spec.rb +1 -1
  48. data/spec/isodoc/metadata_spec.rb +3 -1
  49. data/spec/isodoc/postproc_spec.rb +472 -11
  50. data/spec/isodoc/presentation_xml_spec.rb +584 -1
  51. data/spec/isodoc/ref_spec.rb +325 -7
  52. data/spec/isodoc/table_spec.rb +28 -0
  53. data/spec/isodoc/xref_spec.rb +162 -17
  54. metadata +18 -16
@@ -44,7 +44,7 @@ RSpec.describe IsoDoc do
44
44
  <abbreviation>ISO</abbreviation>
45
45
  </organization>
46
46
  </contributor>
47
- <note format="text/plain" type="ISO DATE" reference="1">Under preparation. (Stage at the time of publication ISO/DIS 16634)</note>
47
+ <note format="text/plain" type="Unpublished-Status" reference="1">Under preparation. (Stage at the time of publication ISO/DIS 16634)</note>
48
48
  <extent type="part">
49
49
  <referenceFrom>all</referenceFrom>
50
50
  </extent>
@@ -63,7 +63,7 @@ RSpec.describe IsoDoc do
63
63
  </bibitem>
64
64
  <bibitem id="ref1">
65
65
  <formattedref format="application/x-isodoc+xml"><smallcap>Standard No I.C.C 167</smallcap>. <em>Determination of the protein content in cereal and cereal products for food and animal feeding stuffs according to the Dumas combustion method</em> (see <link target="http://www.icc.or.at"/>)</formattedref>
66
- <docidentifier type="ICC">167</docidentifier>
66
+ <docidentifier type="ICC">ICC/167</docidentifier>
67
67
  </bibitem>
68
68
  <note><p>This is an annotation of ISO 20483:2013-2014</p></note>
69
69
  <bibitem id="zip_ffs"><formattedref format="application/x-isodoc+xml">Title 5</formattedref><docidentifier type="metanorma">[5]</docidentifier></bibitem>
@@ -136,7 +136,7 @@ RSpec.describe IsoDoc do
136
136
  <eref bibitemid='ISBN'>[1]</eref>
137
137
  <eref bibitemid='ISSN'>[2]</eref>
138
138
  <eref bibitemid='ISO16634'>ISO 16634:-- (all parts)</eref>
139
- <eref bibitemid='ref1'>ICC 167</eref>
139
+ <eref bibitemid='ref1'>ICC/167</eref>
140
140
  <eref bibitemid='ref10'>[10]</eref>
141
141
  <eref bibitemid='ref12'>Citn</eref>
142
142
  <eref bibitemid='zip_ffs'>[5]</eref>
@@ -181,7 +181,7 @@ RSpec.describe IsoDoc do
181
181
  <abbreviation>ISO</abbreviation>
182
182
  </organization>
183
183
  </contributor>
184
- <note format='text/plain' type='ISO DATE' reference='1'>Under preparation. (Stage at the time of publication ISO/DIS 16634)</note>
184
+ <note format='text/plain' type='Unpublished-Status' reference='1'>Under preparation. (Stage at the time of publication ISO/DIS 16634)</note>
185
185
  <extent type='part'>
186
186
  <referenceFrom>all</referenceFrom>
187
187
  </extent>
@@ -213,7 +213,7 @@ RSpec.describe IsoDoc do
213
213
  <link target='http://www.icc.or.at'/>
214
214
  )
215
215
  </formattedref>
216
- <docidentifier type='ICC'>167</docidentifier>
216
+ <docidentifier type='ICC'>ICC/167</docidentifier>
217
217
  </bibitem>
218
218
  <note>
219
219
  <name>NOTE</name>
@@ -309,7 +309,7 @@ RSpec.describe IsoDoc do
309
309
  <a href='#ISBN'>[1]</a>
310
310
  <a href='#ISSN'>[2]</a>
311
311
  <a href='#ISO16634'>ISO 16634:-- (all parts)</a>
312
- <a href='#ref1'>ICC 167</a>
312
+ <a href='#ref1'>ICC/167</a>
313
313
  <a href='#ref10'>[10]</a>
314
314
  <a href='#ref12'>Citn</a>
315
315
  <a href='#zip_ffs'>[5]</a>
@@ -342,7 +342,7 @@ RSpec.describe IsoDoc do
342
342
  <i>Cereals and pulses</i>
343
343
  </p>
344
344
  <p id='ref1' class='NormRef'>
345
- ICC 167,
345
+ ICC/167,
346
346
  <span style='font-variant:small-caps;'>Standard No I.C.C 167</span>
347
347
  .
348
348
  <i>
@@ -424,4 +424,322 @@ RSpec.describe IsoDoc do
424
424
  expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", presxml, true))).to be_equivalent_to xmlpp(html)
425
425
  end
426
426
 
427
+
428
+ it "processes hidden references sections in Relaton bibliographies" do
429
+ presxml = <<~PRESXML
430
+ <iso-standard xmlns='http://riboseinc.com/isoxml' type="presentation">
431
+ <bibdata>
432
+ <language current="true">en</language>
433
+ </bibdata>
434
+ <preface>
435
+ <foreword>
436
+ <p id='_f06fd0d1-a203-4f3d-a515-0bdba0f8d83f'>
437
+ <eref bibitemid='ISO712'>[110]</eref>
438
+ <eref bibitemid='ISBN'>[1]</eref>
439
+ <eref bibitemid='ISSN'>[2]</eref>
440
+ <eref bibitemid='ISO16634'>ISO 16634:-- (all parts)</eref>
441
+ <eref bibitemid='ref1'>ICC/167</eref>
442
+ <eref bibitemid='ref10'>[10]</eref>
443
+ <eref bibitemid='ref12'>Citn</eref>
444
+ <eref bibitemid='zip_ffs'>[5]</eref>
445
+ </p>
446
+ </foreword>
447
+ </preface>
448
+ <bibliography>
449
+ <references id='_normative_references' obligation='informative' normative='true' hidden="true">
450
+ <title depth='1'>1.<tab/>Normative References</title>
451
+ <p>
452
+ The following documents are referred to in the text in such a way that
453
+ some or all of their content constitutes requirements of this document.
454
+ For dated references, only the edition cited applies. For undated
455
+ references, the latest edition of the referenced document (including any
456
+ amendments) applies.
457
+ </p>
458
+ <bibitem id='ISO712' type='standard'>
459
+ <title format='text/plain'>Cereals or cereal products</title>
460
+ <title type='main' format='text/plain'>Cereals and cereal products</title>
461
+ <docidentifier type='ISO'>ISO 712</docidentifier>
462
+ <docidentifier type='metanorma'>[110]</docidentifier>
463
+ <contributor>
464
+ <role type='publisher'/>
465
+ <organization>
466
+ <name>International Organization for Standardization</name>
467
+ </organization>
468
+ </contributor>
469
+ </bibitem>
470
+ <bibitem id='ISO16634' type='standard'>
471
+ <title language='x' format='text/plain'>
472
+ Cereals, pulses, milled cereal products, xxxx, oilseeds and animal
473
+ feeding stuffs
474
+ </title>
475
+ <title language='en' format='text/plain'>Cereals, pulses, milled cereal products, oilseeds and animal feeding stuffs</title>
476
+ <docidentifier type='ISO'>ISO 16634:-- (all parts)</docidentifier>
477
+ <date type='published'>
478
+ <on>--</on>
479
+ </date>
480
+ <contributor>
481
+ <role type='publisher'/>
482
+ <organization>
483
+ <abbreviation>ISO</abbreviation>
484
+ </organization>
485
+ </contributor>
486
+ <note format='text/plain' type='Unpublished-Status' reference='1'>Under preparation. (Stage at the time of publication ISO/DIS 16634)</note>
487
+ <extent type='part'>
488
+ <referenceFrom>all</referenceFrom>
489
+ </extent>
490
+ </bibitem>
491
+ <bibitem id='ISO20483' type='standard'>
492
+ <title format='text/plain'>Cereals and pulses</title>
493
+ <docidentifier type='ISO'>ISO 20483:2013-2014</docidentifier>
494
+ <date type='published'>
495
+ <from>2013</from>
496
+ <to>2014</to>
497
+ </date>
498
+ <contributor>
499
+ <role type='publisher'/>
500
+ <organization>
501
+ <name>International Organization for Standardization</name>
502
+ </organization>
503
+ </contributor>
504
+ </bibitem>
505
+ <bibitem id='ref1'>
506
+ <formattedref format='application/x-isodoc+xml'>
507
+ <smallcap>Standard No I.C.C 167</smallcap>
508
+ .
509
+ <em>
510
+ Determination of the protein content in cereal and cereal products
511
+ for food and animal feeding stuffs according to the Dumas combustion
512
+ method
513
+ </em>
514
+ (see
515
+ <link target='http://www.icc.or.at'/>
516
+ )
517
+ </formattedref>
518
+ <docidentifier type='ICC'>ICC/167</docidentifier>
519
+ </bibitem>
520
+ <note>
521
+ <name>NOTE</name>
522
+ <p>This is an annotation of ISO 20483:2013-2014</p>
523
+ </note>
524
+ <bibitem id='zip_ffs'>
525
+ <formattedref format='application/x-isodoc+xml'>Title 5</formattedref>
526
+ <docidentifier type='metanorma'>[5]</docidentifier>
527
+ </bibitem>
528
+ </references>
529
+ <references id='_bibliography' obligation='informative' normative='false' hidden="true">
530
+ <title depth="1">Bibliography</title>
531
+ <bibitem id='ISBN' type='ISBN'>
532
+ <title format='text/plain'>Chemicals for analytical laboratory use</title>
533
+ <docidentifier type='ISBN'>ISBN</docidentifier>
534
+ <docidentifier type='metanorma'>[1]</docidentifier>
535
+ <contributor>
536
+ <role type='publisher'/>
537
+ <organization>
538
+ <abbreviation>ISBN</abbreviation>
539
+ </organization>
540
+ </contributor>
541
+ </bibitem>
542
+ <bibitem id='ISSN' type='ISSN'>
543
+ <title format='text/plain'>Instruments for analytical laboratory use</title>
544
+ <docidentifier type='ISSN'>ISSN</docidentifier>
545
+ <docidentifier type='metanorma'>[2]</docidentifier>
546
+ <contributor>
547
+ <role type='publisher'/>
548
+ <organization>
549
+ <abbreviation>ISSN</abbreviation>
550
+ </organization>
551
+ </contributor>
552
+ </bibitem>
553
+ <note>
554
+ <name>NOTE</name>
555
+ <p>This is an annotation of document ISSN.</p>
556
+ </note>
557
+ <note>
558
+ <name>NOTE</name>
559
+ <p>This is another annotation of document ISSN.</p>
560
+ </note>
561
+ <bibitem id='ISO3696' type='standard'>
562
+ <title format='text/plain'>Water for analytical laboratory use</title>
563
+ <docidentifier type='ISO'>ISO 3696</docidentifier>
564
+ <contributor>
565
+ <role type='publisher'/>
566
+ <organization>
567
+ <abbreviation>ISO</abbreviation>
568
+ </organization>
569
+ </contributor>
570
+ </bibitem>
571
+ <bibitem id='ref10'>
572
+ <formattedref format='application/x-isodoc+xml'>
573
+ <smallcap>Standard No I.C.C 167</smallcap>
574
+ .
575
+ <em>
576
+ Determination of the protein content in cereal and cereal products
577
+ for food and animal feeding stuffs according to the Dumas combustion
578
+ method
579
+ </em>
580
+ (see
581
+ <link target='http://www.icc.or.at'/>
582
+ )
583
+ </formattedref>
584
+ <docidentifier type='metanorma'>[10]</docidentifier>
585
+ </bibitem>
586
+ <bibitem id='ref11'>
587
+ <title>Internet Calendaring and Scheduling Core Object Specification (iCalendar)</title>
588
+ <docidentifier type='IETF'>RFC 10</docidentifier>
589
+ </bibitem>
590
+ <bibitem id='ref12'>
591
+ <formattedref format='application/x-isodoc+xml'>
592
+ CitationWorks. 2019.
593
+ <em>How to cite a reference</em>
594
+ .
595
+ </formattedref>
596
+ <docidentifier type='metanorma'>[Citn]</docidentifier>
597
+ <docidentifier type='IETF'>RFC 20</docidentifier>
598
+ </bibitem>
599
+ </references>
600
+ </bibliography>
601
+ </iso-standard>
602
+ PRESXML
603
+
604
+ html = <<~OUTPUT
605
+ #{HTML_HDR}
606
+ <br/>
607
+ <div>
608
+ <h1 class='ForewordTitle'>Foreword</h1>
609
+ <p id='_f06fd0d1-a203-4f3d-a515-0bdba0f8d83f'>
610
+ <a href='#ISO712'>[110]</a>
611
+ <a href='#ISBN'>[1]</a>
612
+ <a href='#ISSN'>[2]</a>
613
+ <a href='#ISO16634'>ISO 16634:-- (all parts)</a>
614
+ <a href='#ref1'>ICC/167</a>
615
+ <a href='#ref10'>[10]</a>
616
+ <a href='#ref12'>Citn</a>
617
+ <a href='#zip_ffs'>[5]</a>
618
+ </p>
619
+ </div>
620
+ <p class='zzSTDTitle1'/>
621
+ </div>
622
+ </body>
623
+ </html>
624
+
625
+ OUTPUT
626
+ expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", presxml, true))).to be_equivalent_to xmlpp(html)
627
+ end
628
+
629
+ it "processes hidden references sections in Relaton bibliographies" do
630
+ presxml = <<~PRESXML
631
+ <iso-standard xmlns='http://riboseinc.com/isoxml' type="presentation">
632
+ <bibdata>
633
+ <language current="true">en</language>
634
+ </bibdata>
635
+ <preface>
636
+ <foreword>
637
+ <p id='_f06fd0d1-a203-4f3d-a515-0bdba0f8d83f'>
638
+ <eref bibitemid='ISO712'>[110]</eref>
639
+ <eref bibitemid='ISBN'>[1]</eref>
640
+ <eref bibitemid='ISSN'>[2]</eref>
641
+ <eref bibitemid='ISO16634'>ISO 16634:-- (all parts)</eref>
642
+ <eref bibitemid='ref1'>ICC/167</eref>
643
+ <eref bibitemid='ref10'>[10]</eref>
644
+ <eref bibitemid='ref12'>Citn</eref>
645
+ <eref bibitemid='zip_ffs'>[5]</eref>
646
+ </p>
647
+ </foreword>
648
+ </preface>
649
+ <bibliography>
650
+ <references id='_normative_references' obligation='informative' normative='true'>
651
+ <title depth='1'>1.<tab/>Normative References</title>
652
+ <p>
653
+ The following documents are referred to in the text in such a way that
654
+ some or all of their content constitutes requirements of this document.
655
+ For dated references, only the edition cited applies. For undated
656
+ references, the latest edition of the referenced document (including any
657
+ amendments) applies.
658
+ </p>
659
+ <bibitem id='ISO712' type='standard' hidden="true">
660
+ <title format='text/plain'>Cereals or cereal products</title>
661
+ <title type='main' format='text/plain'>Cereals and cereal products</title>
662
+ <docidentifier type='ISO'>ISO 712</docidentifier>
663
+ <docidentifier type='metanorma'>[110]</docidentifier>
664
+ <contributor>
665
+ <role type='publisher'/>
666
+ <organization>
667
+ <name>International Organization for Standardization</name>
668
+ </organization>
669
+ </contributor>
670
+ </bibitem>
671
+ <bibitem id='ISO16634' type='standard'>
672
+ <title language='x' format='text/plain'>
673
+ Cereals, pulses, milled cereal products, xxxx, oilseeds and animal
674
+ feeding stuffs
675
+ </title>
676
+ <title language='en' format='text/plain'>Cereals, pulses, milled cereal products, oilseeds and animal feeding stuffs</title>
677
+ <docidentifier type='ISO'>ISO 16634:-- (all parts)</docidentifier>
678
+ <date type='published'>
679
+ <on>--</on>
680
+ </date>
681
+ <contributor>
682
+ <role type='publisher'/>
683
+ <organization>
684
+ <abbreviation>ISO</abbreviation>
685
+ </organization>
686
+ </contributor>
687
+ <note format='text/plain' type='Unpublished-Status' reference='1'>Under preparation. (Stage at the time of publication ISO/DIS 16634)</note>
688
+ <extent type='part'>
689
+ <referenceFrom>all</referenceFrom>
690
+ </extent>
691
+ </bibitem>
692
+ </references></bibliography></iso-standard>
693
+ PRESXML
694
+
695
+ html = <<~OUTPUT
696
+ #{HTML_HDR}
697
+ <br/>
698
+ <div>
699
+ <h1 class='ForewordTitle'>Foreword</h1>
700
+ <p id='_f06fd0d1-a203-4f3d-a515-0bdba0f8d83f'>
701
+ <a href='#ISO712'>[110]</a>
702
+ <a href='#ISBN'>[1]</a>
703
+ <a href='#ISSN'>[2]</a>
704
+ <a href='#ISO16634'>ISO 16634:-- (all parts)</a>
705
+ <a href='#ref1'>ICC/167</a>
706
+ <a href='#ref10'>[10]</a>
707
+ <a href='#ref12'>Citn</a>
708
+ <a href='#zip_ffs'>[5]</a>
709
+ </p>
710
+ </div>
711
+ <p class='zzSTDTitle1'/>
712
+ <div>
713
+ <h1>1.&#160; Normative References</h1>
714
+ <p>
715
+ The following documents are referred to in the text in such a way
716
+ that some or all of their content constitutes requirements of this
717
+ document. For dated references, only the edition cited applies. For
718
+ undated references, the latest edition of the referenced document
719
+ (including any amendments) applies.
720
+ </p>
721
+ <p id='ISO16634' class='NormRef'>
722
+ ISO 16634:-- (all parts)
723
+ <a class='FootnoteRef' href='#fn:1'>
724
+ <sup>1</sup>
725
+ </a>
726
+ ,
727
+ <i>Cereals, pulses, milled cereal products, oilseeds and animal feeding stuffs</i>
728
+ </p>
729
+ </div>
730
+ <aside id='fn:1' class='footnote'>
731
+ <p>Under preparation. (Stage at the time of publication ISO/DIS 16634)</p>
732
+ </aside>
733
+
734
+ </div>
735
+ </body>
736
+ </html>
737
+
738
+ OUTPUT
739
+ expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", presxml, true))).to be_equivalent_to xmlpp(html)
740
+ end
741
+
742
+
427
743
  end
744
+
745
+
@@ -8,6 +8,13 @@ RSpec.describe IsoDoc do
8
8
  <foreword>
9
9
  <table id="tableD-1" alt="tool tip" summary="long desc" width="70%" keep-with-next="true" keep-lines-together="true">
10
10
  <name>Repeatability and reproducibility of <em>husked</em> rice yield<fn reference="1"><p>X</p></fn></name>
11
+ <colgroup>
12
+ <col width="30%"/>
13
+ <col width="20%"/>
14
+ <col width="20%"/>
15
+ <col width="20%"/>
16
+ <col width="10%"/>
17
+ </colgroup>
11
18
  <thead>
12
19
  <tr>
13
20
  <td rowspan="2" align="left">Description</td>
@@ -77,6 +84,13 @@ RSpec.describe IsoDoc do
77
84
  <p>X</p>
78
85
  </fn>
79
86
  </name>
87
+ <colgroup>
88
+ <col width='30%'/>
89
+ <col width='20%'/>
90
+ <col width='20%'/>
91
+ <col width='20%'/>
92
+ <col width='10%'/>
93
+ </colgroup>
80
94
  <thead>
81
95
  <tr>
82
96
  <td rowspan='2' align='left'>Description</td>
@@ -165,6 +179,13 @@ html = <<~OUTPUT
165
179
  <caption>
166
180
  <span style="display:none">long desc</span>
167
181
  </caption>
182
+ <colgroup>
183
+ <col style='width: 30%;'/>
184
+ <col style='width: 20%;'/>
185
+ <col style='width: 20%;'/>
186
+ <col style='width: 20%;'/>
187
+ <col style='width: 10%;'/>
188
+ </colgroup>
168
189
  <thead>
169
190
  <tr>
170
191
  <td rowspan="2" style="text-align:left;border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;" scope="col">Description</td>
@@ -259,6 +280,13 @@ html = <<~OUTPUT
259
280
  </p>
260
281
  <div align='center' class='table_container'>
261
282
  <table id='tableD-1' class='MsoISOTable' style='mso-table-anchor-horizontal:column;mso-table-overlap:never;border-spacing:0;border-width:1px;page-break-after: avoid;page-break-inside: avoid;' title='tool tip' summary='long desc' width='70%'>
283
+ <colgroup>
284
+ <col width='30%'/>
285
+ <col width='20%'/>
286
+ <col width='20%'/>
287
+ <col width='20%'/>
288
+ <col width='10%'/>
289
+ </colgroup>
262
290
  <thead>
263
291
  <tr>
264
292
  <td rowspan='2' align='left' style='border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;'>Description</td>
@@ -2313,7 +2313,7 @@ OUTPUT
2313
2313
  <li id="N1"><p>A</p></li>
2314
2314
  </ol>
2315
2315
  <clause id="xyz"><title>Preparatory</title>
2316
- <ol id="N02">
2316
+ <ol id="N02" type="arabic">
2317
2317
  <li id="N2"><p>A</p></li>
2318
2318
  </ol>
2319
2319
  </clause>
@@ -2321,17 +2321,17 @@ OUTPUT
2321
2321
  </preface>
2322
2322
  <sections>
2323
2323
  <clause id="scope" type="scope"><title>Scope</title>
2324
- <ol id="N0">
2324
+ <ol id="N0" type="roman">
2325
2325
  <li id="N"><p>A</p></li>
2326
2326
  </ol>
2327
2327
  </clause>
2328
2328
  <terms id="terms"/>
2329
2329
  <clause id="widgets"><title>Widgets</title>
2330
2330
  <clause id="widgets1">
2331
- <ol id="note1l">
2331
+ <ol id="note1l" type="alphabet">
2332
2332
  <li id="note1"><p>A</p></li>
2333
2333
  </ol>
2334
- <ol id="note2l">
2334
+ <ol id="note2l" type="roman_upper">
2335
2335
  <li id="note2"><p>A</p></li>
2336
2336
  </ol>
2337
2337
  </clause>
@@ -2339,12 +2339,12 @@ OUTPUT
2339
2339
  </sections>
2340
2340
  <annex id="annex1">
2341
2341
  <clause id="annex1a">
2342
- <ol id="ANl">
2342
+ <ol id="ANl" type="alphabet_upper">
2343
2343
  <li id="AN"><p>A</p></li>
2344
2344
  </ol>
2345
2345
  </clause>
2346
2346
  <clause id="annex1b">
2347
- <ol id="Anote1l">
2347
+ <ol id="Anote1l" type="roman" start="4">
2348
2348
  <li id="Anote1"><p>A</p></li>
2349
2349
  </ol>
2350
2350
  <ol id="Anote2l">
@@ -2360,12 +2360,12 @@ OUTPUT
2360
2360
  <foreword>
2361
2361
  <p>
2362
2362
  <xref target='N1'>Introduction, a)</xref>
2363
- <xref target='N2'>Preparatory, a)</xref>
2364
- <xref target='N'>Clause 1, a)</xref>
2363
+ <xref target='N2'>Preparatory, 1)</xref>
2364
+ <xref target='N'>Clause 1, i)</xref>
2365
2365
  <xref target='note1'>Clause 3.1, List 1 a)</xref>
2366
- <xref target='note2'>Clause 3.1, List 2 a)</xref>
2367
- <xref target='AN'>Annex A.1, a)</xref>
2368
- <xref target='Anote1'>Annex A.2, List 1 a)</xref>
2366
+ <xref target='note2'>Clause 3.1, List 2 I)</xref>
2367
+ <xref target='AN'>Annex A.1, A)</xref>
2368
+ <xref target='Anote1'>Annex A.2, List 1 iv)</xref>
2369
2369
  <xref target='Anote2'>Annex A.2, List 2 a)</xref>
2370
2370
  </p>
2371
2371
  </foreword>
@@ -2377,7 +2377,7 @@ OUTPUT
2377
2377
  </ol>
2378
2378
  <clause id='xyz'>
2379
2379
  <title depth='2'>Preparatory</title>
2380
- <ol id='N02'>
2380
+ <ol id='N02' type="arabic">
2381
2381
  <li id='N2'>
2382
2382
  <p>A</p>
2383
2383
  </li>
@@ -2392,7 +2392,7 @@ OUTPUT
2392
2392
  <tab/>
2393
2393
  Scope
2394
2394
  </title>
2395
- <ol id='N0'>
2395
+ <ol id='N0' type="roman">
2396
2396
  <li id='N'>
2397
2397
  <p>A</p>
2398
2398
  </li>
@@ -2408,12 +2408,12 @@ OUTPUT
2408
2408
  Widgets
2409
2409
  </title>
2410
2410
  <clause id='widgets1'><title>3.1.</title>
2411
- <ol id='note1l'>
2411
+ <ol id='note1l' type="alphabet">
2412
2412
  <li id='note1'>
2413
2413
  <p>A</p>
2414
2414
  </li>
2415
2415
  </ol>
2416
- <ol id='note2l'>
2416
+ <ol id='note2l' type="roman_upper">
2417
2417
  <li id='note2'>
2418
2418
  <p>A</p>
2419
2419
  </li>
@@ -2428,14 +2428,14 @@ OUTPUT
2428
2428
  (informative)
2429
2429
  </title>
2430
2430
  <clause id='annex1a'><title>A.1.</title>
2431
- <ol id='ANl'>
2431
+ <ol id='ANl' type="alphabet_upper">
2432
2432
  <li id='AN'>
2433
2433
  <p>A</p>
2434
2434
  </li>
2435
2435
  </ol>
2436
2436
  </clause>
2437
2437
  <clause id='annex1b'><title>A.2.</title>
2438
- <ol id='Anote1l'>
2438
+ <ol id='Anote1l' type="roman" start="4">
2439
2439
  <li id='Anote1'>
2440
2440
  <p>A</p>
2441
2441
  </li>
@@ -2547,6 +2547,151 @@ OUTPUT
2547
2547
  OUTPUT
2548
2548
  end
2549
2549
 
2550
+ it "cross-references bookmarks" do
2551
+ expect(xmlpp(IsoDoc::PresentationXMLConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT")
2552
+ <iso-standard xmlns="http://riboseinc.com/isoxml">
2553
+ <preface>
2554
+ <foreword>
2555
+ <p>
2556
+ <xref target="N1"/>
2557
+ <xref target="N2"/>
2558
+ <xref target="N"/>
2559
+ <xref target="note1"/>
2560
+ <xref target="note2"/>
2561
+ <xref target="AN"/>
2562
+ <xref target="Anote1"/>
2563
+ <xref target="Anote2"/>
2564
+ </p>
2565
+ </foreword>
2566
+ <introduction id="intro">
2567
+ <p id="N01">
2568
+ <bookmark id="N1"/>
2569
+ </p>
2570
+ <clause id="xyz"><title>Preparatory</title>
2571
+ <p id="N02" type="arabic">
2572
+ <bookmark id="N2"/>
2573
+ </p>
2574
+ </clause>
2575
+ </introduction>
2576
+ </preface>
2577
+ <sections>
2578
+ <clause id="scope" type="scope"><title>Scope</title>
2579
+ <p id="N0" type="roman">
2580
+ <bookmark id="N"/>
2581
+ </p>
2582
+ </clause>
2583
+ <terms id="terms"/>
2584
+ <clause id="widgets"><title>Widgets</title>
2585
+ <clause id="widgets1">
2586
+ <p id="note1l" type="alphabet">
2587
+ <bookmark id="note1"/>
2588
+ </p>
2589
+ <p id="note2l" type="roman_upper">
2590
+ <bookmark id="note2"/>
2591
+ </p>
2592
+ </clause>
2593
+ </clause>
2594
+ </sections>
2595
+ <annex id="annex1">
2596
+ <clause id="annex1a">
2597
+ <p id="ANl" type="alphabet_upper">
2598
+ <bookmark id="AN"/>
2599
+ </p>
2600
+ </clause>
2601
+ <clause id="annex1b">
2602
+ <p id="Anote1l" type="roman" start="4">
2603
+ <bookmark id="Anote1"/>
2604
+ </p>
2605
+ <p id="Anote2l">
2606
+ <bookmark id="Anote2"/>
2607
+ </p>
2608
+ </clause>
2609
+ </annex>
2610
+ </iso-standard>
2611
+ INPUT
2612
+ <iso-standard xmlns='http://riboseinc.com/isoxml' type='presentation'>
2613
+ <preface>
2614
+ <foreword>
2615
+ <p>
2616
+ <xref target='N1'>Introduction</xref>
2617
+ <xref target='N2'>Preparatory</xref>
2618
+ <xref target='N'>Clause 1</xref>
2619
+ <xref target='note1'>Clause 3.1</xref>
2620
+ <xref target='note2'>Clause 3.1</xref>
2621
+ <xref target='AN'>Annex A.1</xref>
2622
+ <xref target='Anote1'>Annex A.2</xref>
2623
+ <xref target='Anote2'>Annex A.2</xref>
2624
+ </p>
2625
+ </foreword>
2626
+ <introduction id='intro'>
2627
+ <p id='N01'>
2628
+ <bookmark id='N1'/>
2629
+ </p>
2630
+ <clause id='xyz'>
2631
+ <title depth='2'>Preparatory</title>
2632
+ <p id='N02' type='arabic'>
2633
+ <bookmark id='N2'/>
2634
+ </p>
2635
+ </clause>
2636
+ </introduction>
2637
+ </preface>
2638
+ <sections>
2639
+ <clause id='scope' type='scope'>
2640
+ <title depth='1'>
2641
+ 1.
2642
+ <tab/>
2643
+ Scope
2644
+ </title>
2645
+ <p id='N0' type='roman'>
2646
+ <bookmark id='N'/>
2647
+ </p>
2648
+ </clause>
2649
+ <terms id='terms'>
2650
+ <title>2.</title>
2651
+ </terms>
2652
+ <clause id='widgets'>
2653
+ <title depth='1'>
2654
+ 3.
2655
+ <tab/>
2656
+ Widgets
2657
+ </title>
2658
+ <clause id='widgets1'>
2659
+ <title>3.1.</title>
2660
+ <p id='note1l' type='alphabet'>
2661
+ <bookmark id='note1'/>
2662
+ </p>
2663
+ <p id='note2l' type='roman_upper'>
2664
+ <bookmark id='note2'/>
2665
+ </p>
2666
+ </clause>
2667
+ </clause>
2668
+ </sections>
2669
+ <annex id='annex1'>
2670
+ <title>
2671
+ <strong>Annex A</strong>
2672
+ <br/>
2673
+ (informative)
2674
+ </title>
2675
+ <clause id='annex1a'>
2676
+ <title>A.1.</title>
2677
+ <p id='ANl' type='alphabet_upper'>
2678
+ <bookmark id='AN'/>
2679
+ </p>
2680
+ </clause>
2681
+ <clause id='annex1b'>
2682
+ <title>A.2.</title>
2683
+ <p id='Anote1l' type='roman' start='4'>
2684
+ <bookmark id='Anote1'/>
2685
+ </p>
2686
+ <p id='Anote2l'>
2687
+ <bookmark id='Anote2'/>
2688
+ </p>
2689
+ </clause>
2690
+ </annex>
2691
+ </iso-standard>
2692
+ OUTPUT
2693
+ end
2694
+
2550
2695
  it "realises subsequences" do
2551
2696
  expect(xmlpp(IsoDoc::PresentationXMLConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT")
2552
2697
  <iso-standard xmlns="http://riboseinc.com/isoxml">