metanorma-standoc 1.8.6 → 1.9.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.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/.rubocop.yml +5 -3
  4. data/Gemfile.devel +0 -0
  5. data/lib/asciidoctor/standoc/base.rb +41 -36
  6. data/lib/asciidoctor/standoc/biblio.rng +4 -6
  7. data/lib/asciidoctor/standoc/blocks.rb +44 -14
  8. data/lib/asciidoctor/standoc/blocks_notes.rb +41 -24
  9. data/lib/asciidoctor/standoc/cleanup.rb +33 -78
  10. data/lib/asciidoctor/standoc/cleanup_block.rb +77 -62
  11. data/lib/asciidoctor/standoc/cleanup_boilerplate.rb +51 -29
  12. data/lib/asciidoctor/standoc/cleanup_footnotes.rb +1 -0
  13. data/lib/asciidoctor/standoc/cleanup_image.rb +71 -0
  14. data/lib/asciidoctor/standoc/cleanup_maths.rb +37 -28
  15. data/lib/asciidoctor/standoc/cleanup_ref.rb +24 -15
  16. data/lib/asciidoctor/standoc/cleanup_ref_dl.rb +1 -1
  17. data/lib/asciidoctor/standoc/cleanup_reqt.rb +47 -0
  18. data/lib/asciidoctor/standoc/cleanup_section.rb +21 -15
  19. data/lib/asciidoctor/standoc/converter.rb +10 -3
  20. data/lib/asciidoctor/standoc/datamodel/plantuml_renderer.rb +67 -66
  21. data/lib/asciidoctor/standoc/front.rb +35 -18
  22. data/lib/asciidoctor/standoc/front_contributor.rb +5 -5
  23. data/lib/asciidoctor/standoc/inline.rb +1 -1
  24. data/lib/asciidoctor/standoc/isodoc.rng +304 -1
  25. data/lib/asciidoctor/standoc/lists.rb +4 -2
  26. data/lib/asciidoctor/standoc/macros.rb +50 -23
  27. data/lib/asciidoctor/standoc/macros_form.rb +63 -0
  28. data/lib/asciidoctor/standoc/ref.rb +87 -112
  29. data/lib/asciidoctor/standoc/ref_date_id.rb +62 -0
  30. data/lib/asciidoctor/standoc/ref_sect.rb +22 -19
  31. data/lib/asciidoctor/standoc/section.rb +3 -1
  32. data/lib/asciidoctor/standoc/terms.rb +27 -16
  33. data/lib/asciidoctor/standoc/utils.rb +35 -9
  34. data/lib/asciidoctor/standoc/validate.rb +30 -28
  35. data/lib/metanorma-standoc.rb +0 -1
  36. data/lib/metanorma/standoc/version.rb +5 -5
  37. data/metanorma-standoc.gemspec +11 -11
  38. data/spec/asciidoctor/base_spec.rb +78 -8
  39. data/spec/asciidoctor/blocks_spec.rb +832 -727
  40. data/spec/asciidoctor/cleanup_sections_spec.rb +52 -15
  41. data/spec/asciidoctor/cleanup_spec.rb +1860 -1874
  42. data/spec/asciidoctor/inline_spec.rb +272 -273
  43. data/spec/asciidoctor/isobib_cache_spec.rb +406 -358
  44. data/spec/asciidoctor/macros_spec.rb +539 -437
  45. data/spec/asciidoctor/macros_yaml2text_spec.rb +1 -1
  46. data/spec/asciidoctor/refs_spec.rb +135 -7
  47. data/spec/asciidoctor/section_spec.rb +743 -690
  48. data/spec/assets/html-override.css +1 -0
  49. data/spec/assets/word-override.css +1 -0
  50. data/spec/spec_helper.rb +11 -9
  51. data/spec/vcr_cassettes/dated_iso_ref_joint_iso_iec.yml +60 -60
  52. data/spec/vcr_cassettes/isobib_get_123.yml +14 -14
  53. data/spec/vcr_cassettes/isobib_get_123_1.yml +30 -30
  54. data/spec/vcr_cassettes/isobib_get_123_1_fr.yml +42 -42
  55. data/spec/vcr_cassettes/isobib_get_123_2001.yml +15 -15
  56. data/spec/vcr_cassettes/isobib_get_124.yml +15 -15
  57. data/spec/vcr_cassettes/rfcbib_get_rfc8341.yml +14 -14
  58. data/spec/vcr_cassettes/separates_iev_citations_by_top_level_clause.yml +53 -49
  59. metadata +72 -68
  60. data/.rubocop.ribose.yml +0 -66
  61. data/.rubocop.tb.yml +0 -650
  62. data/spec/asciidoctor/macros_lutaml_spec.rb +0 -80
@@ -1,6 +1,6 @@
1
1
  require "spec_helper"
2
2
 
3
- RSpec.describe 'Yaml2Text macros' do
3
+ RSpec.describe "Yaml2Text macros" do
4
4
  it_behaves_like "structured data 2 text preprocessor" do
5
5
  let(:extention) { "yaml" }
6
6
  def transform_to_type(data)
@@ -3,7 +3,7 @@ require "relaton_iso"
3
3
  require "relaton_ietf"
4
4
 
5
5
  RSpec.describe Asciidoctor::Standoc do
6
- it "processes simple ISO reference" do
6
+ it "processes simple ISO reference" do
7
7
  expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :standoc, header_footer: true)))).to be_equivalent_to xmlpp( <<~"OUTPUT")
8
8
  #{ASCIIDOC_BLANK_HDR}
9
9
  [bibliography]
@@ -99,8 +99,8 @@ RSpec.describe Asciidoctor::Standoc do
99
99
  end
100
100
 
101
101
  it "repairs simple fetched ISO reference" do
102
- mock_isobib_get_123_no_docid
103
- mock_isobib_get_123_no_docid_lbl
102
+ mock_isobib_get_123_no_docid(2)
103
+ mock_isobib_get_123_no_docid_lbl(2)
104
104
  input = <<~"INPUT"
105
105
  #{ISOBIB_BLANK_HDR}
106
106
 
@@ -1770,6 +1770,134 @@ OUTPUT
1770
1770
  OUTPUT
1771
1771
  end
1772
1772
 
1773
+ it "overrides normative status of bibliographies" do
1774
+ mock_isobib_get_123_no_docid(1)
1775
+ mock_isobib_get_123_no_docid_lbl(1)
1776
+ expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :standoc, header_footer: true)))).to be_equivalent_to xmlpp( <<~"OUTPUT")
1777
+ #{ISOBIB_BLANK_HDR}
1778
+ [bibliography,normative=false]
1779
+ == Normative References
1780
+
1781
+ * [[[iso123,ISO 123]]] _Standard_
1782
+
1783
+ [bibliography,normative=true]
1784
+ == Bibliography
1785
+
1786
+ * [[[iso124,(1)ISO 123]]] _Standard_
1787
+ INPUT
1788
+ #{BLANK_HDR}
1789
+ <sections> </sections>
1790
+ <bibliography>
1791
+ <references id='_' normative='false' obligation='informative'>
1792
+ <title>Bibliography</title>
1793
+ <bibitem type='standard' id='iso123'>
1794
+ <uri type='src'>https://www.iso.org/standard/23281.html</uri>
1795
+ <uri type='obp'>https://www.iso.org/obp/ui/#!iso:std:23281:en</uri>
1796
+ <uri type='rss'>https://www.iso.org/contents/data/standard/02/32/23281.detail.rss</uri>
1797
+ <date type='published'>
1798
+ <on>2001</on>
1799
+ </date>
1800
+ <contributor>
1801
+ <role type='publisher'/>
1802
+ <organization>
1803
+ <name>International Organization for Standardization</name>
1804
+ <abbreviation>ISO</abbreviation>
1805
+ <uri>www.iso.org</uri>
1806
+ </organization>
1807
+ </contributor>
1808
+ <edition>3</edition>
1809
+ <language>en</language>
1810
+ <language>fr</language>
1811
+ <script>Latn</script>
1812
+ <status>
1813
+ <stage>Published</stage>
1814
+ </status>
1815
+ <copyright>
1816
+ <from>2001</from>
1817
+ <owner>
1818
+ <organization>
1819
+ <name>ISO</name>
1820
+ <abbreviation/>
1821
+ </organization>
1822
+ </owner>
1823
+ </copyright>
1824
+ <relation type='obsoletes'>
1825
+ <bibitem type='standard'>
1826
+ <formattedref format='text/plain'>ISO 123:1985</formattedref>
1827
+ </bibitem>
1828
+ </relation>
1829
+ <relation type='updates'>
1830
+ <bibitem type='standard'>
1831
+ <formattedref format='text/plain'>ISO 123:2001</formattedref>
1832
+ </bibitem>
1833
+ </relation>
1834
+ <docidentifier>ISO 123</docidentifier>
1835
+ <title>
1836
+ <em>Standard</em>
1837
+ </title>
1838
+ </bibitem>
1839
+ </references>
1840
+ <references id='_' normative='true' obligation='informative'>
1841
+ <title>Normative references</title>
1842
+ <p id='_'>
1843
+ The following documents are referred to in the text in such a way that
1844
+ some or all of their content constitutes requirements of this document.
1845
+ For dated references, only the edition cited applies. For undated
1846
+ references, the latest edition of the referenced document (including any
1847
+ amendments) applies.
1848
+ </p>
1849
+ <bibitem type='standard' id='iso124'>
1850
+ <uri type='src'>https://www.iso.org/standard/23281.html</uri>
1851
+ <uri type='obp'>https://www.iso.org/obp/ui/#!iso:std:23281:en</uri>
1852
+ <uri type='rss'>https://www.iso.org/contents/data/standard/02/32/23281.detail.rss</uri>
1853
+ <date type='published'>
1854
+ <on>2001</on>
1855
+ </date>
1856
+ <contributor>
1857
+ <role type='publisher'/>
1858
+ <organization>
1859
+ <name>International Organization for Standardization</name>
1860
+ <abbreviation>ISO</abbreviation>
1861
+ <uri>www.iso.org</uri>
1862
+ </organization>
1863
+ </contributor>
1864
+ <edition>3</edition>
1865
+ <language>en</language>
1866
+ <language>fr</language>
1867
+ <script>Latn</script>
1868
+ <status>
1869
+ <stage>Published</stage>
1870
+ </status>
1871
+ <copyright>
1872
+ <from>2001</from>
1873
+ <owner>
1874
+ <organization>
1875
+ <name>ISO</name>
1876
+ <abbreviation/>
1877
+ </organization>
1878
+ </owner>
1879
+ </copyright>
1880
+ <relation type='obsoletes'>
1881
+ <bibitem type='standard'>
1882
+ <formattedref format='text/plain'>ISO 123:1985</formattedref>
1883
+ </bibitem>
1884
+ </relation>
1885
+ <relation type='updates'>
1886
+ <bibitem type='standard'>
1887
+ <formattedref format='text/plain'>ISO 123:2001</formattedref>
1888
+ </bibitem>
1889
+ </relation>
1890
+ <docidentifier>ISO 123</docidentifier>
1891
+ <docidentifier type='metanorma'>[1]</docidentifier>
1892
+ <title>
1893
+ <em>Standard</em>
1894
+ </title>
1895
+ </bibitem>
1896
+ </references>
1897
+ </bibliography>
1898
+ </standard-document>
1899
+ OUTPUT
1900
+ end
1773
1901
 
