isodoc 1.7.6 → 1.8.1

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 (44) hide show
  1. checksums.yaml +4 -4
  2. data/isodoc.gemspec +1 -1
  3. data/lib/isodoc/class_utils.rb +23 -0
  4. data/lib/isodoc/convert.rb +9 -0
  5. data/lib/isodoc/function/cleanup.rb +4 -0
  6. data/lib/isodoc/function/inline.rb +2 -4
  7. data/lib/isodoc/function/utils.rb +1 -1
  8. data/lib/isodoc/html_function/html.rb +1 -0
  9. data/lib/isodoc/html_function/postprocess.rb +4 -6
  10. data/lib/isodoc/metadata_date.rb +13 -11
  11. data/lib/isodoc/presentation_function/bibdata.rb +2 -2
  12. data/lib/isodoc/presentation_function/block.rb +0 -36
  13. data/lib/isodoc/presentation_function/inline.rb +14 -11
  14. data/lib/isodoc/presentation_function/terms.rb +179 -0
  15. data/lib/isodoc/presentation_xml_convert.rb +11 -4
  16. data/lib/isodoc/version.rb +1 -1
  17. data/lib/isodoc/word_function/body.rb +24 -14
  18. data/lib/isodoc/word_function/comments.rb +0 -4
  19. data/lib/isodoc/word_function/postprocess.rb +184 -176
  20. data/lib/isodoc/xref/xref_gen.rb +18 -22
  21. data/lib/isodoc/xref/xref_gen_seq.rb +10 -16
  22. data/lib/isodoc/xref/xref_sect_gen.rb +134 -129
  23. data/lib/isodoc/xslfo_convert.rb +11 -7
  24. data/lib/isodoc-yaml/i18n-ar.yaml +22 -0
  25. data/lib/isodoc-yaml/i18n-de.yaml +20 -0
  26. data/lib/isodoc-yaml/i18n-en.yaml +20 -0
  27. data/lib/isodoc-yaml/i18n-es.yaml +20 -0
  28. data/lib/isodoc-yaml/i18n-fr.yaml +20 -0
  29. data/lib/isodoc-yaml/i18n-ru.yaml +21 -1
  30. data/lib/isodoc-yaml/i18n-zh-Hans.yaml +21 -0
  31. data/lib/metanorma/output/xslfo.rb +4 -11
  32. data/spec/assets/i18n.yaml +3 -1
  33. data/spec/isodoc/blocks_spec.rb +14 -8
  34. data/spec/isodoc/i18n_spec.rb +8 -8
  35. data/spec/isodoc/inline_spec.rb +200 -6
  36. data/spec/isodoc/lists_spec.rb +344 -222
  37. data/spec/isodoc/section_spec.rb +11 -10
  38. data/spec/isodoc/table_spec.rb +71 -73
  39. data/spec/isodoc/terms_spec.rb +354 -34
  40. data/spec/isodoc/xref_numbering_spec.rb +347 -0
  41. data/spec/isodoc/xref_spec.rb +271 -350
  42. data/spec/isodoc/xslfo_convert_spec.rb +34 -9
  43. metadata +7 -6
  44. data/lib/isodoc/presentation_function/concept.rb +0 -68
@@ -24,7 +24,7 @@ RSpec.describe IsoDoc do
24
24
  <clause id="H" obligation="normative"><title>Terms, definitions, symbols and abbreviated terms</title><terms id="I" obligation="normative">
25
25
  <title>Normal Terms</title>
26
26
  <term id="J">
27
- <preferred>Term2</preferred>
27
+ <preferred><expression><name>Term2</name></expression></preferred>
28
28
  </term>
29
29
  </terms>
30
30
  <definitions id="K">
@@ -233,7 +233,7 @@ RSpec.describe IsoDoc do
233
233
  <clause id="H" obligation="normative"><title>Terms, definitions, symbols and abbreviated terms</title><terms id="I" obligation="normative">
234
234
  <title>Normal Terms</title>
235
235
  <term id="J">
236
- <preferred>Term2</preferred>
236
+ <preferred><expression><name>Term2</name></expression></preferred>
237
237
  </term>
238
238
  </terms>
239
239
  <definitions id="K">
@@ -361,7 +361,7 @@ RSpec.describe IsoDoc do
361
361
  <clause id="H" obligation="normative"><title>Terms, definitions, symbols and abbreviated terms</title><terms id="I" obligation="normative">
