metanorma-standoc 1.8.6 → 1.9.2

Sign up to get free protection for your applications and to get access to all the features.
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