1774
1902
  private
1775
1903
 
@@ -1781,20 +1909,20 @@ OUTPUT
1781
1909
  end
1782
1910
  end
1783
1911
 
1784
- def mock_isobib_get_123_no_docid
1912
+ def mock_isobib_get_123_no_docid(n)
1785
1913
  expect(RelatonIso::IsoBibliography).to receive(:get).with("ISO 123", nil, {:lang=>"en", :title=>"<em>Standard</em>", usrlbl: nil}) do
1786
1914
  RelatonBib::XMLParser.from_xml(<<~"OUTPUT")
1787
1915
  <bibitem type=\"standard\" id=\"ISO123\">\n <uri type=\"src\">https://www.iso.org/standard/23281.html</uri>\n <uri type=\"obp\">https://www.iso.org/obp/ui/#!iso:std:23281:en</uri>\n <uri type=\"rss\">https://www.iso.org/contents/data/standard/02/32/23281.detail.rss</uri>\n <date type=\"published\">\n <on>2001</on>\n </date>\n <contributor>\n <role type=\"publisher\"/>\n <organization>\n <name>International Organization for Standardization</name>\n <abbreviation>ISO</abbreviation>\n <uri>www.iso.org</uri>\n </organization>\n </contributor>\n <edition>3</edition>\n <language>en</language>\n <language>fr</language>\n <script>Latn</script>\n <status><stage>Published</stage></status>\n <copyright>\n <from>2001</from>\n <owner>\n <organization>\n <name>ISO</name>\n <abbreviation></abbreviation>\n </organization>\n </owner>\n </copyright>\n <relation type=\"obsoletes\">\n <bibitem type="standard">\n <formattedref format="text/plain">ISO 123:1985</formattedref>\n </bibitem>\n </relation>\n <relation type=\"updates\">\n <bibitem type="standard">\n <formattedref format="text/plain">ISO 123:2001</formattedref>\n </bibitem>\n </relation>\n</bibitem>
1788
1916
  OUTPUT
1789
- end.exactly(2).times
1917
+ end.exactly(n).times
1790
1918
  end
1791
1919
 
1792
- def mock_isobib_get_123_no_docid_lbl
1920
+ def mock_isobib_get_123_no_docid_lbl(n)
1793
1921
  expect(RelatonIso::IsoBibliography).to receive(:get).with("ISO 123", nil, {:lang=>"en", :title=>"<em>Standard</em>", usrlbl: "(1)"}) do
1794
1922
  RelatonBib::XMLParser.from_xml(<<~"OUTPUT")
1795
1923
  <bibitem type=\"standard\" id=\"ISO123\">\n <uri type=\"src\">https://www.iso.org/standard/23281.html</uri>\n <uri type=\"obp\">https://www.iso.org/obp/ui/#!iso:std:23281:en</uri>\n <uri type=\"rss\">https://www.iso.org/contents/data/standard/02/32/23281.detail.rss</uri>\n <date type=\"published\">\n <on>2001</on>\n </date>\n <contributor>\n <role type=\"publisher\"/>\n <organization>\n <name>International Organization for Standardization</name>\n <abbreviation>ISO</abbreviation>\n <uri>www.iso.org</uri>\n </organization>\n </contributor>\n <edition>3</edition>\n <language>en</language>\n <language>fr</language>\n <script>Latn</script>\n <status><stage>Published</stage></status>\n <copyright>\n <from>2001</from>\n <owner>\n <organization>\n <name>ISO</name>\n <abbreviation></abbreviation>\n </organization>\n </owner>\n </copyright>\n <relation type=\"obsoletes\">\n <bibitem type="standard">\n <formattedref format="text/plain">ISO 123:1985</formattedref>\n </bibitem>\n </relation>\n <relation type=\"updates\">\n <bibitem type="standard">\n <formattedref format="text/plain">ISO 123:2001</formattedref>\n </bibitem>\n </relation>\n</bibitem>
1796
1924
  OUTPUT
1797
- end.exactly(2).times
1925
+ end.exactly(n).times
1798
1926
  end
1799
1927
 
1800
1928
  def mock_isobib_get_124
@@ -2,7 +2,7 @@ require "spec_helper"
2
2
 
3
3
  RSpec.describe Asciidoctor::Standoc do
4
4
  it "processes sections" do
5
- expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :standoc, header_footer: true)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
5
+ input = <<~INPUT
6
6
  #{ASCIIDOC_BLANK_HDR}
7
7
  .Foreword
8
8
 
@@ -18,7 +18,7 @@ RSpec.describe Asciidoctor::Standoc do
18
18
  === Introduction Subsection
19
19
 
20
20
  == Acknowledgements
21
-
21
+
22
22
  [.preface]
23
23
  == Dedication
24
24
 
@@ -95,116 +95,115 @@ RSpec.describe Asciidoctor::Standoc do
95
95
  [index,type=thematic]
96
96
  == Thematic Index
97
97
  INPUT