362
362
  <title>Normal Terms</title>
363
363
  <term id="J">
364
- <preferred>Term2</preferred>
364
+ <preferred><expression><name>Term2</name></expression></preferred>
365
365
  </term>
366
366
  </terms>
367
367
  <definitions id="K">
@@ -570,7 +570,7 @@ RSpec.describe IsoDoc do
570
570
  <clause id="H" obligation="normative"><title>Terms, definitions, symbols and abbreviated terms</title><terms id="I" obligation="normative">
571
571
  <title>Normal Terms</title>
572
572
  <term id="J">
573
- <preferred>Term2</preferred>
573
+ <preferred><expression><name>Term2</name></expression></preferred>
574
574
  </term>
575
575
  </terms>
576
576
  <definitions id="K">
@@ -812,7 +812,7 @@ RSpec.describe IsoDoc do
812
812
  <clause id="H" obligation="normative"><title>Terms, definitions, symbols and abbreviated terms</title><terms id="I" obligation="normative">
813
813
  <title>Normal Terms</title>
814
814
  <term id="J">
815
- <preferred>Term2</preferred>
815
+ <preferred><expression><name>Term2</name></expression></preferred>
816
816
  </term>
817
817
  </terms>
818
818
  <definitions id="K">
@@ -877,7 +877,7 @@ RSpec.describe IsoDoc do
877
877
  <ext>
878
878
  <doctype language="">brochure</doctype><doctype language="eo">bro&#x15D;uro</doctype>
879
879
  </ext>
880
- </bibdata><localized-strings><localized-string key="foreword" language="eo">Anta&#x16D;parolo</localized-string><localized-string key="introduction" language="eo">Enkonduko</localized-string><localized-string key="clause" language="eo">kla&#x16D;zo</localized-string><localized-string key="table" language="eo">tabelo</localized-string><localized-string key="source" language="eo">SOURCE</localized-string><localized-string key="modified" language="eo">modified</localized-string><localized-string key="scope" language="eo">Amplekso</localized-string><localized-string key="symbols" language="eo">Simboloj kai mallongigitaj terminoj</localized-string><localized-string key="annex" language="eo">Aldono</localized-string><localized-string key="normref" language="eo">Normaj cita&#x135;oj</localized-string><localized-string key="bibliography" language="eo">Bibliografio</localized-string><localized-string key="inform_annex" language="eo">informa</localized-string><localized-string key="all_parts" language="eo">&#x109;iuj partoj</localized-string><localized-string key="norm_annex" language="eo">normative</localized-string><localized-string key="note" language="eo">NOTO</localized-string><localized-string key="locality.table" language="eo">Tabelo</localized-string><localized-string key="doctype_dict.brochure" language="eo">bro&#x15D;uro</localized-string><localized-string key="doctype_dict.conference_proceedings" language="eo">konferencaktoj</localized-string><localized-string key="stage_dict.published" language="eo">publikigita</localized-string><localized-string key="substage_dict.withdrawn" language="eo">fortirita</localized-string><localized-string key="array.0" language="eo">elem1</localized-string><localized-string key="array.1" language="eo">elem2</localized-string><localized-string key="array.2.elem3" language="eo">elem4</localized-string><localized-string key="array.2.elem5" language="eo">elem6</localized-string><localized-string key="language" language="eo">eo</localized-string><localized-string key="script" language="eo">Latn</localized-string></localized-strings>
880
+ </bibdata><localized-strings><localized-string key="foreword" language="eo">Anta&#x16D;parolo</localized-string><localized-string key="introduction" language="eo">Enkonduko</localized-string><localized-string key="clause" language="eo">kla&#x16D;zo</localized-string><localized-string key="table" language="eo">tabelo</localized-string><localized-string key="source" language="eo">SOURCE</localized-string><localized-string key="modified" language="eo">modified</localized-string><localized-string key="scope" language="eo">Amplekso</localized-string><localized-string key="symbols" language="eo">Simboloj kai mallongigitaj terminoj</localized-string><localized-string key="annex" language="eo"><strong>aldono</strong></localized-string><localized-string key="normref" language="eo">Normaj cita&#x135;oj</localized-string><localized-string key="bibliography" language="eo">Bibliografio</localized-string><localized-string key="inform_annex" language="eo">informa</localized-string><localized-string key="all_parts" language="eo">&#x109;iuj partoj</localized-string><localized-string key="norm_annex" language="eo">normative</localized-string><localized-string key='figure' language='eo'>figur-etikedo duvorta</localized-string><localized-string key='example' language='eo'>Ekzempl-etikedo Duvorta</localized-string><localized-string key="note" language="eo">NOTO</localized-string><localized-string key="locality.table" language="eo">Tabelo</localized-string><localized-string key="doctype_dict.brochure" language="eo">bro&#x15D;uro</localized-string><localized-string key="doctype_dict.conference_proceedings" language="eo">konferencaktoj</localized-string><localized-string key="stage_dict.published" language="eo">publikigita</localized-string><localized-string key="substage_dict.withdrawn" language="eo">fortirita</localized-string><localized-string key="array.0" language="eo">elem1</localized-string><localized-string key="array.1" language="eo">elem2</localized-string><localized-string key="array.2.elem3" language="eo">elem4</localized-string><localized-string key="array.2.elem5" language="eo">elem6</localized-string><localized-string key="language" language="eo">eo</localized-string><localized-string key="script" language="eo">Latn</localized-string></localized-strings>
881
881
  <preface>
