isodoc 1.7.1 → 1.7.2
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.
- checksums.yaml +4 -4
- data/isodoc.gemspec +1 -1
- data/lib/isodoc.rb +1 -0
- data/lib/isodoc/function/blocks.rb +180 -168
- data/lib/isodoc/function/to_word_html.rb +206 -204
- data/lib/isodoc/html_convert.rb +0 -4
- data/lib/isodoc/version.rb +1 -1
- data/lib/metanorma/output.rb +7 -0
- data/lib/metanorma/output/base.rb +13 -0
- data/lib/metanorma/output/utils.rb +17 -0
- data/lib/metanorma/output/xslfo.rb +21 -0
- data/spec/assets/outputtest/a.xml +66 -0
- data/spec/assets/outputtest/iso.international-standard.xsl +3011 -0
- data/spec/isodoc/blocks_spec.rb +327 -243
- metadata +8 -18
- data/lib/isodoc/html_function/sectionsplit.rb +0 -244
- data/spec/isodoc/sectionsplit_spec.rb +0 -190
data/spec/isodoc/blocks_spec.rb
CHANGED
@@ -1535,7 +1535,7 @@ RSpec.describe IsoDoc do
|
|
1535
1535
|
end
|
1536
1536
|
|
1537
1537
|
it "processes term domains" do
|
1538
|
-
|
1538
|
+
input = <<~INPUT
|
1539
1539
|
<iso-standard xmlns="http://riboseinc.com/isoxml">
|
1540
1540
|
<sections>
|
1541
1541
|
<terms>
|
@@ -1547,6 +1547,7 @@ RSpec.describe IsoDoc do
|
|
1547
1547
|
</sections>
|
1548
1548
|
</iso-standard>
|
1549
1549
|
INPUT
|
1550
|
+
output = <<~OUTPUT
|
1550
1551
|
#{HTML_HDR}
|
1551
1552
|
<p class="zzSTDTitle1"/>
|
1552
1553
|
<div><h1/>
|
@@ -1558,6 +1559,8 @@ RSpec.describe IsoDoc do
|
|
1558
1559
|
</body>
|
1559
1560
|
</html>
|
1560
1561
|
OUTPUT
|
1562
|
+
expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", input, true)))
|
1563
|
+
.to be_equivalent_to xmlpp(output)
|
1561
1564
|
end
|
1562
1565
|
|
1563
1566
|
it "processes permissions" do
|
@@ -1617,109 +1620,111 @@ RSpec.describe IsoDoc do
|
|
1617
1620
|
</iso-standard>
|
1618
1621
|
INPUT
|
1619
1622
|
presxml = <<~OUTPUT
|
1620
|
-
|
1621
|
-
|
1622
|
-
|
1623
|
-
|
1624
|
-
|
1625
|
-
|
1626
|
-
|
1627
|
-
|
1628
|
-
|
1629
|
-
|
1630
|
-
|
1631
|
-
|
1632
|
-
|
1633
|
-
|
1634
|
-
|
1635
|
-
|
1636
|
-
|
1637
|
-
|
1638
|
-
|
1639
|
-
|
1640
|
-
|
1641
|
-
|
1642
|
-
|
1643
|
-
|
1644
|
-
|
1645
|
-
|
1646
|
-
|
1647
|
-
|
1648
|
-
|
1649
|
-
|
1650
|
-
|
1651
|
-
|
1652
|
-
|
1653
|
-
|
1654
|
-
|
1655
|
-
|
1656
|
-
|
1657
|
-
|
1658
|
-
|
1659
|
-
|
1660
|
-
|
1661
|
-
|
1662
|
-
|
1663
|
-
|
1664
|
-
|
1665
|
-
|
1666
|
-
|
1667
|
-
|
1668
|
-
|
1669
|
-
|
1670
|
-
|
1671
|
-
|
1672
|
-
|
1673
|
-
|
1674
|
-
|
1675
|
-
|
1676
|
-
|
1677
|
-
|
1678
|
-
|
1679
|
-
|
1680
|
-
|
1681
|
-
|
1682
|
-
|
1683
|
-
|
1684
|
-
|
1685
|
-
|
1686
|
-
|
1687
|
-
|
1688
|
-
|
1689
|
-
|
1690
|
-
</div>
|
1691
|
-
<div class="requirement-description">
|
1692
|
-
<p id="_">As for the measurement targets,</p>
|
1693
|
-
</div>
|
1694
|
-
<div class="requirement-measurement-target">
|
1695
|
-
<p id="_">The measurement target shall be measured as:</p>
|
1696
|
-
<div id="_"><div class="formula"><p><span class="stem">(#(r/1 = 0)#)</span>  (1)</p></div></div>
|
1697
|
-
</div>
|
1698
|
-
<div class="requirement-verification">
|
1699
|
-
<p id="_">The following code will be run for verification:</p>
|
1700
|
-
<pre id="_" class="prettyprint ">CoreRoot(success): HttpResponse<br/>      if (success)<br/>      recommendation(label: success-response)<br/>      end<br/>    </pre>
|
1701
|
-
</div>
|
1623
|
+
<iso-standard xmlns="http://riboseinc.com/isoxml" type='presentation'>
|
1624
|
+
<preface><foreword displayorder='1'>
|
1625
|
+
<permission id="_" keep-with-next="true" keep-lines-together="true">
|
1626
|
+
<name>Permission 1</name>
|
1627
|
+
<label>/ogc/recommendation/wfs/2</label>
|
1628
|
+
<inherit>/ss/584/2015/level/1</inherit>
|
1629
|
+
<inherit><eref type="inline" bibitemid="rfc2616" citeas="RFC 2616">RFC 2616 (HTTP/1.1)</eref></inherit>
|
1630
|
+
<subject>user</subject>
|
1631
|
+
<classification> <tag>control-class</tag> <value>Technical</value> </classification><classification> <tag>priority</tag> <value>P0</value> </classification><classification> <tag>family</tag> <value>System and Communications Protection</value> </classification><classification> <tag>family</tag> <value>System and Communications Protocols</value> </classification>
|
1632
|
+
<description>
|
1633
|
+
<p id="_">I recommend <em>this</em>.</p>
|
1634
|
+
</description>
|
1635
|
+
<specification exclude="true" type="tabular">
|
1636
|
+
<p id="_">This is the object of the recommendation:</p>
|
1637
|
+
<table id="_">
|
1638
|
+
<tbody>
|
1639
|
+
<tr>
|
1640
|
+
<td style="text-align:left;">Object</td>
|
1641
|
+
<td style="text-align:left;">Value</td>
|
1642
|
+
</tr>
|
1643
|
+
<tr>
|
1644
|
+
<td style="text-align:left;">Mission</td>
|
1645
|
+
<td style="text-align:left;">Accomplished</td>
|
1646
|
+
</tr>
|
1647
|
+
</tbody>
|
1648
|
+
</table>
|
1649
|
+
</specification>
|
1650
|
+
<description>
|
1651
|
+
<p id="_">As for the measurement targets,</p>
|
1652
|
+
</description>
|
1653
|
+
<measurement-target exclude="false">
|
1654
|
+
<p id="_">The measurement target shall be measured as:</p>
|
1655
|
+
<formula id="_">
|
1656
|
+
<name>1</name>
|
1657
|
+
<stem type="AsciiMath">r/1 = 0</stem>
|
1658
|
+
</formula>
|
1659
|
+
</measurement-target>
|
1660
|
+
<verification exclude="false">
|
1661
|
+
<p id="_">The following code will be run for verification:</p>
|
1662
|
+
<sourcecode id="_">CoreRoot(success): HttpResponse
|
1663
|
+
if (success)
|
1664
|
+
recommendation(label: success-response)
|
1665
|
+
end
|
1666
|
+
</sourcecode>
|
1667
|
+
</verification>
|
1668
|
+
<import exclude="true">
|
1669
|
+
<sourcecode id="_">success-response()</sourcecode>
|
1670
|
+
</import>
|
1671
|
+
</permission>
|
1672
|
+
</foreword></preface>
|
1673
|
+
<bibliography><references id="_bibliography" obligation="informative" normative="false" displayorder='2'>
|
1674
|
+
<title depth='1'>Bibliography</title>
|
1675
|
+
<bibitem id="rfc2616" type="standard"> <fetched>2020-03-27</fetched> <title format="text/plain" language="en" script="Latn">Hypertext Transfer Protocol — HTTP/1.1</title> <uri type="xml">https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2616.xml</uri> <uri type="src">https://www.rfc-editor.org/info/rfc2616</uri> <docidentifier type="IETF">IETF RFC 2616</docidentifier> <docidentifier type="rfc-anchor">RFC2616</docidentifier> <docidentifier type="DOI">DOI 10.17487/RFC2616</docidentifier> <date type="published"> <on>1999-06</on> </date> <contributor> <role type="author"/> <person> <name> <completename language="en">R. Fielding</completename> </name> <affiliation> <organization> <name>IETF</name> <abbreviation>IETF</abbreviation> </organization> </affiliation> </person> </contributor> <contributor> <role type="author"/> <person> <name> <completename language="en">J. Gettys</completename> </name> <affiliation> <organization> <name>IETF</name> <abbreviation>IETF</abbreviation> </organization> </affiliation> </person> </contributor> <contributor> <role type="author"/> <person> <name> <completename language="en">J. Mogul</completename> </name> <affiliation> <organization> <name>IETF</name> <abbreviation>IETF</abbreviation> </organization> </affiliation> </person> </contributor> <contributor> <role type="author"/> <person> <name> <completename language="en">H. Frystyk</completename> </name> <affiliation> <organization> <name>IETF</name> <abbreviation>IETF</abbreviation> </organization> </affiliation> </person> </contributor> <contributor> <role type="author"/> <person> <name> <completename language="en">L. Masinter</completename> </name> <affiliation> <organization> <name>IETF</name> <abbreviation>IETF</abbreviation> </organization> </affiliation> </person> </contributor> <contributor> <role type="author"/> <person> <name> <completename language="en">P. Leach</completename> </name> <affiliation> <organization> <name>IETF</name> <abbreviation>IETF</abbreviation> </organization> </affiliation> </person> </contributor> <contributor> <role type="author"/> <person> <name> <completename language="en">T. Berners-Lee</completename> </name> <affiliation> <organization> <name>IETF</name> <abbreviation>IETF</abbreviation> </organization> </affiliation> </person> </contributor> <language>en</language> <script>Latn</script> <abstract format="text/plain" language="en" script="Latn">HTTP has been in use by the World-Wide Web global information initiative since 1990. This specification defines the protocol referred to as “HTTP/1.1”, and is an update to RFC 2068. [STANDARDS-TRACK]</abstract> <series type="main"> <title format="text/plain" language="en" script="Latn">RFC</title> <number>2616</number> </series> <place>Fremont, CA</place></bibitem>
|
1676
|
+
</references></bibliography>
|
1677
|
+
</iso-standard>
|
1678
|
+
OUTPUT
|
1679
|
+
html = <<~OUTPUT
|
1680
|
+
#{HTML_HDR}
|
1681
|
+
<br/>
|
1682
|
+
<div>
|
1683
|
+
<h1 class="ForewordTitle">Foreword</h1>
|
1684
|
+
<div class="permission" id='_' style='page-break-after: avoid;page-break-inside: avoid;'>
|
1685
|
+
<p class="RecommendationTitle">Permission 1:<br/>/ogc/recommendation/wfs/2</p>
|
1686
|
+
<p><i>Subject: user<br/>
|
1687
|
+
Inherits: /ss/584/2015/level/1
|
1688
|
+
<br/>
|
1689
|
+
Inherits: <a href='#rfc2616'>RFC 2616 (HTTP/1.1)</a>
|
1690
|
+
<br/>Control-class: Technical<br/>Priority: P0<br/>Family: System and Communications Protection<br/>Family: System and Communications Protocols</i></p>
|
1691
|
+
<div class="requirement-description">
|
1692
|
+
<p id="_">I recommend <i>this</i>.</p>
|
1702
1693
|
</div>
|
1703
|
-
|
1704
|
-
|
1705
|
-
|
1706
|
-
|
1707
|
-
|
1708
|
-
|
1709
|
-
|
1710
|
-
|
1711
|
-
|
1712
|
-
|
1694
|
+
<div class="requirement-description">
|
1695
|
+
<p id="_">As for the measurement targets,</p>
|
1696
|
+
</div>
|
1697
|
+
<div class="requirement-measurement-target">
|
1698
|
+
<p id="_">The measurement target shall be measured as:</p>
|
1699
|
+
<div id="_"><div class="formula"><p><span class="stem">(#(r/1 = 0)#)</span>  (1)</p></div></div>
|
1700
|
+
</div>
|
1701
|
+
<div class="requirement-verification">
|
1702
|
+
<p id="_">The following code will be run for verification:</p>
|
1703
|
+
<pre id="_" class="prettyprint ">CoreRoot(success): HttpResponse<br/>      if (success)<br/>      recommendation(label: success-response)<br/>      end<br/>    </pre>
|
1704
|
+
</div>
|
1705
|
+
</div>
|
1713
1706
|
</div>
|
1714
|
-
|
1715
|
-
|
1707
|
+
<p class="zzSTDTitle1"/>
|
1708
|
+
<br/>
|
1709
|
+
<div>
|
1710
|
+
<h1 class='Section3'>Bibliography</h1>
|
1711
|
+
<p id='rfc2616' class='Biblio'>
|
1712
|
+
[1]  IETF RFC 2616,
|
1713
|
+
<i>Hypertext Transfer Protocol — HTTP/1.1</i>
|
1714
|
+
</p>
|
1715
|
+
</div>
|
1716
|
+
</div>
|
1717
|
+
</body>
|
1718
|
+
</html>
|
1716
1719
|
OUTPUT
|
1717
|
-
expect(xmlpp(IsoDoc::PresentationXMLConvert.new({})
|
1718
|
-
|
1720
|
+
expect(xmlpp(IsoDoc::PresentationXMLConvert.new({})
|
1721
|
+
.convert("test", input, true))).to be_equivalent_to xmlpp(presxml)
|
1722
|
+
expect(xmlpp(IsoDoc::HtmlConvert.new({})
|
1723
|
+
.convert("test", presxml, true))).to be_equivalent_to xmlpp(html)
|
1719
1724
|
end
|
1720
1725
|
|
1721
|
-
it "processes requirements
|
1722
|
-
|
1726
|
+
it "processes requirements" do
|
1727
|
+
input = <<~INPUT
|
1723
1728
|
<iso-standard xmlns="http://riboseinc.com/isoxml">
|
1724
1729
|
<preface><foreword>
|
1725
1730
|
<requirement id="A" unnumbered="true" keep-with-next="true" keep-lines-together="true">
|
@@ -1769,6 +1774,7 @@ RSpec.describe IsoDoc do
|
|
1769
1774
|
</foreword></preface>
|
1770
1775
|
</iso-standard>
|
1771
1776
|
INPUT
|
1777
|
+
presxml = <<~OUTPUT
|
1772
1778
|
<?xml version='1.0'?>
|
1773
1779
|
<iso-standard xmlns='http://riboseinc.com/isoxml' type="presentation">
|
1774
1780
|
<preface>
|
@@ -1806,17 +1812,14 @@ RSpec.describe IsoDoc do
|
|
1806
1812
|
</description>
|
1807
1813
|
<measurement-target exclude='false' keep-with-next='true' keep-lines-together='true'>
|
1808
1814
|
<p id='_'>The measurement target shall be measured as:</p>
|
1809
|
-
<formula id='B'>
|
1810
|
-
<name>1</name>
|
1811
|
-
<stem type='AsciiMath'>r/1 = 0</stem>
|
1812
|
-
</formula>
|
1813
|
-
</measurement-target>
|
1815
|
+
<formula id='B'><name>1</name><stem type='AsciiMath'>r/1 = 0</stem></formula></measurement-target>
|
1814
1816
|
<verification exclude='false'>
|
1815
1817
|
<p id='_'>The following code will be run for verification:</p>
|
1816
|
-
<sourcecode id='_'>
|
1817
|
-
|
1818
|
-
|
1819
|
-
|
1818
|
+
<sourcecode id='_'>CoreRoot(success): HttpResponse
|
1819
|
+
if (success)
|
1820
|
+
recommendation(label: success-response)
|
1821
|
+
end
|
1822
|
+
</sourcecode>
|
1820
1823
|
</verification>
|
1821
1824
|
<import exclude='true'>
|
1822
1825
|
<sourcecode id='_'>success-response()</sourcecode>
|
@@ -1826,60 +1829,8 @@ RSpec.describe IsoDoc do
|
|
1826
1829
|
</preface>
|
1827
1830
|
</iso-standard>
|
1828
1831
|
OUTPUT
|
1829
|
-
end
|
1830
1832
|
|
1831
|
-
|
1832
|
-
expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT")
|
1833
|
-
<iso-standard xmlns="http://riboseinc.com/isoxml">
|
1834
|
-
<preface><foreword>
|
1835
|
-
<requirement id="A" unnumbered="true" keep-with-next="true" keep-lines-together="true">
|
1836
|
-
<name>Requirement</name>
|
1837
|
-
<title>A New Requirement</title>
|
1838
|
-
<label>/ogc/recommendation/wfs/2</label>
|
1839
|
-
<inherit>/ss/584/2015/level/1</inherit>
|
1840
|
-
<subject>user</subject>
|
1841
|
-
<description>
|
1842
|
-
<p id="_">I recommend <em>this</em>.</p>
|
1843
|
-
</description>
|
1844
|
-
<specification exclude="true" type="tabular">
|
1845
|
-
<p id="_">This is the object of the recommendation:</p>
|
1846
|
-
<table id="_">
|
1847
|
-
<tbody>
|
1848
|
-
<tr>
|
1849
|
-
<td style="text-align:left;">Object</td>
|
1850
|
-
<td style="text-align:left;">Value</td>
|
1851
|
-
</tr>
|
1852
|
-
<tr>
|
1853
|
-
<td style="text-align:left;">Mission</td>
|
1854
|
-
<td style="text-align:left;">Accomplished</td>
|
1855
|
-
</tr>
|
1856
|
-
</tbody>
|
1857
|
-
</table>
|
1858
|
-
</specification>
|
1859
|
-
<description>
|
1860
|
-
<p id="_">As for the measurement targets,</p>
|
1861
|
-
</description>
|
1862
|
-
<measurement-target exclude="false" keep-with-next="true" keep-lines-together="true">
|
1863
|
-
<p id="_">The measurement target shall be measured as:</p>
|
1864
|
-
<formula id="B">
|
1865
|
-
<stem type="AsciiMath">r/1 = 0</stem>
|
1866
|
-
</formula>
|
1867
|
-
</measurement-target>
|
1868
|
-
<verification exclude="false">
|
1869
|
-
<p id="_">The following code will be run for verification:</p>
|
1870
|
-
<sourcecode id="_">CoreRoot(success): HttpResponse
|
1871
|
-
if (success)
|
1872
|
-
recommendation(label: success-response)
|
1873
|
-
end
|
1874
|
-
</sourcecode>
|
1875
|
-
</verification>
|
1876
|
-
<import exclude="true">
|
1877
|
-
<sourcecode id="_">success-response()</sourcecode>
|
1878
|
-
</import>
|
1879
|
-
</requirement>
|
1880
|
-
</foreword></preface>
|
1881
|
-
</iso-standard>
|
1882
|
-
INPUT
|
1833
|
+
output = <<~OUTPUT
|
1883
1834
|
#{HTML_HDR}
|
1884
1835
|
<br/>
|
1885
1836
|
<div>
|
@@ -1894,7 +1845,7 @@ RSpec.describe IsoDoc do
|
|
1894
1845
|
</div>
|
1895
1846
|
<div class="requirement-measurement-target" style='page-break-after: avoid;page-break-inside: avoid;'>
|
1896
1847
|
<p id="_">The measurement target shall be measured as:</p>
|
1897
|
-
<div id="B"><div class="formula"><p><span class="stem">(#(r/1 = 0)#)</span
|
1848
|
+
<div id="B"><div class="formula"><p><span class="stem">(#(r/1 = 0)#)</span>   (1)</p></div></div>
|
1898
1849
|
</div>
|
1899
1850
|
<div class="requirement-verification">
|
1900
1851
|
<p id="_">The following code will be run for verification:</p>
|
@@ -1907,6 +1858,10 @@ RSpec.describe IsoDoc do
|
|
1907
1858
|
</body>
|
1908
1859
|
</html>
|
1909
1860
|
OUTPUT
|
1861
|
+
expect(xmlpp(IsoDoc::PresentationXMLConvert.new({})
|
1862
|
+
.convert("test", input, true))).to be_equivalent_to xmlpp(presxml)
|
1863
|
+
expect(xmlpp(IsoDoc::HtmlConvert.new({})
|
1864
|
+
.convert("test", presxml, true))).to be_equivalent_to xmlpp(output)
|
1910
1865
|
end
|
1911
1866
|
|
1912
1867
|
it "processes requirements in French" do
|
@@ -2078,12 +2033,16 @@ RSpec.describe IsoDoc do
|
|
2078
2033
|
</body>
|
2079
2034
|
</html>
|
2080
2035
|
OUTPUT
|
2081
|
-
expect(xmlpp(IsoDoc::PresentationXMLConvert.new({})
|
2082
|
-
|
2036
|
+
expect(xmlpp(IsoDoc::PresentationXMLConvert.new({})
|
2037
|
+
.convert("test", input, true))
|
2038
|
+
.sub(%r{<localized-strings>.*</localized-strings>}m, ""))
|
2039
|
+
.to be_equivalent_to xmlpp(presxml)
|
2040
|
+
expect(xmlpp(IsoDoc::HtmlConvert.new({})
|
2041
|
+
.convert("test", presxml, true))).to be_equivalent_to xmlpp(html)
|
2083
2042
|
end
|
2084
2043
|
|
2085
|
-
it "processes recommendation
|
2086
|
-
|
2044
|
+
it "processes recommendation" do
|
2045
|
+
input = <<~INPUT
|
2087
2046
|
<iso-standard xmlns="http://riboseinc.com/isoxml">
|
2088
2047
|
<preface><foreword>
|
2089
2048
|
<recommendation id="_" obligation="shall,could" keep-with-next="true" keep-lines-together="true">
|
@@ -2134,6 +2093,7 @@ RSpec.describe IsoDoc do
|
|
2134
2093
|
</foreword></preface>
|
2135
2094
|
</iso-standard>
|
2136
2095
|
INPUT
|
2096
|
+
presxml = <<~OUTPUT
|
2137
2097
|
<?xml version='1.0'?>
|
2138
2098
|
<iso-standard xmlns='http://riboseinc.com/isoxml' type="presentation">
|
2139
2099
|
<preface>
|
@@ -2178,17 +2138,15 @@ RSpec.describe IsoDoc do
|
|
2178
2138
|
</description>
|
2179
2139
|
<measurement-target exclude='false'>
|
2180
2140
|
<p id='_'>The measurement target shall be measured as:</p>
|
2181
|
-
<formula id='_'>
|
2182
|
-
<name>1</name>
|
2183
|
-
<stem type='AsciiMath'>r/1 = 0</stem>
|
2184
|
-
</formula>
|
2141
|
+
<formula id='_'><name>1</name><stem type='AsciiMath'>r/1 = 0</stem></formula>
|
2185
2142
|
</measurement-target>
|
2186
2143
|
<verification exclude='false'>
|
2187
2144
|
<p id='_'>The following code will be run for verification:</p>
|
2188
|
-
<sourcecode id='_'>
|
2189
|
-
|
2190
|
-
|
2191
|
-
|
2145
|
+
<sourcecode id='_'>CoreRoot(success): HttpResponse
|
2146
|
+
if (success)
|
2147
|
+
recommendation(label: success-response)
|
2148
|
+
end
|
2149
|
+
</sourcecode>
|
2192
2150
|
</verification>
|
2193
2151
|
<import exclude='true'>
|
2194
2152
|
<sourcecode id='_'>success-response()</sourcecode>
|
@@ -2198,61 +2156,8 @@ RSpec.describe IsoDoc do
|
|
2198
2156
|
</preface>
|
2199
2157
|
</iso-standard>
|
2200
2158
|
OUTPUT
|
2201
|
-
end
|
2202
2159
|
|
2203
|
-
|
2204
|
-
expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT")
|
2205
|
-
<iso-standard xmlns="http://riboseinc.com/isoxml">
|
2206
|
-
<preface><foreword>
|
2207
|
-
<recommendation id="_" obligation="shall,could" keep-with-next="true" keep-lines-together="true">
|
2208
|
-
<name>Recommendation 1</name>
|
2209
|
-
<label>/ogc/recommendation/wfs/2</label>
|
2210
|
-
<inherit>/ss/584/2015/level/1</inherit>
|
2211
|
-
<classification><tag>type</tag><value>text</value></classification>
|
2212
|
-
<classification><tag>language</tag><value>BASIC</value></classification>
|
2213
|
-
<subject>user</subject>
|
2214
|
-
<description>
|
2215
|
-
<p id="_">I recommend <em>this</em>.</p>
|
2216
|
-
</description>
|
2217
|
-
<specification exclude="true" type="tabular">
|
2218
|
-
<p id="_">This is the object of the recommendation:</p>
|
2219
|
-
<table id="_">
|
2220
|
-
<tbody>
|
2221
|
-
<tr>
|
2222
|
-
<td style="text-align:left;">Object</td>
|
2223
|
-
<td style="text-align:left;">Value</td>
|
2224
|
-
</tr>
|
2225
|
-
<tr>
|
2226
|
-
<td style="text-align:left;">Mission</td>
|
2227
|
-
<td style="text-align:left;">Accomplished</td>
|
2228
|
-
</tr>
|
2229
|
-
</tbody>
|
2230
|
-
</table>
|
2231
|
-
</specification>
|
2232
|
-
<description>
|
2233
|
-
<p id="_">As for the measurement targets,</p>
|
2234
|
-
</description>
|
2235
|
-
<measurement-target exclude="false">
|
2236
|
-
<p id="_">The measurement target shall be measured as:</p>
|
2237
|
-
<formula id="_">
|
2238
|
-
<stem type="AsciiMath">r/1 = 0</stem>
|
2239
|
-
</formula>
|
2240
|
-
</measurement-target>
|
2241
|
-
<verification exclude="false">
|
2242
|
-
<p id="_">The following code will be run for verification:</p>
|
2243
|
-
<sourcecode id="_">CoreRoot(success): HttpResponse
|
2244
|
-
if (success)
|
2245
|
-
recommendation(label: success-response)
|
2246
|
-
end
|
2247
|
-
</sourcecode>
|
2248
|
-
</verification>
|
2249
|
-
<import exclude="true">
|
2250
|
-
<sourcecode id="_">success-response()</sourcecode>
|
2251
|
-
</import>
|
2252
|
-
</recommendation>
|
2253
|
-
</foreword></preface>
|
2254
|
-
</iso-standard>
|
2255
|
-
INPUT
|
2160
|
+
output = <<~OUTPUT
|
2256
2161
|
#{HTML_HDR}
|
2257
2162
|
<br/>
|
2258
2163
|
<div>
|
@@ -2267,7 +2172,7 @@ RSpec.describe IsoDoc do
|
|
2267
2172
|
</div>
|
2268
2173
|
<div class="requirement-measurement-target">
|
2269
2174
|
<p id="_">The measurement target shall be measured as:</p>
|
2270
|
-
<div id="_"><div class="formula"><p><span class="stem">(#(r/1 = 0)#)</span
|
2175
|
+
<div id="_"><div class="formula"><p><span class="stem">(#(r/1 = 0)#)</span>  (1)</p></div></div>
|
2271
2176
|
</div>
|
2272
2177
|
<div class="requirement-verification">
|
2273
2178
|
<p id="_">The following code will be run for verification:</p>
|
@@ -2280,6 +2185,11 @@ RSpec.describe IsoDoc do
|
|
2280
2185
|
</body>
|
2281
2186
|
</html>
|
2282
2187
|
OUTPUT
|
2188
|
+
expect(xmlpp(IsoDoc::PresentationXMLConvert.new({})
|
2189
|
+
.convert("test", input, true))).to be_equivalent_to xmlpp(presxml)
|
2190
|
+
expect(xmlpp(IsoDoc::HtmlConvert.new({})
|
2191
|
+
.convert("test", presxml, true)))
|
2192
|
+
.to be_equivalent_to xmlpp(output)
|
2283
2193
|
end
|
2284
2194
|
|
2285
2195
|
it "processes pseudocode" do
|
@@ -2325,18 +2235,25 @@ RSpec.describe IsoDoc do
|
|
2325
2235
|
OUTPUT
|
2326
2236
|
|
2327
2237
|
FileUtils.rm_f "test.doc"
|
2328
|
-
expect(xmlpp(IsoDoc::PresentationXMLConvert.new({})
|
2329
|
-
|
2238
|
+
expect(xmlpp(IsoDoc::PresentationXMLConvert.new({})
|
2239
|
+
.convert("test", input, true))
|
2240
|
+
.sub(%r{<localized-strings>.*</localized-strings>}m, ""))
|
2241
|
+
.to be_equivalent_to xmlpp(presxml)
|
2242
|
+
expect(xmlpp(IsoDoc::HtmlConvert.new({})
|
2243
|
+
.convert("test", presxml, true))).to be_equivalent_to xmlpp(html)
|
2330
2244
|
IsoDoc::WordConvert.new({}).convert("test", presxml, false)
|
2331
|
-
expect(xmlpp(File.read("test.doc")
|
2332
|
-
|
2333
|
-
|
2334
|
-
|
2335
|
-
|
2245
|
+
expect(xmlpp(File.read("test.doc")
|
2246
|
+
.gsub(%r{^.*<h1 class="ForewordTitle">Foreword</h1>}m, "")
|
2247
|
+
.gsub(%r{</div>.*}m, "</div>")))
|
2248
|
+
.to be_equivalent_to xmlpp(<<~"OUTPUT")
|
2249
|
+
<div class="pseudocode" style='page-break-after: avoid;page-break-inside: avoid;'><a name="_" id="_"></a><p class="pseudocode"><a name="_" id="_"></a>  <b>A</b><br/>
|
2250
|
+
        <span style="font-variant:small-caps;">B</span></p>
|
2251
|
+
<p class="pseudocode" style="page-break-after:avoid;"><a name="_" id="_"></a>  <i>C</i></p><p class="SourceTitle" style="text-align:center;">Figure 1 — Label</p></div>
|
2252
|
+
OUTPUT
|
2336
2253
|
end
|
2337
2254
|
|
2338
2255
|
it "does not label embedded figures, sourcecode" do
|
2339
|
-
|
2256
|
+
input = <<~INPUT
|
2340
2257
|
<itu-standard xmlns="http://riboseinc.com/isoxml">
|
2341
2258
|
<bibdata>
|
2342
2259
|
<language>en</language>
|
@@ -2350,6 +2267,7 @@ RSpec.describe IsoDoc do
|
|
2350
2267
|
</example>
|
2351
2268
|
</preface></itu-standard>
|
2352
2269
|
INPUT
|
2270
|
+
output = <<~OUTPUT
|
2353
2271
|
#{HTML_HDR}
|
2354
2272
|
<br/>
|
2355
2273
|
<div>
|
@@ -2380,6 +2298,8 @@ RSpec.describe IsoDoc do
|
|
2380
2298
|
</body>
|
2381
2299
|
</html>
|
2382
2300
|
OUTPUT
|
2301
|
+
expect(xmlpp(IsoDoc::HtmlConvert.new({})
|
2302
|
+
.convert("test", input, true))).to be_equivalent_to xmlpp(output)
|
2383
2303
|
end
|
2384
2304
|
|
2385
2305
|
it "processes passthrough with compatible format" do
|
@@ -2391,35 +2311,42 @@ RSpec.describe IsoDoc do
|
|
2391
2311
|
</foreword></preface>
|
2392
2312
|
</iso-standard>
|
2393
2313
|
INPUT
|
2394
|
-
expect((File.read("test.html")
|
2395
|
-
|
2396
|
-
|
2314
|
+
expect((File.read("test.html")
|
2315
|
+
.gsub(%r{^.*<h1 class="ForewordTitle">Foreword</h1>}m, "")
|
2316
|
+
.gsub(%r{</div>.*}m, ""))).to be_equivalent_to xmlpp(<<~"OUTPUT")
|
2317
|
+
<A><i>Hello</i></A>
|
2318
|
+
OUTPUT
|
2397
2319
|
end
|
2398
2320
|
|
2399
2321
|
it "aborts if passthrough results in malformed XML" do
|
2400
2322
|
FileUtils.rm_f "test.html"
|
2401
2323
|
FileUtils.rm_f "test.html.err"
|
2402
2324
|
begin
|
2403
|
-
|
2325
|
+
input = <<~INPUT
|
2404
2326
|
<iso-standard xmlns="http://riboseinc.com/isoxml">
|
2405
2327
|
<preface><foreword>
|
2406
2328
|
<passthrough format="html,rfc"><A></passthrough><em>Hello</em>
|
2407
2329
|
</foreword></preface>
|
2408
2330
|
</iso-standard>
|
2409
2331
|
INPUT
|
2332
|
+
expect do
|
2333
|
+
IsoDoc::HtmlConvert.new({})
|
2334
|
+
.convert("test", input, false)
|
2335
|
+
end.to raise_error(SystemExit)
|
2410
2336
|
rescue SystemExit
|
2411
2337
|
end
|
2412
2338
|
expect(File.exist?("test.html.err")).to be true
|
2413
2339
|
end
|
2414
2340
|
|
2415
2341
|
it "ignores passthrough with incompatible format" do
|
2416
|
-
|
2342
|
+
input = <<~INPUT
|
2417
2343
|
<iso-standard xmlns="http://riboseinc.com/isoxml">
|
2418
2344
|
<preface><foreword>
|
2419
2345
|
<passthrough format="doc,rfc"><A></passthrough>
|
2420
2346
|
</foreword></preface>
|
2421
2347
|
</iso-standard>
|
2422
2348
|
INPUT
|
2349
|
+
output = <<~OUTPUT
|
2423
2350
|
#{HTML_HDR}
|
2424
2351
|
<br/>
|
2425
2352
|
<div>
|
@@ -2430,10 +2357,12 @@ RSpec.describe IsoDoc do
|
|
2430
2357
|
</body>
|
2431
2358
|
</html>
|
2432
2359
|
OUTPUT
|
2360
|
+
expect(xmlpp(IsoDoc::HtmlConvert.new({})
|
2361
|
+
.convert("test", input, true))).to be_equivalent_to xmlpp(output)
|
2433
2362
|
end
|
2434
2363
|
|
2435
2364
|
it "processes svgmap" do
|
2436
|
-
|
2365
|
+
input = <<~INPUT
|
2437
2366
|
<iso-standard xmlns="http://riboseinc.com/isoxml">
|
2438
2367
|
<sections>
|
2439
2368
|
<svgmap id='_'>
|
@@ -2469,6 +2398,7 @@ RSpec.describe IsoDoc do
|
|
2469
2398
|
</bibliography>
|
2470
2399
|
</iso-standard>
|
2471
2400
|
INPUT
|
2401
|
+
output = <<~OUTPUT
|
2472
2402
|
<iso-standard xmlns='http://riboseinc.com/isoxml' type='presentation'>
|
2473
2403
|
<sections>
|
2474
2404
|
<figure id='_'>
|
@@ -2487,5 +2417,159 @@ RSpec.describe IsoDoc do
|
|
2487
2417
|
</bibliography>
|
2488
2418
|
</iso-standard>
|
2489
2419
|
OUTPUT
|
2420
|
+
expect(xmlpp(IsoDoc::PresentationXMLConvert.new({})
|
2421
|
+
.convert("test", input, true))
|
2422
|
+
.sub(%r{<localized-strings>.*</localized-strings>}m, ""))
|
2423
|
+
.to be_equivalent_to xmlpp(output)
|
2424
|
+
end
|
2425
|
+
|
2426
|
+
it "processes toc" do
|
2427
|
+
input = <<~INPUT
|
2428
|
+
<standard-document xmlns='https://www.metanorma.org/ns/standoc' type='semantic' version='1.10.2'>
|
2429
|
+
<bibdata type='standard'>
|
2430
|
+
<title language='en' format='text/plain'>Document title</title>
|
2431
|
+
<language>en</language>
|
2432
|
+
<script>Latn</script>
|
2433
|
+
<status>
|
2434
|
+
<stage>published</stage>
|
2435
|
+
</status>
|
2436
|
+
<copyright>
|
2437
|
+
<from>2021</from>
|
2438
|
+
</copyright>
|
2439
|
+
<ext>
|
2440
|
+
<doctype>article</doctype>
|
2441
|
+
</ext>
|
2442
|
+
</bibdata>
|
2443
|
+
<sections>
|
2444
|
+
<clause id='clause1' inline-header='false' obligation='normative'>
|
2445
|
+
<title>Clause 1</title>
|
2446
|
+
<clause id='clause1A' inline-header='false' obligation='normative'>
|
2447
|
+
<title>Clause 1A</title>
|
2448
|
+
<clause id='clause1Aa' inline-header='false' obligation='normative'>
|
2449
|
+
<title>Clause 1Aa</title>
|
2450
|
+
</clause>
|
2451
|
+
<clause id='clause1Ab' inline-header='false' obligation='normative'>
|
2452
|
+
<title>Clause 1Ab</title>
|
2453
|
+
</clause>
|
2454
|
+
</clause>
|
2455
|
+
<clause id='clause1B' inline-header='false' obligation='normative'>
|
2456
|
+
<title>Clause 1B</title>
|
2457
|
+
<clause id='clause1Ba' inline-header='false' obligation='normative'>
|
2458
|
+
<title>Clause 1Ba</title>
|
2459
|
+
</clause>
|
2460
|
+
</clause>
|
2461
|
+
</clause>
|
2462
|
+
<clause id='clause2' inline-header='false' obligation='normative'>
|
2463
|
+
<title>Clause 2</title>
|
2464
|
+
<p id='A'>And introducing: </p>
|
2465
|
+
<toc>
|
2466
|
+
<ul id='B'>
|
2467
|
+
<li>
|
2468
|
+
<xref target='clause1A'>Clause 1A</xref>
|
2469
|
+
</li>
|
2470
|
+
<li>
|
2471
|
+
<ul id='C'>
|
2472
|
+
<li>
|
2473
|
+
<xref target='clause1Aa'>Clause 1Aa</xref>
|
2474
|
+
</li>
|
2475
|
+
<li>
|
2476
|
+
<xref target='clause1Ab'>Clause 1Ab</xref>
|
2477
|
+
</li>
|
2478
|
+
</ul>
|
2479
|
+
</li>
|
2480
|
+
<li>
|
2481
|
+
<xref target='clause1B'>Clause 1B</xref>
|
2482
|
+
</li>
|
2483
|
+
<li>
|
2484
|
+
<ul id='D'>
|
2485
|
+
<li>
|
2486
|
+
<xref target='clause1Ba'>Clause 1Ba</xref>
|
2487
|
+
</li>
|
2488
|
+
</ul>
|
2489
|
+
</li>
|
2490
|
+
</ul>
|
2491
|
+
</toc>
|
2492
|
+
<toc>
|
2493
|
+
<ul id='E'>
|
2494
|
+
<li>
|
2495
|
+
<xref target='clause1A'>Clause 1A</xref>
|
2496
|
+
</li>
|
2497
|
+
<li>
|
2498
|
+
<xref target='clause1B'>Clause 1B</xref>
|
2499
|
+
</li>
|
2500
|
+
</ul>
|
2501
|
+
</toc>
|
2502
|
+
</clause>
|
2503
|
+
</sections>
|
2504
|
+
</standard-document>
|
2505
|
+
INPUT
|
2506
|
+
output = <<~OUTPUT
|
2507
|
+
#{HTML_HDR}
|
2508
|
+
<p class='zzSTDTitle1'>Document title</p>
|
2509
|
+
<div id='clause1'>
|
2510
|
+
<h1>Clause 1</h1>
|
2511
|
+
<div id='clause1A'>
|
2512
|
+
<h2>Clause 1A</h2>
|
2513
|
+
<div id='clause1Aa'>
|
2514
|
+
<h3>Clause 1Aa</h3>
|
2515
|
+
</div>
|
2516
|
+
<div id='clause1Ab'>
|
2517
|
+
<h3>Clause 1Ab</h3>
|
2518
|
+
</div>
|
2519
|
+
</div>
|
2520
|
+
<div id='clause1B'>
|
2521
|
+
<h2>Clause 1B</h2>
|
2522
|
+
<div id='clause1Ba'>
|
2523
|
+
<h3>Clause 1Ba</h3>
|
2524
|
+
</div>
|
2525
|
+
</div>
|
2526
|
+
</div>
|
2527
|
+
<div id='clause2'>
|
2528
|
+
<h1>Clause 2</h1>
|
2529
|
+
<p id='A'>And introducing: </p>
|
2530
|
+
<div class='toc'>
|
2531
|
+
<ul id='B'>
|
2532
|
+
<li>
|
2533
|
+
<a href='#clause1A'>Clause 1A</a>
|
2534
|
+
</li>
|
2535
|
+
<li>
|
2536
|
+
<ul id='C'>
|
2537
|
+
<li>
|
2538
|
+
<a href='#clause1Aa'>Clause 1Aa</a>
|
2539
|
+
</li>
|
2540
|
+
<li>
|
2541
|
+
<a href='#clause1Ab'>Clause 1Ab</a>
|
2542
|
+
</li>
|
2543
|
+
</ul>
|
2544
|
+
</li>
|
2545
|
+
<li>
|
2546
|
+
<a href='#clause1B'>Clause 1B</a>
|
2547
|
+
</li>
|
2548
|
+
<li>
|
2549
|
+
<ul id='D'>
|
2550
|
+
<li>
|
2551
|
+
<a href='#clause1Ba'>Clause 1Ba</a>
|
2552
|
+
</li>
|
2553
|
+
</ul>
|
2554
|
+
</li>
|
2555
|
+
</ul>
|
2556
|
+
</div>
|
2557
|
+
<div class='toc'>
|
2558
|
+
<ul id='E'>
|
2559
|
+
<li>
|
2560
|
+
<a href='#clause1A'>Clause 1A</a>
|
2561
|
+
</li>
|
2562
|
+
<li>
|
2563
|
+
<a href='#clause1B'>Clause 1B</a>
|
2564
|
+
</li>
|
2565
|
+
</ul>
|
2566
|
+
</div>
|
2567
|
+
</div>
|
2568
|
+
</div>
|
2569
|
+
</body>
|
2570
|
+
</html>
|
2571
|
+
OUTPUT
|
2572
|
+
expect(xmlpp(IsoDoc::HtmlConvert.new({})
|
2573
|
+
.convert("test", input, true))).to be_equivalent_to xmlpp(output)
|
2490
2574
|
end
|
2491
2575
|
end
|