98
- #{BLANK_HDR.sub(/<status>/, "<abstract> <p>Text</p> </abstract><status>")}
99
- <preface><abstract id="_">
100
- <title>Abstract</title>
101
- <p id="_">Text</p>
102
- </abstract><foreword id='_' obligation="informative">
103
- <title>Foreword</title>
104
- <p id="_">Text</p>
105
- </foreword><introduction id="_" obligation="informative">
106
- <title>Introduction</title>
107
- <clause id="_" inline-header="false" obligation="informative">
108
- <title>Introduction Subsection</title>
109
- </clause>
110
- </introduction>
111
- <clause id='_' inline-header='false' obligation='informative'>
112
- <title>Dedication</title>
113
- </clause>
114
- <acknowledgements id='_' obligation='informative'>
115
- <title>Acknowledgements</title>
116
- </acknowledgements>
117
- </preface><sections>
118
-
119
-
120
- <clause id="_" inline-header="false" obligation="normative" type="scope">
121
- <title>Scope</title>
122
- <p id="_">Text</p>
123
- </clause>
124
-
125
- <terms id="_" obligation="normative">
126
- <title>Terms and definitions</title>
127
- <p id="_">For the purposes of this document,
128
- the following terms and definitions apply.</p>
129
- <term id="term-term1">
130
- <preferred>Term1</preferred>
131
- </term>
132
- </terms>
133
- <clause id="_" obligation="normative"><title>Terms, definitions, symbols and abbreviated terms</title>
134
- <p id='_'>Boilerplate text</p>
135
- <clause id="_" inline-header="false" obligation="normative">
136
- <title>Introduction</title>
137
- <clause id="_" inline-header="false" obligation="normative">
138
- <title>Intro 1</title>
139
- </clause>
140
- </clause>
141
- <terms id="_" obligation="normative">
142
- <title>Intro 2</title>
143
- <clause id="_" inline-header="false" obligation="normative">
144
- <title>Intro 3</title>
145
- </clause>
146
- </terms>
147
- <clause id="_" obligation="normative">
148
- <title>Intro 4</title>
149
- <terms id="_" obligation="normative">
150
- <title>Intro 5</title>
151
- <term id="term-term1-1">
152
- <preferred>Term1</preferred>
153
- </term>
154
- </terms>
155
- </clause>
156
- <terms id="_" obligation="normative">
157
- <title>Normal Terms</title>
158
- <term id="term-term2">
159
- <preferred>Term2</preferred>
160
- </term>
161
- </terms>
162
- <definitions id="_" obligation="normative"><title>Symbols and abbreviated terms</title><clause id="_" inline-header="false" obligation="normative">
163
- <title>General</title>
164
- </clause>
165
- <definitions id="_" obligation="normative" type="symbols">
166
- <title>Symbols</title>
167
- </definitions></definitions></clause>
168
- <definitions id="_" obligation="normative" type="abbreviated_terms">
169
- <title>Abbreviated terms</title>
170
- </definitions>
171
- <clause id="_" inline-header="false" obligation="normative"><title>Clause 4</title><clause id="_" inline-header="false" obligation="normative">
172
- <title>Introduction</title>
173
- </clause>
174
- <clause id="_" inline-header="false" obligation="normative">
175
- <title>Clause 4.2</title>
176
- </clause></clause>
177
- <clause id="_" inline-header="false" obligation="normative">
178
- <title>Terms and Definitions</title>
179
- </clause>
180
-
181
- </sections><annex id="_" inline-header="false" obligation="normative">
182
- <title>Annex</title>
183
- <clause id="_" inline-header="false" obligation="normative">
184
- <title>Annex A.1</title>
185
- </clause>
186
- </annex><bibliography><references id="_" obligation="informative" normative="true">
187
- <title>Normative references</title>
188
- <p id="_">There are no normative references in this document.</p>
189
- </references><clause id="_" obligation="informative">
190
- <title>Bibliography</title>
191
- <references id="_" obligation="informative" normative="false">
192
- <title>Bibliography Subsection</title>
193
- </references>
194
- </clause></bibliography>
195
- <indexsect id='_'>
196
- <title>Index</title>
197
- <p id='_'>This is an index</p>
198
- </indexsect>
199
- <indexsect id='_' type='thematic'>
200
- <title>Thematic Index</title>
201
- </indexsect>
202
- </standard-document>
98
+ output = <<~OUTPUT
99
+ #{BLANK_HDR.sub(/<status>/, '<abstract> <p>Text</p> </abstract><status>')}
100
+ <preface><abstract id="_">
101
+ <title>Abstract</title>
102
+ <p id="_">Text</p>
103
+ </abstract><foreword id='_' obligation="informative">
104
+ <title>Foreword</title>
105
+ <p id="_">Text</p>
106
+ </foreword><introduction id="_" obligation="informative">
107
+ <title>Introduction</title>
108
+ <clause id="_" inline-header="false" obligation="informative">
109
+ <title>Introduction Subsection</title>
110
+ </clause>
111
+ </introduction>
112
+ <clause id='_' inline-header='false' obligation='informative'>
113
+ <title>Dedication</title>
114
+ </clause>
115
+ <acknowledgements id='_' obligation='informative'>
116
+ <title>Acknowledgements</title>
117
+ </acknowledgements>
118
+ </preface><sections>
119
+ <clause id="_" inline-header="false" obligation="normative" type="scope">
120
+ <title>Scope</title>
121
+ <p id="_">Text</p>
122
+ </clause>
123
+ <terms id="_" obligation="normative">
124
+ <title>Terms and definitions</title>
125
+ <p id="_">For the purposes of this document,
126
+ the following terms and definitions apply.</p>
127
+ <term id="term-term1">
128
+ <preferred>Term1</preferred>
129
+ </term>
130
+ </terms>
131
+ <clause id="_" obligation="normative"><title>Terms, definitions, symbols and abbreviated terms</title>
132
+ <p id='_'>Boilerplate text</p>
133
+ <clause id="_" inline-header="false" obligation="normative">
134
+ <title>Introduction</title>
135
+ <clause id="_" inline-header="false" obligation="normative">
136
+ <title>Intro 1</title>
137
+ </clause>
138
+ </clause>
139
+ <terms id="_" obligation="normative">
140
+ <title>Intro 2</title>
141
+ <clause id="_" inline-header="false" obligation="normative">
142
+ <title>Intro 3</title>
143
+ </clause>
144
+ </terms>
145
+ <clause id="_" obligation="normative">
146
+ <title>Intro 4</title>
147
+ <terms id="_" obligation="normative">
148
+ <title>Intro 5</title>
149
+ <term id="term-term1-1">
150
+ <preferred>Term1</preferred>
151
+ </term>
152
+ </terms>
153
+ </clause>
154
+ <terms id="_" obligation="normative">
155
+ <title>Normal Terms</title>
156
+ <term id="term-term2">
157
+ <preferred>Term2</preferred>
158
+ </term>
159
+ </terms>
160
+ <definitions id="_" obligation="normative"><title>Symbols and abbreviated terms</title><clause id="_" inline-header="false" obligation="normative">
161
+ <title>General</title>
162
+ </clause>
163
+ <definitions id="_" obligation="normative" type="symbols">
164
+ <title>Symbols</title>
165
+ </definitions></definitions></clause>
166
+ <definitions id="_" obligation="normative" type="abbreviated_terms">
167
+ <title>Abbreviated terms</title>
168
+ </definitions>
169
+ <clause id="_" inline-header="false" obligation="normative"><title>Clause 4</title><clause id="_" inline-header="false" obligation="normative">
170
+ <title>Introduction</title>
171
+ </clause>
172
+ <clause id="_" inline-header="false" obligation="normative">
173
+ <title>Clause 4.2</title>
174
+ </clause></clause>
175
+ <clause id="_" inline-header="false" obligation="normative">
176
+ <title>Terms and Definitions</title>
177
+ </clause>
178
+ </sections><annex id="_" inline-header="false" obligation="normative">
179
+ <title>Annex</title>
180
+ <clause id="_" inline-header="false" obligation="normative">
181
+ <title>Annex A.1</title>
182
+ </clause>
183
+ </annex><bibliography><references id="_" obligation="informative" normative="true">
184
+ <title>Normative references</title>
185
+ <p id="_">There are no normative references in this document.</p>
186
+ </references><clause id="_" obligation="informative">
187
+ <title>Bibliography</title>
188
+ <references id="_" obligation="informative" normative="false">
189
+ <title>Bibliography Subsection</title>
190
+ </references>
191
+ </clause></bibliography>
192
+ <indexsect id='_'>
193
+ <title>Index</title>
194
+ <p id='_'>This is an index</p>
195
+ </indexsect>
196
+ <indexsect id='_' type='thematic'>
197
+ <title>Thematic Index</title>
198
+ </indexsect>
199
+ </standard-document>
203
200
  OUTPUT
201
+ expect(xmlpp(strip_guid(Asciidoctor.convert(input, backend: :standoc, header_footer: true))))
202
+ .to be_equivalent_to xmlpp(output)
204
203
  end
205
204
 
206
- it "processes sections with number attributes" do
207
- expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :standoc, header_footer: true)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
205
+ it "processes sections with number attributes" do
206
+ input = <<~INPUT
208
207
  #{ASCIIDOC_BLANK_HDR}
209
208
  [number=1bis]
210
209
  == Scope
@@ -268,81 +267,84 @@ RSpec.describe Asciidoctor::Standoc do
268
267
  [number=20bis]
269
268
  === Bibliography Subsection
270
269
  INPUT
271
- #{BLANK_HDR}
272
- <sections>
273
- <clause id='_' number='1bis' type='scope' inline-header='false' obligation='normative'>
274
- <title>Scope</title>
275
- <p id='_'>Text</p>
276
- </clause>
277
- <terms id='_' number='3bis' obligation='normative'>
278
- <title>Terms and definitions</title>
279
- <p id='_'>For the purposes of this document, the following terms and definitions apply.</p>
280
- <term id='term-term1' number='4bis'>
281
- <preferred>Term1</preferred>
282
- </term>
283
- </terms>
284
- <terms id='_' number='5bis' obligation='normative'>
285
- <title>Terms, definitions, symbols and abbreviated terms</title>
286
- <p id='_'>For the purposes of this document, the following terms and definitions apply.</p>
287
- <clause id='_' number='6bis' inline-header='false' obligation='normative'>
288
- <title>Introduction</title>
289
- <clause id='_' number='7bis' inline-header='false' obligation='normative'>
290
- <title>Intro 1</title>
291
- </clause>
270
+ output = <<~OUTPUT
271
+ #{BLANK_HDR}
272
+ <sections>
273
+ <clause id='_' number='1bis' type='scope' inline-header='false' obligation='normative'>
274
+ <title>Scope</title>
275
+ <p id='_'>Text</p>
292
276
  </clause>
293
- <term id='term-intro-2' number='8bis'>
294
- <preferred>Intro 2</preferred>
295
- </term>
296
- <definitions id='_' number='9bis' obligation='normative'>
297
- <title>Symbols and abbreviated terms</title>
298
- <clause id='_' number='10bis' inline-header='false' obligation='normative'>
299
- <title>General</title>
277
+ <terms id='_' number='3bis' obligation='normative'>
278
+ <title>Terms and definitions</title>
279
+ <p id='_'>For the purposes of this document, the following terms and definitions apply.</p>
280
+ <term id='term-term1' number='4bis'>
281
+ <preferred>Term1</preferred>
282
+ </term>
283
+ </terms>
284
+ <terms id='_' number='5bis' obligation='normative'>
285
+ <title>Terms, definitions, symbols and abbreviated terms</title>
286
+ <p id='_'>For the purposes of this document, the following terms and definitions apply.</p>
287
+ <clause id='_' number='6bis' inline-header='false' obligation='normative'>
288
+ <title>Introduction</title>
289
+ <clause id='_' number='7bis' inline-header='false' obligation='normative'>
290
+ <title>Intro 1</title>
291
+ </clause>
300
292
  </clause>
301
- <definitions id='_' number='11bis' type='symbols' obligation='normative'>
302
- <title>Symbols</title>
293
+ <term id='term-intro-2' number='8bis'>
294
+ <preferred>Intro 2</preferred>
295
+ </term>
296
+ <definitions id='_' number='9bis' obligation='normative'>
297
+ <title>Symbols and abbreviated terms</title>
298
+ <clause id='_' number='10bis' inline-header='false' obligation='normative'>
299
+ <title>General</title>
300
+ </clause>
301
+ <definitions id='_' number='11bis' type='symbols' obligation='normative'>
302
+ <title>Symbols</title>
303
+ </definitions>
303
304
  </definitions>
305
+ </terms>
306
+ <definitions id='_' number='12bis' type='abbreviated_terms' obligation='normative'>
307
+ <title>Abbreviated terms</title>
304
308
  </definitions>
305
- </terms>
306
- <definitions id='_' number='12bis' type='abbreviated_terms' obligation='normative'>
307
- <title>Abbreviated terms</title>
308
- </definitions>
309
- <clause id='_' number='13bis' inline-header='false' obligation='normative'>
310
- <title>Clause 4</title>
311
- <clause id='_' number='14bis' inline-header='false' obligation='normative'>
312
- <title>Introduction</title>
309
+ <clause id='_' number='13bis' inline-header='false' obligation='normative'>
310
+ <title>Clause 4</title>
311
+ <clause id='_' number='14bis' inline-header='false' obligation='normative'>
312
+ <title>Introduction</title>
313
+ </clause>
314
+ <clause id='_' number='15bis' inline-header='false' obligation='normative'>
315
+ <title>Clause 4.2</title>
316
+ </clause>
313
317
  </clause>
314
- <clause id='_' number='15bis' inline-header='false' obligation='normative'>
315
- <title>Clause 4.2</title>
318
+ <clause id='_' number='16bis' inline-header='false' obligation='normative'>
319
+ <title>Terms and Definitions</title>
316
320
  </clause>