882
882
  <foreword obligation="informative" displayorder="1">
883
883
  <title>Foreword</title>
@@ -920,7 +920,7 @@ RSpec.describe IsoDoc do
920
920
  <title depth="2">5.2.<tab/>Clause 4.2</title>
921
921
  </clause></clause>
922
922
  </sections><annex id="P" inline-header="false" obligation="normative" displayorder="8">
923
- <title><strong>Aldono A</strong><br/>(normative)<br/><br/><strong>Annex</strong></title>
923
+ <title><strong><strong>Aldono</strong> A</strong><br/>(normative)<br/><br/><strong>Annex</strong></title>
924
924
  <clause id="Q" inline-header="false" obligation="normative">
925
925
  <title depth="2">A.1.<tab/>Annex A.1</title>
926
926
  <clause id="Q1" inline-header="false" obligation="normative">
@@ -1041,7 +1041,7 @@ RSpec.describe IsoDoc do
1041
1041
  <br/>
1042
1042
  <div id='P' class='Section3'>
1043
1043
  <h1 class='Annex'>
1044
- <b>Aldono A</b>
1044
+ <b><b>Aldono</b> A</b>
1045
1045
  <br/>
1046
1046
  (normative)
1047
1047
  <br/>
@@ -625,6 +625,84 @@ RSpec.describe IsoDoc do
625
625
  .convert("test", presxml, true))).to be_equivalent_to xmlpp(output)
626
626
  end
627
627
 
628
+ it "processes related terms" do
629
+ input = <<~INPUT
630
+ <iso-standard xmlns="http://riboseinc.com/isoxml">
631
+ <sections>
632
+ <terms id='A' obligation='normative'>
633
+ <title>Terms and definitions</title>
634
+ <term id='second'>
635
+ <preferred>
636
+ <expression>
637
+ <name>Second Term</name>
638
+ </expression>
639
+ </preferred>
640
+ <usageinfo>
641
+ <p id='B'>Usage Info 1.</p>
642
+ </usageinfo>
643
+ <definition><verbaldefinition>Definition 1</verbaldefinition></definition>
644
+ </term>
645
+ <term id="C">
646
+ <preferred language='fr' script='Latn' type='prefix'>
647
+ <expression>
648
+ <name>First Designation</name>
649
+ </expression></preferred>
650
+ <related type='contrast'>
651
+ <preferred>
652
+ <expression>
653
+ <name>Fifth Designation</name>
654
+ <grammar>
655
+ <gender>neuter</gender>
656
+ </grammar>
657
+ </expression>
658
+ </preferred>
659
+ <xref target='second'/>
660
+ </related>
661
+ <definition><verbaldefinition>Definition 2</verbaldefinition></definition>
662
+ </term>
663
+ </terms>
664
+ </sections>
665
+ </iso-standard>
666
+ INPUT
667
+ output = <<~OUTPUT
668
+ <iso-standard xmlns='http://riboseinc.com/isoxml' type='presentation'>
669
+ <sections>
670
+ <terms id='A' obligation='normative' displayorder='1'>
671
+ <title depth='1'>
672
+ 1.
673
+ <tab/>
674
+ Terms and definitions
675
+ </title>
676
+ <term id='second'>
677
+ <name>1.1.</name>
678
+ <preferred>Second Term</preferred>
679
+ <usageinfo>
680
+ <p id='B'>Usage Info 1.</p>
681
+ </usageinfo>
682
+ <definition>Definition 1</definition>
683
+ </term>
684
+ <term id='C'>
685
+ <name>1.2.</name>
686
+ <preferred language='fr' script='Latn' type='prefix'>First Designation</preferred>
687
+ <p>
688
+ <strong>CONTRAST:</strong>
689
+ <em>
690
+ <preferred>Fifth Designation neut</preferred>
691
+ </em>
692
+ (
693
+ <xref target='second'>Clause 1.1</xref>
694
+ )
695
+ </p>
696
+ <definition>Definition 2</definition>
697
+ </term>
698
+ </terms>
699
+ </sections>
700
+ </iso-standard>
701
+ OUTPUT
702
+ expect(xmlpp(IsoDoc::PresentationXMLConvert.new({})
703
+ .convert("test", input, true))).to be_equivalent_to xmlpp(output)
704
+ end
705
+
628
706
  it "processes embedded inline formatting" do
629
707
  input = <<~INPUT
630
708
  <iso-standard xmlns="http://riboseinc.com/isoxml">
@@ -1505,6 +1583,122 @@ RSpec.describe IsoDoc do
1505
1583
  end
1506
1584
 
1507
1585
  it "cases xrefs" do
1586
+ input = <<~INPUT
1587
+ <iso-standard xmlns="http://riboseinc.com/isoxml">
1588
+ <preface>
1589
+ <clause id="CC"><title>Introduction</title></clause>
1590
+ <sections>
1591
+ <clause id="A">
1592
+ <table id="B">
1593
+ </table>
1594
+ <figure id="B1"/>
1595
+ <example id="B2"/>
1596
+ </clause>
1597
+ <clause id="C">
1598
+ <p>This is <xref target="A"/> and <xref target="B"/>.
1599
+ This is <xref target="A" case="capital"/> and <xref target="B" case="lowercase"/>.
1600
+ This is <xref target="A" case="lowercase"/> and <xref target="B" case="capital"/>.
1601
+ Downcasing an xref affects only the first letter: <xref target="B2" case="lowercase"/>.
1602
+ Capitalising an xref affects only the first letter: <xref target="B1" case="capital"/>.
1603
+ <xref target="A"/> is clause <em>initial.</em><br/>
1604
+ <xref target="A"/> is too. </p>
1605
+ <p><xref target="A"/> is also.</p>
1606
+ <p>Annex has formatting, and crossreferences ignore it when determining casing. <xref target="AA"/>.</p>
1607
+ <p>Labels are not subject to casing: <xref target="CC" case="lowercase"/>
1608
+ </clause>
1609
+ <annex id="AA">
1610
+ <clause id="AA1"/>
1611
+ </annex>
1612
+ </sections>
1613
+ </iso-standard>
1614
+ INPUT
1615
+ output = <<~OUTPUT
1616
+ <iso-standard xmlns='http://riboseinc.com/isoxml' type='presentation'>
1617
+ <preface>
1618
+ <clause id='CC' displayorder='1'>
1619
+ <title depth='1'>Introduction</title>
1620
+ </clause>
1621
+ <sections displayorder='2'>
1622
+ <clause id='A' displayorder='3'>
1623
+ <title>1.</title>
1624
+ <table id='B'>
1625
+ <name>Tabelo 1</name>
1626
+ </table>
1627
+ <figure id='B1'>
1628
+ <name>Figur-etikedo duvorta 1</name>
1629
+ </figure>
1630
+ <example id='B2'>
1631
+ <name>Ekzempl-etikedo Duvorta</name>
1632
+ </example>
1633
+ </clause>
1634
+ <clause id='C' displayorder='4'>
1635
+ <title>2.</title>
1636
+ <p>
1637
+ This is
1638
+ <xref target='A'>kla&#x16D;zo 1</xref>
1639
+ and
1640
+ <xref target='B'>tabelo 1</xref>
1641
+ . This is
1642
+ <xref target='A' case='capital'>Kla&#x16D;zo 1</xref>
1643
+ and
1644
+ <xref target='B' case='lowercase'>tabelo 1</xref>
1645
+ . This is
1646
+ <xref target='A' case='lowercase'>kla&#x16D;zo 1</xref>
1647
+ and
1648
+ <xref target='B' case='capital'>Tabelo 1</xref>
1649
+ . Downcasing an xref affects only the first letter:
1650
+ <xref target='B2' case='lowercase'>kla&#x16D;zo 1, Example</xref>
1651
+ . Capitalising an xref affects only the first letter:
1652
+ <xref target='B1' case='capital'>Figur-etikedo duvorta 1</xref>
1653
+ .
1654
+ <xref target='A'>Kla&#x16D;zo 1</xref>
1655
+ is clause
1656
+ <em>initial.</em>
1657
+ <br/>
1658
+ <xref target='A'>Kla&#x16D;zo 1</xref>
1659
+ is too.
1660
+ </p>
1661
+ <p>
1662
+ <xref target='A'>Kla&#x16D;zo 1</xref>
1663
+ is also.
1664
+ </p>
1665
+ <p>
1666
+ Annex has formatting, and crossreferences ignore it when determining
1667
+ casing.
1668
+ <xref target='AA'>
1669
+ <strong>Aldono</strong>
1670
+ A
1671
+ </xref>
1672
+ .
1673
+ </p>
1674
+ <p>
1675
+ Labels are not subject to casing:
1676
+ <xref target='CC' case='lowercase'>Introduction</xref>
1677
+ </p>
1678
+ <annex id='AA' displayorder='5'>
1679
+ <title>
1680
+ <strong>
1681
+ <strong>Aldono</strong>
1682
+ A
1683
+ </strong>
1684
+ <br/>
1685
+ (informa)
1686
+ </title>
1687
+ <clause id='AA1'>
1688
+ <title>A.1.</title>
1689
+ </clause>
1690
+ </annex>
1691
+ </clause>
1692
+ </sections>
1693
+ </preface>
1694
+ </iso-standard>
1695
+ OUTPUT
1696
+ expect(xmlpp(IsoDoc::PresentationXMLConvert
1697
+ .new({ i18nyaml: "spec/assets/i18n.yaml" })
1698
+ .convert("test", input, true))).to be_equivalent_to xmlpp(output)
1699
+ end
1700
+
1701
+ it "ignores casing of xrefs in unicameral scripts" do
1508
1702
  input = <<~INPUT