317
- </clause>
318
- <clause id='_' number='16bis' inline-header='false' obligation='normative'>
319
- <title>Terms and Definitions</title>
320
- </clause>
321
- </sections>
322
- <annex id='_' number='17bis' inline-header='false' obligation='normative'>
323
- <title>Annex</title>
324
- <clause id='_' number='18bis' inline-header='false' obligation='normative'>
325
- <title>Annex A.1</title>
326
- </clause>
327
- </annex>
328
- <bibliography>
329
- <references id='_' number='2bis' normative='true' obligation='informative'>
330
- <title>Normative references</title>
331
- <p id='_'>There are no normative references in this document.</p>
332
- </references>
333
- <clause id='_' number='19bis' obligation='informative'>
334
- <title>Bibliography</title>
335
- <references id='_' number='20bis' normative='false' obligation='informative'>
336
- <title>Bibliography Subsection</title>
321
+ </sections>
322
+ <annex id='_' number='17bis' inline-header='false' obligation='normative'>
323
+ <title>Annex</title>
324
+ <clause id='_' number='18bis' inline-header='false' obligation='normative'>
325
+ <title>Annex A.1</title>
326
+ </clause>
327
+ </annex>
328
+ <bibliography>
329
+ <references id='_' number='2bis' normative='true' obligation='informative'>
330
+ <title>Normative references</title>
331
+ <p id='_'>There are no normative references in this document.</p>
337
332
  </references>
338
- </clause>
339
- </bibliography>
340
- </standard-document>
341
- OUTPUT
342
- end
333
+ <clause id='_' number='19bis' obligation='informative'>
334
+ <title>Bibliography</title>
335
+ <references id='_' number='20bis' normative='false' obligation='informative'>
336
+ <title>Bibliography Subsection</title>
337
+ </references>
338
+ </clause>
339
+ </bibliography>
340
+ </standard-document>
341
+ OUTPUT
342
+ expect(xmlpp(strip_guid(Asciidoctor.convert(input, backend: :standoc, header_footer: true))))
343
+ .to be_equivalent_to xmlpp(output)
344
+ end
343
345
 
344
- it "processes sections with language and script attributes" do
345
- expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :standoc, header_footer: true)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
346
+ it "processes sections with language and script attributes" do
347
+ input = <<~INPUT
346
348
  #{ASCIIDOC_BLANK_HDR}
347
349
  [language=en,script=Latn]
348
350
  == Foreword
@@ -446,109 +448,108 @@ RSpec.describe Asciidoctor::Standoc do
446
448
  [language=en,script=Latn]
447
449
  === Bibliography Subsection
448
450
  INPUT
449
- #{BLANK_HDR.sub(/<status>/, "<abstract> <p>Text</p> </abstract><status>")}
450
- <preface><abstract id="_" language="en" script="Latn">
451
- <title>Abstract</title>
452
- <p id="_">Text</p>
453
- </abstract><foreword id='_' language='en' script='Latn' obligation='informative'>
454
- <title>Foreword</title>
455
- <p id="_">Text</p>
456
- </foreword><introduction id="_" language="en" script="Latn" obligation="informative">
457
- <title>Introduction</title>
458
- <clause id="_" language="en" script="Latn" inline-header="false" obligation="informative">
459
- <title>Introduction Subsection</title>
460
- </clause>
461
- </introduction>
462
- <clause id='_' language='en' script='Latn' inline-header='false' obligation='informative'>
463
- <title>Dedication</title>
464
- </clause>
465
- <acknowledgements id='_' language='en' script='Latn' obligation='informative'>
466
- <title>Acknowledgements</title>
467
- </acknowledgements>
468
- </preface><sections>
469
-
470
-
471
- <clause id="_" language="en" script="Latn" inline-header="false" obligation="normative" type="scope">
472
- <title>Scope</title>
473
- <p id="_">Text</p>
474
- </clause>
475
-
476
- <terms id="_" language="en" script="Latn" obligation="normative">
477
- <title>Terms and definitions</title>
478
- <p id="_">For the purposes of this document,
479
- the following terms and definitions apply.</p>
480
- <term id="term-term1" language="en" script="Latn">
481
- <preferred>Term1</preferred>
482
- </term>
483
- </terms>
484
- <clause id="_" language="en" script="Latn" obligation="normative"><title>Terms, definitions, symbols and abbreviated terms</title>
485
- <p id='_'>For the purposes of this document, the following terms and definitions apply.</p>
486
- <clause id="_" language="en" script="Latn" inline-header="false" obligation="normative">
487
- <title>Introduction</title>
488
- <clause id="_" inline-header="false" obligation="normative">
489
- <title>Intro 1</title>
490
- </clause>
491
- </clause>
492
- <terms id="_" language="en" script="Latn" obligation="normative">
493
- <title>Intro 2</title>
494
- <clause id="_" language="en" script="Latn" inline-header="false" obligation="normative">
495
- <title>Intro 3</title>
496
- </clause>
497
- </terms>
498
- <clause id="_" language="en" script="Latn" obligation="normative">
499
- <title>Intro 4</title>
500
- <terms id="_" language="en" script="Latn" obligation="normative">
501
- <title>Intro 5</title>
502
- <term id="term-term1-1">
503
- <preferred>Term1</preferred>
504
- </term>
505
- </terms>
506
- </clause>
507
- <terms id="_" language="en" script="Latn" obligation="normative">
508
- <title>Normal Terms</title>
509
- <term id="term-term2">
510
- <preferred>Term2</preferred>
511
- </term>
512
- </terms>
513
- <definitions id="_" language="en" script="Latn" obligation="normative"><title>Symbols and abbreviated terms</title><clause id="_" language="en" script="Latn" inline-header="false" obligation="normative">
514
- <title>General</title>
515
- </clause>
516
- <definitions id="_" obligation="normative" type="symbols">
517
- <title>Symbols</title>
518
- </definitions></definitions></clause>
519
- <definitions id="_" language="en" script="Latn" obligation="normative" type="abbreviated_terms">
520
- <title>Abbreviated terms</title>
521
- </definitions>
522
- <clause id="_" language="en" script="Latn" inline-header="false" obligation="normative"><title>Clause 4</title><clause id="_" language="en" script="Latn" inline-header="false" obligation="normative">
523
- <title>Introduction</title>
524
- </clause>
525
- <clause id="_" language="en" script="Latn" inline-header="false" obligation="normative">
526
- <title>Clause 4.2</title>
527
- </clause></clause>
528
- <clause id="_" language="en" script="Latn" inline-header="false" obligation="normative">
529
- <title>Terms and Definitions</title>
530
- </clause>
531
-
532
- </sections><annex id="_" language="en" script="Latn" inline-header="false" obligation="normative">
533
- <title>Annex</title>
534
- <clause id="_" language="en" script="Latn" inline-header="false" obligation="normative">
535
- <title>Annex A.1</title>
536
- </clause>
537
- </annex><bibliography><references id="_" language="en" script="Latn" obligation="informative" normative="true">
538
- <title>Normative references</title>
539
- <p id="_">There are no normative references in this document.</p>
540
- </references><clause id="_" language="en" script="Latn" obligation="informative">
541
- <title>Bibliography</title>
542
- <references id="_" language="en" script="Latn" obligation="informative" normative="false">
543
- <title>Bibliography Subsection</title>
544
- </references>
545
- </clause></bibliography>
546
- </standard-document>
451
+ output = <<~OUTPUT
452
+ #{BLANK_HDR.sub(/<status>/, '<abstract> <p>Text</p> </abstract><status>')}
453
+ <preface><abstract id="_" language="en" script="Latn">
454
+ <title>Abstract</title>
455
+ <p id="_">Text</p>
456
+ </abstract><foreword id='_' language='en' script='Latn' obligation='informative'>
457
+ <title>Foreword</title>
458
+ <p id="_">Text</p>
459
+ </foreword><introduction id="_" language="en" script="Latn" obligation="informative">
460
+ <title>Introduction</title>
461
+ <clause id="_" language="en" script="Latn" inline-header="false" obligation="informative">
462
+ <title>Introduction Subsection</title>
463
+ </clause>
464
+ </introduction>
465
+ <clause id='_' language='en' script='Latn' inline-header='false' obligation='informative'>
466
+ <title>Dedication</title>
467
+ </clause>
468
+ <acknowledgements id='_' language='en' script='Latn' obligation='informative'>
469
+ <title>Acknowledgements</title>
470
+ </acknowledgements>
471
+ </preface><sections>
472
+ <clause id="_" language="en" script="Latn" inline-header="false" obligation="normative" type="scope">
473
+ <title>Scope</title>
474
+ <p id="_">Text</p>
475
+ </clause>
476
+ <terms id="_" language="en" script="Latn" obligation="normative">
477
+ <title>Terms and definitions</title>
478
+ <p id="_">For the purposes of this document,
479
+ the following terms and definitions apply.</p>
480
+ <term id="term-term1" language="en" script="Latn">
481
+ <preferred>Term1</preferred>
482
+ </term>
483
+ </terms>
484
+ <clause id="_" language="en" script="Latn" obligation="normative"><title>Terms, definitions, symbols and abbreviated terms</title>
485
+ <p id='_'>For the purposes of this document, the following terms and definitions apply.</p>
486
+ <clause id="_" language="en" script="Latn" inline-header="false" obligation="normative">
487
+ <title>Introduction</title>
488
+ <clause id="_" inline-header="false" obligation="normative">
489
+ <title>Intro 1</title>
490
+ </clause>
491
+ </clause>
492
+ <terms id="_" language="en" script="Latn" obligation="normative">
493
+ <title>Intro 2</title>
494
+ <clause id="_" language="en" script="Latn" inline-header="false" obligation="normative">
495
+ <title>Intro 3</title>
496
+ </clause>
497
+ </terms>
498
+ <clause id="_" language="en" script="Latn" obligation="normative">
499
+ <title>Intro 4</title>
500
+ <terms id="_" language="en" script="Latn" obligation="normative">
501
+ <title>Intro 5</title>
502
+ <term id="term-term1-1">
503
+ <preferred>Term1</preferred>
504
+ </term>
505
+ </terms>
506
+ </clause>
507
+ <terms id="_" language="en" script="Latn" obligation="normative">
508
+ <title>Normal Terms</title>
509
+ <term id="term-term2">
510
+ <preferred>Term2</preferred>
511
+ </term>
512
+ </terms>
513
+ <definitions id="_" language="en" script="Latn" obligation="normative"><title>Symbols and abbreviated terms</title><clause id="_" language="en" script="Latn" inline-header="false" obligation="normative">
514
+ <title>General</title>
515
+ </clause>
516
+ <definitions id="_" obligation="normative" type="symbols">
517
+ <title>Symbols</title>
518
+ </definitions></definitions></clause>
519
+ <definitions id="_" language="en" script="Latn" obligation="normative" type="abbreviated_terms">
520
+ <title>Abbreviated terms</title>
521
+ </definitions>
522
+ <clause id="_" language="en" script="Latn" inline-header="false" obligation="normative"><title>Clause 4</title><clause id="_" language="en" script="Latn" inline-header="false" obligation="normative">
523
+ <title>Introduction</title>
524
+ </clause>
525
+ <clause id="_" language="en" script="Latn" inline-header="false" obligation="normative">
526
+ <title>Clause 4.2</title>
527
+ </clause></clause>
528
+ <clause id="_" language="en" script="Latn" inline-header="false" obligation="normative">
529
+ <title>Terms and Definitions</title>
530
+ </clause>
531
+ </sections><annex id="_" language="en" script="Latn" inline-header="false" obligation="normative">
532
+ <title>Annex</title>
533
+ <clause id="_" language="en" script="Latn" inline-header="false" obligation="normative">
534
+ <title>Annex A.1</title>
535
+ </clause>
536
+ </annex><bibliography><references id="_" language="en" script="Latn" obligation="informative" normative="true">
537
+ <title>Normative references</title>
538
+ <p id="_">There are no normative references in this document.</p>
539
+ </references><clause id="_" language="en" script="Latn" obligation="informative">
540
+ <title>Bibliography</title>
541
+ <references id="_" language="en" script="Latn" obligation="informative" normative="false">
542
+ <title>Bibliography Subsection</title>
543
+ </references>
544
+ </clause></bibliography>
545
+ </standard-document>
547
546
  OUTPUT