1509
1703
  <iso-standard xmlns="http://riboseinc.com/isoxml">
1510
1704
  <sections>
@@ -1541,23 +1735,23 @@ RSpec.describe IsoDoc do
1541
1735
  and
1542
1736
  <xref target='B'>tabelo 1</xref>
1543
1737
  . This is
1544
- <xref target='A' case='capital'>Kla&#x16D;zo 1</xref>
1738
+ <xref target='A' case='capital'>kla&#x16D;zo 1</xref>
1545
1739
  and
1546
1740
  <xref target='B' case='lowercase'>tabelo 1</xref>
1547
1741
  . This is
1548
1742
  <xref target='A' case='lowercase'>kla&#x16D;zo 1</xref>
1549
1743
  and
1550
- <xref target='B' case='capital'>Tabelo 1</xref>
1744
+ <xref target='B' case='capital'>tabelo 1</xref>
1551
1745
  .
1552
- <xref target='A'>Kla&#x16D;zo 1</xref>
1746
+ <xref target='A'>kla&#x16D;zo 1</xref>
1553
1747
  is clause
1554
1748
  <em>initial.</em>
1555
1749
  <br/>
1556
- <xref target='A'>Kla&#x16D;zo 1</xref>
1750
+ <xref target='A'>kla&#x16D;zo 1</xref>
1557
1751
  is too.
1558
1752
  </p>
1559
1753
  <p>
1560
- <xref target='A'>Kla&#x16D;zo 1</xref>
1754
+ <xref target='A'>kla&#x16D;zo 1</xref>
1561
1755
  is also.
1562
1756
  </p>
1563
1757
  </clause>
@@ -1565,7 +1759,7 @@ RSpec.describe IsoDoc do
1565
1759
  </iso-standard>
1566
1760
  OUTPUT
1567
1761
  expect(xmlpp(IsoDoc::PresentationXMLConvert
1568
- .new({ i18nyaml: "spec/assets/i18n.yaml" })
1762
+ .new({ i18nyaml: "spec/assets/i18n.yaml", script: "Hans" })
1569
1763
  .convert("test", input, true))).to be_equivalent_to xmlpp(output)
1570
1764
  end
1571
1765