548
- end
547
+ expect(xmlpp(strip_guid(Asciidoctor.convert(input, backend: :standoc, header_footer: true))))
548
+ .to be_equivalent_to xmlpp(output)
549
+ end
549
550
 
550
551
  it "processes sections with title and type attributes" do
551
- expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :standoc, header_footer: true)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
552
+ input = <<~INPUT
552
553
  #{ASCIIDOC_BLANK_HDR}
553
554
  .Foreword
554
555
 
@@ -606,84 +607,87 @@ RSpec.describe Asciidoctor::Standoc do
606
607
 
607
608
  === Bibliography Subsection
608
609
  INPUT
609
- #{BLANK_HDR.sub(/<status>/, "<abstract> <p>Text</p> </abstract><status>")}
610
- <preface>
611
- <abstract id='_'>
612
- <title>Abstract</title>
613
- <p id='_'>Text</p>
614
- </abstract>
615
- <foreword id='_' obligation='informative'>
616
- <title>Foreword</title>
617
- <p id='_'>Text</p>
618
- </foreword>
619
- <introduction id='_' obligation='informative'>
620
- <title>Introduction</title>
621
- <clause id='_' inline-header='false' obligation='informative'>
622
- <title>Introduction Subsection</title>
623
- </clause>
624
- </introduction>
625
- <acknowledgements id='_' obligation='informative'>
626
- <title>Acknowledgements</title>
627
- </acknowledgements>
628
- </preface>
629
- <sections>
630
- <terms id='_' obligation='normative'>
631
- <title>Terms and definitions</title>
632
- <p id="_">For the purposes of this document, the following terms and definitions apply.</p>
633
- <term id='term-term1'>
634
- <preferred>Term1</preferred>
635
- </term>
636
- </terms>
637
- <clause id='_' obligation='normative'>
638
- <title>Terms, definitions and symbols</title>
639
- <p id='_'>For the purposes of this document, the following terms and definitions apply.</p>
640
- <terms id='_' obligation='normative'>
641
- <title>Normal Terms</title>
642
- <term id='term-term2'>
643
- <preferred>Term2</preferred>
644
- </term>
645
- </terms>
646
- <definitions id='_' obligation="normative" type="symbols">
647
- <title>Symbols</title>
648
- </definitions>
649
- </clause>
650
- <definitions id='_' obligation="normative" type="abbreviated_terms">
651
- <title>Abbreviated terms</title>
652
- </definitions>
653
- <clause id='_' inline-header='false' obligation='normative' type="ABC">
654
- <title>Clause 4</title>
655
- <clause id='_' inline-header='false' obligation='normative' type="DEF">
656
- <title>Introduction</title>
657
- </clause>
658
- <clause id='_' inline-header='false' obligation='normative'>
659
- <title>Clause 4.2</title>
660
- </clause>
661
- </clause>
662
- </sections>
663
- <annex id='_' inline-header='false' obligation='normative'>
664
- <title>Annex</title>
665
- <clause id='_' inline-header='false' obligation='normative'>
666
- <title>Annex A.1</title>
667
- </clause>
668
- </annex>
669
- <bibliography>
670
- <references id='_' obligation='informative' normative="true">
671
- <title>Normative references</title>
672
- <p id="_">There are no normative references in this document.</p>
673
- </references>
674
- <clause id='_' obligation='informative'>
675
- <title>Bibliography</title>
676
- <references id='_' obligation='informative' normative="false">
677
- <title>Bibliography Subsection</title>
678
- </references>
679
- </clause>
680
- </bibliography>
681
- </standard-document>
610
+ output = <<~OUTPUT
611
+ #{BLANK_HDR.sub(/<status>/, '<abstract> <p>Text</p> </abstract><status>')}
612
+ <preface>
613
+ <abstract id='_'>
614
+ <title>Abstract</title>
615
+ <p id='_'>Text</p>
616
+ </abstract>
617
+ <foreword id='_' obligation='informative'>
618
+ <title>Foreword</title>
619
+ <p id='_'>Text</p>
620
+ </foreword>
621
+ <introduction id='_' obligation='informative'>
622
+ <title>Introduction</title>
623
+ <clause id='_' inline-header='false' obligation='informative'>
624
+ <title>Introduction Subsection</title>
625
+ </clause>
626
+ </introduction>
627
+ <acknowledgements id='_' obligation='informative'>
628
+ <title>Acknowledgements</title>
629
+ </acknowledgements>
630
+ </preface>
631
+ <sections>
632
+ <terms id='_' obligation='normative'>
633
+ <title>Terms and definitions</title>
634
+ <p id="_">For the purposes of this document, the following terms and definitions apply.</p>
635
+ <term id='term-term1'>
636
+ <preferred>Term1</preferred>
637
+ </term>
638
+ </terms>
639
+ <clause id='_' obligation='normative'>
640
+ <title>Terms, definitions and symbols</title>
641
+ <p id='_'>For the purposes of this document, the following terms and definitions apply.</p>
642
+ <terms id='_' obligation='normative'>
643
+ <title>Normal Terms</title>
644
+ <term id='term-term2'>
645
+ <preferred>Term2</preferred>
646
+ </term>
647
+ </terms>
648
+ <definitions id='_' obligation="normative" type="symbols">
649
+ <title>Symbols</title>
650
+ </definitions>
651
+ </clause>
652
+ <definitions id='_' obligation="normative" type="abbreviated_terms">
653
+ <title>Abbreviated terms</title>
654
+ </definitions>
655
+ <clause id='_' inline-header='false' obligation='normative' type="ABC">
656
+ <title>Clause 4</title>
657
+ <clause id='_' inline-header='false' obligation='normative' type="DEF">
658
+ <title>Introduction</title>
659
+ </clause>
660
+ <clause id='_' inline-header='false' obligation='normative'>
661
+ <title>Clause 4.2</title>
662
+ </clause>
663
+ </clause>
664
+ </sections>
665
+ <annex id='_' inline-header='false' obligation='normative'>
666
+ <title>Annex</title>
667
+ <clause id='_' inline-header='false' obligation='normative'>
668
+ <title>Annex A.1</title>
669
+ </clause>
670
+ </annex>
671
+ <bibliography>
672
+ <references id='_' obligation='informative' normative="true">
673
+ <title>Normative references</title>
674
+ <p id="_">There are no normative references in this document.</p>
675
+ </references>
676
+ <clause id='_' obligation='informative'>
677
+ <title>Bibliography</title>
678
+ <references id='_' obligation='informative' normative="false">
679
+ <title>Bibliography Subsection</title>
680
+ </references>
681
+ </clause>
682
+ </bibliography>
683
+ </standard-document>
682
684
  OUTPUT
685
+ expect(xmlpp(strip_guid(Asciidoctor.convert(input, backend: :standoc, header_footer: true))))
686
+ .to be_equivalent_to xmlpp(output)
683
687
  end
684
688
 
685
689
  it "varies terms & symbols title" do
686
- expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :standoc, header_footer: true)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
690
+ input = <<~INPUT
687
691
  #{ASCIIDOC_BLANK_HDR}
688
692
  [heading="terms, definitions, symbols and abbreviated terms"]
689
693
  == Terms, Definitions, Symbols Section
@@ -692,56 +696,61 @@ RSpec.describe Asciidoctor::Standoc do
692
696
 
693
697
  === Symbols
694
698
 
695
- INPUT
696
- #{BLANK_HDR}
697
- <sections>
698
- <terms id='_' obligation='normative'>
699
- <title>Terms, definitions and symbols</title>
700
- <p id='_'>For the purposes of this document, the following terms and definitions apply.</p>
701
- <term id='term-term'>
702
- <preferred>Term</preferred>
703
- </term>
704
- <definitions id='_' obligation="normative" type="symbols">
705
- <title>Symbols</title>
706
- </definitions>
707
- </terms>
708
- </sections>
709
- </standard-document>
710
- OUTPUT
711
- end
699
+ INPUT
700
+ output = <<~OUTPUT
701
+ #{BLANK_HDR}
702
+ <sections>
703
+ <terms id='_' obligation='normative'>
704
+ <title>Terms, definitions and symbols</title>
705
+ <p id='_'>For the purposes of this document, the following terms and definitions apply.</p>
706
+ <term id='term-term'>
707
+ <preferred>Term</preferred>
708
+ </term>
709
+ <definitions id='_' obligation="normative" type="symbols">
710
+ <title>Symbols</title>
711
+ </definitions>
712
+ </terms>
713
+ </sections>
714
+ </standard-document>
715
+ OUTPUT
716
+ expect(xmlpp(strip_guid(Asciidoctor.convert(input, backend: :standoc, header_footer: true))))
717
+ .to be_equivalent_to xmlpp(output)
718
+ end
712
719
 
713
720
  it "varies terms & abbreviated terms title" do
714
- expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :standoc, header_footer: true)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
721
+ input = <<~INPUT
715
722
  #{ASCIIDOC_BLANK_HDR}
716
723
  [heading="terms, definitions, symbols and abbreviated terms"]
717
724
  == Terms, Definitions, Abbreviated Terms Section
718
725
 
719
726
  === Term
720
-
727
+
721
728
  [heading="abbreviated terms"]
722
729
  === Symbols
723
730
 
724
- INPUT
731
+ INPUT
732
+ output = <<~OUTPUT
725
733
  #{BLANK_HDR}
726
- <sections>
727
- <terms id='_' obligation='normative'>
728
- <title>Terms, definitions and abbreviated terms</title>
729
- <p id='_'>For the purposes of this document, the following terms and definitions apply.</p>
730
- <term id='term-term'>
731
- <preferred>Term</preferred>
732
- </term>
733
- <definitions id='_' obligation="normative" type="abbreviated_terms">
734
- <title>Abbreviated terms</title>
735
- </definitions>
736
- </terms>
737
- </sections>
738
- </standard-document>
739
- OUTPUT
740
- end
741
-
734
+ <sections>
735
+ <terms id='_' obligation='normative'>
736
+ <title>Terms, definitions and abbreviated terms</title>
737
+ <p id='_'>For the purposes of this document, the following terms and definitions apply.</p>
738
+ <term id='term-term'>
739
+ <preferred>Term</preferred>
740
+ </term>
741
+ <definitions id='_' obligation="normative" type="abbreviated_terms">
742
+ <title>Abbreviated terms</title>
743
+ </definitions>
744
+ </terms>
745
+ </sections>
746
+ </standard-document>
747
+ OUTPUT
748
+ expect(xmlpp(strip_guid(Asciidoctor.convert(input, backend: :standoc, header_footer: true))))
749
+ .to be_equivalent_to xmlpp(output)
750
+ end
742
751
 
743
752
  it "processes section obligations" do
744
- expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :standoc, header_footer: true)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
753
+ input = <<~INPUT
745
754
  #{ASCIIDOC_BLANK_HDR}
746
755
  [obligation=informative]
747
756
  == Clause 1
@@ -753,26 +762,29 @@ RSpec.describe Asciidoctor::Standoc do
753
762
 
754
763
  [appendix,obligation=informative]
755
764
  == Annex
756
- INPUT
757
- #{BLANK_HDR}
758
- <sections><clause id="_" inline-header="false" obligation="informative">
759
- <title>Clause 1</title>
760
- <clause id="_" inline-header="false" obligation="informative">
761
- <title>Clause 1a</title>
762
- </clause>
763
- </clause>
764
- <clause id="_" inline-header="false" obligation="normative">
765
- <title>Clause 2</title>
766
- </clause>
767
- </sections><annex id="_" inline-header="false" obligation="informative">
768
- <title>Annex</title>
769
- </annex>
770
- </standard-document>
771
- OUTPUT
765
+ INPUT
766
+ output = <<~OUTPUT
767
+ #{BLANK_HDR}
768
+ <sections><clause id="_" inline-header="false" obligation="informative">
769
+ <title>Clause 1</title>
770
+ <clause id="_" inline-header="false" obligation="informative">
771
+ <title>Clause 1a</title>
772
+ </clause>
773
+ </clause>
774
+ <clause id="_" inline-header="false" obligation="normative">
775
+ <title>Clause 2</title>
776
+ </clause>
777
+ </sections><annex id="_" inline-header="false" obligation="informative">
778
+ <title>Annex</title>
779
+ </annex>
780
+ </standard-document>
781
+ OUTPUT
782
+ expect(xmlpp(strip_guid(Asciidoctor.convert(input, backend: :standoc, header_footer: true))))
783
+ .to be_equivalent_to xmlpp(output)
772
784
  end
773
785
 
774
- it "processes inline headers" do
775
- expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :standoc, header_footer: true)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
786
+ it "processes inline headers" do
787
+ input = <<~INPUT
776
788
  #{ASCIIDOC_BLANK_HDR}
777
789
  == Clause 1
778
790
 
@@ -784,46 +796,52 @@ RSpec.describe Asciidoctor::Standoc do
784
796
 
785
797
  [%inline-header]
786
798
  === Clause Aa
787
- INPUT
788
- #{BLANK_HDR}
789
- <sections><clause id="_" inline-header="false" obligation="normative">
790
- <title>Clause 1</title>
791
- <clause id="_" inline-header="true" obligation="normative">
792
- <title>Clause 1a</title>
793
- </clause>
794
- </clause>
795
- </sections><annex id="_" inline-header="false" obligation="normative">
796
- <title>Annex A</title>
797
- <clause id="_" inline-header="true" obligation="normative">
798
- <title>Clause Aa</title>
799
- </clause>
800
- </annex>
801
- </standard-document>
802
- OUTPUT
803
- end
799
+ INPUT
800
+ output = <<~OUTPUT
801
+ #{BLANK_HDR}
802
+ <sections><clause id="_" inline-header="false" obligation="normative">
803
+ <title>Clause 1</title>
804
+ <clause id="_" inline-header="true" obligation="normative">
805
+ <title>Clause 1a</title>
806
+ </clause>
807
+ </clause>
808
+ </sections><annex id="_" inline-header="false" obligation="normative">
809
+ <title>Annex A</title>
810
+ <clause id="_" inline-header="true" obligation="normative">
811
+ <title>Clause Aa</title>
812
+ </clause>
813
+ </annex>
814
+ </standard-document>
815
+ OUTPUT
816
+ expect(xmlpp(strip_guid(Asciidoctor.convert(input, backend: :standoc, header_footer: true))))
817
+ .to be_equivalent_to xmlpp(output)
818
+ end
804
819
 
805
820
  it "processes blank headers" do
806
- expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :standoc, header_footer: true)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
821
+ input = <<~INPUT
807
822
  #{ASCIIDOC_BLANK_HDR}
808
823
  == Clause 1
809
824
 
810
825
  === {blank}
811
826
 
812
- INPUT
813
- #{BLANK_HDR}
814
- <sections>
815
- <clause id="_" inline-header="false" obligation="normative">
816
- <title>Clause 1</title>
817
- <clause id="_" inline-header="false" obligation="normative">
818
- </clause>
819
- </clause>
820
- </sections>
821
- </standard-document>
822
- OUTPUT
827
+ INPUT
828
+ output = <<~OUTPUT
829
+ #{BLANK_HDR}
830
+ <sections>
831
+ <clause id="_" inline-header="false" obligation="normative">
832
+ <title>Clause 1</title>
833
+ <clause id="_" inline-header="false" obligation="normative">
834
+ </clause>
835
+ </clause>
836
+ </sections>
837
+ </standard-document>
838
+ OUTPUT
839
+ expect(xmlpp(strip_guid(Asciidoctor.convert(input, backend: :standoc, header_footer: true))))
840
+ .to be_equivalent_to xmlpp(output)
823
841
  end
824
842
 
825
- it "processes terminal nodes in terms with term subsection names" do
826
- expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :standoc, header_footer: true)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
843
+ it "processes terminal nodes in terms with term subsection names" do
844
+ input = <<~INPUT
827
845
  #{ASCIIDOC_BLANK_HDR}
828
846
 
829
847
  == Terms, definitions, symbols and abbreviated terms
@@ -832,27 +850,29 @@ RSpec.describe Asciidoctor::Standoc do
832
850
 
833
851
  === Symbols
834
852
 
835
- INPUT
836
- #{BLANK_HDR}
837
- <sections>
838
- <terms id='_' obligation='normative'>
839
- <title>Terms, definitions and symbols</title>
840
- <p id='_'>No terms and definitions are listed in this document.</p>
841
- <clause id='_' inline-header='false' obligation='normative'>
842
- <title>Terms and definitions</title>
843
- </clause>
844
- <definitions id='_' obligation="normative" type="symbols">
845
- <title>Symbols</title>
846
- </definitions>
847
- </terms>
848
- </sections>
849
- </standard-document>
850
- OUTPUT
851
- end
852
-
853
-
854
- it "processes terms & definitions with external source" do
855
- expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :standoc, header_footer: true)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
853
+ INPUT
854
+ output = <<~OUTPUT
855
+ #{BLANK_HDR}
856
+ <sections>
857
+ <terms id='_' obligation='normative'>
858
+ <title>Terms, definitions and symbols</title>
859
+ <p id='_'>No terms and definitions are listed in this document.</p>
860
+ <clause id='_' inline-header='false' obligation='normative'>
861
+ <title>Terms and definitions</title>
862
+ </clause>
863
+ <definitions id='_' obligation="normative" type="symbols">
864
+ <title>Symbols</title>
865
+ </definitions>
866
+ </terms>
867
+ </sections>
868
+ </standard-document>
869
+ OUTPUT
870
+ expect(xmlpp(strip_guid(Asciidoctor.convert(input, backend: :standoc, header_footer: true))))
871
+ .to be_equivalent_to xmlpp(output)
872
+ end
873
+
874
+ it "processes terms & definitions with external source" do
875
+ input = <<~INPUT
856
876
  #{ASCIIDOC_BLANK_HDR}
857
877
 
858
878
  Foreword
@@ -862,27 +882,29 @@ RSpec.describe Asciidoctor::Standoc do
862
882
 
863
883
  === Term1
864
884
 
865
- INPUT
866
- #{BLANK_HDR}
867
- <termdocsource bibitemid="iso1234"/><termdocsource bibitemid="iso5678"/>
868
- <preface><foreword id='_' obligation="informative">
869
- <title>Foreword</title>
870
- <p id="_">Foreword</p>
871
- </foreword></preface><sections>
872
- <terms id="_" obligation="normative">
873
- <title>Terms and definitions</title><p id="_">For the purposes of this document, the terms and definitions
874
- given in <eref bibitemid="iso1234"/> and <eref bibitemid="iso5678"/> and the following apply.</p>
875
- <term id="term-term1">
876
- <preferred>Term1</preferred>
877
- </term>
878
- </terms></sections>
879
- </standard-document>
880
-
881
- OUTPUT
882
- end
883
-
884
- it "processes empty terms & definitions" do
885
- expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :standoc, header_footer: true)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
885
+ INPUT
886
+ output = <<~OUTPUT
887
+ #{BLANK_HDR}
888
+ <termdocsource bibitemid="iso1234"/><termdocsource bibitemid="iso5678"/>
889
+ <preface><foreword id='_' obligation="informative">
890
+ <title>Foreword</title>
891
+ <p id="_">Foreword</p>
892
+ </foreword></preface><sections>
893
+ <terms id="_" obligation="normative">
894
+ <title>Terms and definitions</title><p id="_">For the purposes of this document, the terms and definitions
895
+ given in <eref bibitemid="iso1234"/> and <eref bibitemid="iso5678"/> and the following apply.</p>
896
+ <term id="term-term1">
897
+ <preferred>Term1</preferred>
898
+ </term>
899
+ </terms></sections>
900
+ </standard-document>
901
+ OUTPUT
902
+ expect(xmlpp(strip_guid(Asciidoctor.convert(input, backend: :standoc, header_footer: true))))
903
+ .to be_equivalent_to xmlpp(output)
904
+ end
905
+
906
+ it "processes empty terms & definitions" do
907
+ input = <<~INPUT
886
908
  #{ASCIIDOC_BLANK_HDR}
887
909
 
888
910
  Foreword
@@ -890,23 +912,25 @@ RSpec.describe Asciidoctor::Standoc do
890
912
  == Terms and Definitions
891
913
 
892
914
 
893
- INPUT
894
- #{BLANK_HDR}
895
- <preface><foreword id='_' obligation="informative">
896
- <title>Foreword</title>
897
- <p id="_">Foreword</p>
898
- </foreword></preface><sections>
899
- <terms id="_" obligation="normative">
900
- <title>Terms and definitions</title><p id="_">No terms and definitions are listed in this document.</p>
901
- </terms></sections>
902
- </standard-document>
903
-
904
- OUTPUT
905
- end
915
+ INPUT
916
+ output = <<~OUTPUT
917
+ #{BLANK_HDR}
918
+ <preface><foreword id='_' obligation="informative">
919
+ <title>Foreword</title>
920
+ <p id="_">Foreword</p>
921
+ </foreword></preface><sections>
922
+ <terms id="_" obligation="normative">
923
+ <title>Terms and definitions</title><p id="_">No terms and definitions are listed in this document.</p>
924
+ </terms></sections>
925
+ </standard-document>
906
926
 
927
+ OUTPUT
928
+ expect(xmlpp(strip_guid(Asciidoctor.convert(input, backend: :standoc, header_footer: true))))
929
+ .to be_equivalent_to xmlpp(output)
930
+ end
907
931
 
908
- it "processes empty terms & definitions with external source" do
909
- expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :standoc, header_footer: true)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
932
+ it "processes empty terms & definitions with external source" do
933
+ input = <<~INPUT
910
934
  #{ASCIIDOC_BLANK_HDR}
911
935
 
912
936
  Foreword
@@ -914,27 +938,27 @@ RSpec.describe Asciidoctor::Standoc do
914
938
  [source="iso1234,iso5678"]
915
939
  == Terms and Definitions
916
940
 
917
- INPUT
918
- #{BLANK_HDR}
919
- <termdocsource bibitemid="iso1234"/><termdocsource bibitemid="iso5678"/>
920
- <preface><foreword id='_' obligation="informative">
921
- <title>Foreword</title>
922
- <p id="_">Foreword</p>
923
- </foreword></preface><sections>
924
- <terms id="_" obligation="normative">
925
- <title>Terms and definitions</title>
926
- <p id="_">For the purposes of this document,
927
- the terms and definitions given in <eref bibitemid="iso1234"/> and <eref bibitemid="iso5678"/> apply.</p>
928
-
929
-
930
- </terms></sections>
931
- </standard-document>
932
-
933
- OUTPUT
934
- end
941
+ INPUT
942
+ output = <<~OUTPUT
943
+ #{BLANK_HDR}
944
+ <termdocsource bibitemid="iso1234"/><termdocsource bibitemid="iso5678"/>
945
+ <preface><foreword id='_' obligation="informative">
946
+ <title>Foreword</title>
947
+ <p id="_">Foreword</p>
948
+ </foreword></preface><sections>
949
+ <terms id="_" obligation="normative">
950
+ <title>Terms and definitions</title>
951
+ <p id="_">For the purposes of this document,
952
+ the terms and definitions given in <eref bibitemid="iso1234"/> and <eref bibitemid="iso5678"/> apply.</p>
953
+ </terms></sections>
954
+ </standard-document>
955
+ OUTPUT
956
+ expect(xmlpp(strip_guid(Asciidoctor.convert(input, backend: :standoc, header_footer: true))))
957
+ .to be_equivalent_to xmlpp(output)
958
+ end
935
959
 
936
- it "processes term document sources in French" do
937
- expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :standoc, header_footer: true)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
960
+ it "processes term document sources in French" do
961
+ input = <<~INPUT
938
962
  = Document title
939
963
  Author
940
964
  :docfile: test.adoc
@@ -948,26 +972,26 @@ RSpec.describe Asciidoctor::Standoc do
948
972
  [source="iso1234,iso5678"]
949
973
  == Terms and Definitions
950
974
 
951
- INPUT
952
- #{BLANK_HDR.sub(%r{<language>en</language>}, "<language>fr</language>")}
953
- <termdocsource bibitemid="iso1234"/><termdocsource bibitemid="iso5678"/>
954
- <preface><foreword id='_' obligation="informative">
955
- <title>Avant-propos</title>
956
- <p id="_">Foreword</p>
957
- </foreword></preface><sections>
958
- <terms id="_" obligation="normative">
959
- <title>Terms et définitions</title>
960
- <p id="_">Pour les besoins du présent document, les termes et définitions de <eref bibitemid="iso1234"/> et <eref bibitemid="iso5678"/> s’appliquent.</p>
961
-
962
-
963
- </terms></sections>
964
- </standard-document>
965
-
966
- OUTPUT
967
- end
975
+ INPUT
976
+ output = <<~OUTPUT
977
+ #{BLANK_HDR.sub(%r{<language>en</language>}, '<language>fr</language>')}
978
+ <termdocsource bibitemid="iso1234"/><termdocsource bibitemid="iso5678"/>
979
+ <preface><foreword id='_' obligation="informative">
980
+ <title>Avant-propos</title>
981
+ <p id="_">Foreword</p>
982
+ </foreword></preface><sections>
983
+ <terms id="_" obligation="normative">
984
+ <title>Terms et définitions</title>
985
+ <p id="_">Pour les besoins du présent document, les termes et définitions de <eref bibitemid="iso1234"/> et <eref bibitemid="iso5678"/> s’appliquent.</p>
986
+ </terms></sections>
987
+ </standard-document>
988
+ OUTPUT
989
+ expect(xmlpp(strip_guid(Asciidoctor.convert(input, backend: :standoc, header_footer: true))))
990
+ .to be_equivalent_to xmlpp(output)
991
+ end
968
992
 
969
- it "processes term document sources in Chinese" do
970
- expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :standoc, header_footer: true)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
993
+ it "processes term document sources in Chinese" do
994
+ input = <<~INPUT
971
995
  = Document title
972
996
  Author
973
997
  :docfile: test.adoc
@@ -982,163 +1006,192 @@ RSpec.describe Asciidoctor::Standoc do
982
1006
  [source="iso1234,iso5678"]
983
1007
  == Terms and Definitions
984
1008
 
985
- INPUT
986
- #{BLANK_HDR.sub(%r{<language>en</language>}, "<language>zh</language>").sub(%r{<script>Latn</script>}, "<script>Hans</script>")}
987
- <termdocsource bibitemid="iso1234"/><termdocsource bibitemid="iso5678"/><preface><foreword id='_' obligation="informative">
988
- <title>前言</title>
989
- <p id="_">Foreword</p>
990
- </foreword></preface><sections>
991
- <terms id="_" obligation="normative">
992
- <title>术语和定义</title><p id="_"><eref bibitemid="iso1234"/>和<eref bibitemid="iso5678"/>界定的术语和定义适用于本文件。</p>
993
-
994
-
995
-
996
- </terms></sections>
997
- </standard-document>
998
- OUTPUT
999
- end
1000
-
1001
- it "warn about external source for terms & definitions that does not point anywhere" do
1002
- expect{Asciidoctor.convert(<<~"INPUT", backend: :standoc, header_footer: true)}.to output(/not referenced/).to_stderr
1003
- #{ASCIIDOC_BLANK_HDR}
1004
-
1005
- [source="iso712"]
1006
- == Terms and Definitions
1007
- === Term2
1008
- INPUT
1009
- end
1010
-
1011
- it "treats terminal terms subclause named as terms clause as a normal clause" do
1012
- expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :standoc, header_footer: true)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
1013
- #{ASCIIDOC_BLANK_HDR}
1014
- [[tda]]
1015
- == Terms, definitions, symbols and abbreviations
1016
-
1017
- [[terms]]
1018
- === Terms and definitions
1019
-
1020
- === Symbols
1021
-
1022
- INPUT
1023
- #{BLANK_HDR}
1024
- <sections>
1025
- <terms id='tda' obligation='normative'>
1026
- <title>Terms, definitions and symbols</title>
1027
- <p id='_'>No terms and definitions are listed in this document.</p>
1028
- <clause id='terms' inline-header='false' obligation='normative'>
1029
- <title>Terms and definitions</title>
1030
- </clause>
1031
- <definitions id='_' obligation="normative" type="symbols">
1032
- <title>Symbols</title>
1033
- </definitions>
1034
- </terms>
1035
- </sections>
1036
- </standard-document>
1037
-
1038
- OUTPUT
1039
- end
1040
-
1041
- it "treats non-terminal terms subclause named as terms clause as a terms clause" do
1042
- expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :standoc, header_footer: true)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
1043
- #{ASCIIDOC_BLANK_HDR}
1044
- == Scope
1045
-
1046
- [[tda]]
1047
- == Terms, definitions, symbols and abbreviations
1048
-
1049
- [[terms]]
1050
- === Terms and definitions
1051
-
1052
- [[terms-concepts]]
1053
- ==== Basic concepts
1054
-
1055
- [[term-date]]
1056
- ===== date
1057
-
1058
- _time_ (<<term-time>>) on the _calendar_ (<<term-calendar>>) _time scale_ (<<term-time-scale>>)
1059
-
1060
- INPUT
1061
- #{BLANK_HDR}
1062
- <sections>
1063
- <clause id='_' inline-header='false' obligation='normative' type="scope">
1064
- <title>Scope</title>
1065
- </clause>
1066
- <clause id='tda' obligation='normative'>
1067
- <title>Terms and definitions</title>
1068
- <p id='_'>For the purposes of this document, the following terms and definitions apply.</p>
1069
- <clause id='terms' obligation='normative'>
1070
- <title>Terms and definitions</title>
1071
- <terms id='terms-concepts' obligation='normative'>
1072
- <title>Basic concepts</title>
1073
- <term id='term-date'>
1074
- <preferred>date</preferred>
1075
- <definition>
1076
- <p id='_'>
1077
- <em>time</em>
1078
- (
1079
- <xref target='term-time'/>
1080
- ) on the
1081
- <em>calendar</em>
1082
- (
1083
- <xref target='term-calendar'/>
1084
- )
1085
- <em>time scale</em>
1086
- (
1087
- <xref target='term-time-scale'/>
1088
- )
1089
- </p>
1090
- </definition>
1091
- </term>
1092
- </terms>
1093
- </clause>
1094
- </clause>
1095
- </sections>
1096
- </standard-document>
1097
- OUTPUT
1098
- end
1099
-
1100
- it "leaves alone special titles in preface or appendix" do
1101
- expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :standoc, header_footer: true)))).to be_equivalent_to xmlpp(strip_guid(<<~"OUTPUT"))
1102
- #{ASCIIDOC_BLANK_HDR}
1103
-
1104
- [.preface]
1105
- [[t1]]
1106
- == Terms and definitions
1107
-
1108
- [[t2]]
1109
- === Term1
1110
-
1111
- [appendix,language=fr]
1112
- [[sym]]
1113
- == Symbols and abbreviated terms
1114
-
1115
- [.appendix]
1116
- [[app]]
1117
- [bibliography]
1118
- == Normative Reference
1119
- INPUT
1120
- #{BLANK_HDR}
1121
- <preface>
1122
- <terms id='t1' obligation='normative'>
1123
- <title>Terms and definitions</title>
1124
- <term id='t2'>
1125
- <preferred>Term1</preferred>
1126
- </term>
1127
- </terms>
1128
- </preface>
1129
- <sections> </sections>
1130
- <annex id='_' obligation='' language='fr' script=''>
1131
- <definitions id='sym' language='fr' obligation="normative">
1132
- <title>Symbols and abbreviated terms</title>
1133
- </definitions>
1134
- </annex>
1135
- <annex id='_' obligation='' language='' script=''>
1136
- <references id='app' obligation='informative' normative="false">
1137
- <title>Bibliography</title>
1138
- </references>
1139
- </annex>
1140
- </standard-document>
1141
- OUTPUT
1142
- end
1009
+ INPUT
1010
+ output = <<~OUTPUT
1011
+ #{BLANK_HDR.sub(%r{<language>en</language>}, '<language>zh</language>').sub(%r{<script>Latn</script>}, '<script>Hans</script>')}
1012
+ <termdocsource bibitemid="iso1234"/><termdocsource bibitemid="iso5678"/><preface><foreword id='_' obligation="informative">
1013
+ <title>前言</title>
1014
+ <p id="_">Foreword</p>
1015
+ </foreword></preface><sections>
1016
+ <terms id="_" obligation="normative">
1017
+ <title>术语和定义</title><p id="_"><eref bibitemid="iso1234"/>和<eref bibitemid="iso5678"/>界定的术语和定义适用于本文件。</p>
1018
+ </terms></sections>
1019
+ </standard-document>
1020
+ OUTPUT
1021
+ expect(xmlpp(strip_guid(Asciidoctor.convert(input, backend: :standoc, header_footer: true))))
1022
+ .to be_equivalent_to xmlpp(output)
1023
+ end
1024
+
1025
+ it "warn about external source for terms & definitions that does not point anywhere" do
1026
+ input = <<~INPUT
1027
+ #{ASCIIDOC_BLANK_HDR}
1028
+
1029
+ [source="iso712"]
1030
+ == Terms and Definitions
1031
+ === Term2
1032
+ INPUT
1033
+ expect { Asciidoctor.convert(input, backend: :standoc, header_footer: true) }
1034
+ .to output(/not referenced/).to_stderr
1035
+ end
1036
+
1037
+ it "treats terminal terms subclause named as terms clause as a normal clause" do
1038
+ input = <<~INPUT
1039
+ #{ASCIIDOC_BLANK_HDR}
1040
+ [[tda]]
1041
+ == Terms, definitions, symbols and abbreviations
1042
+
1043
+ [[terms]]
1044
+ === Terms and definitions
1045
+
1046
+ === Symbols
1047
+
1048
+ INPUT
1049
+ output = <<~OUTPUT
1050
+ #{BLANK_HDR}
1051
+ <sections>
1052
+ <terms id='tda' obligation='normative'>
1053
+ <title>Terms, definitions and symbols</title>
1054
+ <p id='_'>No terms and definitions are listed in this document.</p>
1055
+ <clause id='terms' inline-header='false' obligation='normative'>
1056
+ <title>Terms and definitions</title>
1057
+ </clause>
1058
+ <definitions id='_' obligation="normative" type="symbols">
1059
+ <title>Symbols</title>
1060
+ </definitions>
1061
+ </terms>
1062
+ </sections>
1063
+ </standard-document>
1064
+ OUTPUT
1065
+ expect(xmlpp(strip_guid(Asciidoctor.convert(input, backend: :standoc, header_footer: true))))
1066
+ .to be_equivalent_to xmlpp(output)
1067
+ end
1068
+
1069
+ it "treats non-terminal terms subclause named as terms clause as a terms clause" do
1070
+ input = <<~INPUT
1071
+ #{ASCIIDOC_BLANK_HDR}
1072
+ == Scope
1073
+
1074
+ [[tda]]
1075
+ == Terms, definitions, symbols and abbreviations
1076
+
1077
+ [[terms]]
1078
+ === Terms and definitions
1079
+
1080
+ [[terms-concepts]]
1081
+ ==== Basic concepts
1082
+
1083
+ [[term-date]]
1084
+ ===== date
1085
+
1086
+ _time_ (<<term-time>>) on the _calendar_ (<<term-calendar>>) _time scale_ (<<term-time-scale>>)
1087
+
1088
+ INPUT
1089
+ output = <<~OUTPUT
1090
+ #{BLANK_HDR}
1091
+ <sections>
1092
+ <clause id='_' inline-header='false' obligation='normative' type="scope">
1093
+ <title>Scope</title>
1094
+ </clause>
1095
+ <clause id='tda' obligation='normative'>
1096
+ <title>Terms and definitions</title>
1097
+ <p id='_'>For the purposes of this document, the following terms and definitions apply.</p>
1098
+ <clause id='terms' obligation='normative'>
1099
+ <title>Terms and definitions</title>
1100
+ <terms id='terms-concepts' obligation='normative'>
1101
+ <title>Basic concepts</title>
1102
+ <term id='term-date'>
1103
+ <preferred>date</preferred>
1104
+ <definition>
1105
+ <p id='_'>
1106
+ <em>time</em>
1107
+ (
1108
+ <xref target='term-time'/>
1109
+ ) on the
1110
+ <em>calendar</em>
1111
+ (
1112
+ <xref target='term-calendar'/>
1113
+ )
1114
+ <em>time scale</em>
1115
+ (
1116
+ <xref target='term-time-scale'/>
1117
+ )
1118
+ </p>
1119
+ </definition>
1120
+ </term>
1121
+ </terms>
1122
+ </clause>
1123
+ </clause>
1124
+ </sections>
1125
+ </standard-document>
1126
+ OUTPUT
1127
+ expect(xmlpp(strip_guid(Asciidoctor.convert(input, backend: :standoc, header_footer: true))))
1128
+ .to be_equivalent_to xmlpp(output)
1129
+ end
1130
+
1131
+ it "leaves alone special titles in preface or appendix" do
1132
+ input = <<~INPUT
1133
+ #{ASCIIDOC_BLANK_HDR}
1134
+
1135
+ [.preface]
1136
+ [[t1]]
1137
+ == Terms and definitions
1138
+
1139
+ [[t2]]
1140
+ === Term1
1141
+
1142
+ [appendix,language=fr]
1143
+ [[sym]]
1144
+ == Symbols and abbreviated terms
1145
+
1146
+ [.appendix]
1147
+ [[app]]
1148
+ [bibliography]
1149
+ == Normative Reference
1150
+ INPUT
1151
+ output = <<~OUTPUT
1152
+ #{BLANK_HDR}
1153
+ <preface>
1154
+ <terms id='t1' obligation='normative'>
1155
+ <title>Terms and definitions</title>
1156
+ <term id='t2'>
1157
+ <preferred>Term1</preferred>
1158
+ </term>
1159
+ </terms>
1160
+ </preface>
1161
+ <sections> </sections>
1162
+ <annex id='_' obligation='' language='fr' script=''>
1163
+ <definitions id='sym' language='fr' obligation="normative">
1164
+ <title>Symbols and abbreviated terms</title>
1165
+ </definitions>
1166
+ </annex>
1167
+ <annex id='_' obligation='' language='' script=''>
1168
+ <references id='app' obligation='informative' normative="false">
1169
+ <title>Bibliography</title>
1170
+ </references>
1171
+ </annex>
1172
+ </standard-document>
1173
+ OUTPUT
1174
+ expect(xmlpp(strip_guid(Asciidoctor.convert(input, backend: :standoc, header_footer: true))))
1175
+ .to be_equivalent_to xmlpp(output)
1176
+ end
1177
+
1178
+ it "recognises special titles despite following indexterms" do
1179
+ input = <<~INPUT
1180
+ #{ASCIIDOC_BLANK_HDR}
1181
+
1182
+ == Scope (((indexterm)))
1183
+ INPUT
1184
+ output = <<~OUTPUT
1185
+ #{BLANK_HDR}
1186
+ <sections>
1187
+ <clause id='_' type='scope' inline-header='false' obligation='normative'>
1188
+ <title>Scope</title>
1189
+ </clause>
1190
+ </sections>
1191
+ </standard-document>
1192
+ OUTPUT
1193
+ expect(xmlpp(strip_guid(Asciidoctor.convert(input, backend: :standoc, header_footer: true))))
1194
+ .to be_equivalent_to xmlpp(output)
1195
+ end
1143
1196
 
1144
1197
  end