metanorma-iso 1.8.0 → 1.8.5

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 (52) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/rake.yml +3 -13
  3. data/.hound.yml +3 -1
  4. data/.rubocop.yml +4 -8
  5. data/lib/asciidoctor/iso/base.rb +14 -11
  6. data/lib/asciidoctor/iso/biblio.rng +1 -0
  7. data/lib/asciidoctor/iso/cleanup.rb +40 -24
  8. data/lib/asciidoctor/iso/front.rb +28 -16
  9. data/lib/asciidoctor/iso/front_id.rb +66 -50
  10. data/lib/asciidoctor/iso/isodoc.rng +191 -3
  11. data/lib/asciidoctor/iso/isostandard-amd.rng +3 -0
  12. data/lib/asciidoctor/iso/isostandard.rng +12 -0
  13. data/lib/asciidoctor/iso/section.rb +2 -1
  14. data/lib/asciidoctor/iso/validate.rb +22 -110
  15. data/lib/asciidoctor/iso/validate_image.rb +97 -0
  16. data/lib/asciidoctor/iso/validate_requirements.rb +26 -20
  17. data/lib/asciidoctor/iso/validate_section.rb +55 -29
  18. data/lib/asciidoctor/iso/validate_style.rb +36 -24
  19. data/lib/asciidoctor/iso/validate_title.rb +2 -4
  20. data/lib/isodoc/iso/base_convert.rb +20 -14
  21. data/lib/isodoc/iso/html/isodoc.css +475 -20
  22. data/lib/isodoc/iso/html/isodoc.scss +456 -23
  23. data/lib/isodoc/iso/html/wordstyle.css +202 -31
  24. data/lib/isodoc/iso/html/wordstyle.scss +194 -32
  25. data/lib/isodoc/iso/iso.amendment.xsl +666 -193
  26. data/lib/isodoc/iso/iso.international-standard.xsl +666 -193
  27. data/lib/isodoc/iso/metadata.rb +3 -2
  28. data/lib/isodoc/iso/presentation_xml_convert.rb +15 -14
  29. data/lib/isodoc/iso/sts_convert.rb +10 -13
  30. data/lib/isodoc/iso/word_convert.rb +153 -39
  31. data/lib/isodoc/iso/xref.rb +44 -29
  32. data/lib/metanorma/iso/processor.rb +1 -0
  33. data/lib/metanorma/iso/version.rb +1 -1
  34. data/metanorma-iso.gemspec +3 -3
  35. data/spec/asciidoctor/base_spec.rb +426 -305
  36. data/spec/asciidoctor/blocks_spec.rb +96 -34
  37. data/spec/asciidoctor/cleanup_spec.rb +383 -25
  38. data/spec/asciidoctor/section_spec.rb +0 -14
  39. data/spec/asciidoctor/validate_spec.rb +218 -83
  40. data/spec/isodoc/amd_spec.rb +193 -201
  41. data/spec/isodoc/blocks_spec.rb +100 -88
  42. data/spec/isodoc/i18n_spec.rb +36 -36
  43. data/spec/isodoc/inline_spec.rb +2 -2
  44. data/spec/isodoc/iso_spec.rb +86 -138
  45. data/spec/isodoc/postproc_spec.rb +492 -442
  46. data/spec/isodoc/ref_spec.rb +6 -6
  47. data/spec/isodoc/section_spec.rb +301 -306
  48. data/spec/isodoc/table_spec.rb +166 -231
  49. data/spec/isodoc/terms_spec.rb +11 -8
  50. data/spec/isodoc/xref_spec.rb +147 -118
  51. data/spec/spec_helper.rb +16 -15
  52. metadata +8 -7
@@ -38,6 +38,7 @@ module Metanorma
38
38
 
39
39
  def use_presentation_xml(ext)
40
40
  return true if ext == :html_alt
41
+
41
42
  super
42
43
  end
43
44
 
@@ -1,5 +1,5 @@
1
1
  module Metanorma
2
2
  module ISO
3
- VERSION = "1.8.0".freeze
3
+ VERSION = "1.8.5".freeze
4
4
  end
5
5
  end
@@ -27,11 +27,11 @@ Gem::Specification.new do |spec|
27
27
  spec.require_paths = ["lib"]
28
28
  spec.files = `git ls-files`.split("\n")
29
29
  spec.test_files = `git ls-files -- {spec}/*`.split("\n")
30
- spec.required_ruby_version = Gem::Requirement.new(">= 2.4.0")
30
+ spec.required_ruby_version = Gem::Requirement.new(">= 2.5.0")
31
31
 
32
- spec.add_dependency "isodoc", "~> 1.6.0"
32
+ spec.add_dependency "isodoc", "~> 1.6.2"
33
33
  spec.add_dependency "metanorma-standoc", "~> 1.9.0"
34
- spec.add_dependency "mn2sts", "~> 1.5.0"
34
+ spec.add_dependency "mn2sts", "~> 1.8.0"
35
35
  spec.add_dependency "ruby-jing"
36
36
  spec.add_dependency "tokenizer", "~> 0.3.0"
37
37
  spec.add_dependency "twitter_cldr"
@@ -6,27 +6,33 @@ RSpec.describe Asciidoctor::ISO do
6
6
  end
7
7
 
8
8
  it "processes a blank document" do
9
- expect(xmlpp(Asciidoctor.convert(<<~"INPUT", *OPTIONS))).to be_equivalent_to xmlpp(<<~"OUTPUT")
9
+ input = <<~INPUT
10
10
  #{ASCIIDOC_BLANK_HDR}
11
11
  INPUT
12
+ output = <<~OUTPUT
12
13
  #{BLANK_HDR}
13
14
  <sections/>
14
15
  </iso-standard>
15
16
  OUTPUT
17
+ expect(xmlpp(Asciidoctor.convert(input, *OPTIONS)))
18
+ .to be_equivalent_to xmlpp(output)
16
19
  end
17
20
 
18
21
  it "converts a blank document" do
19
- expect(xmlpp(Asciidoctor.convert(<<~"INPUT", *OPTIONS))).to be_equivalent_to xmlpp(<<~"OUTPUT")
22
+ input = <<~INPUT
20
23
  = Document title
21
24
  Author
22
25
  :docfile: test.adoc
23
26
  :novalid:
24
27
  :no-isobib:
25
28
  INPUT
29
+ output = <<~OUTPUT
26
30
  #{BLANK_HDR}
27
31
  <sections/>
28
32
  </iso-standard>
29
33
  OUTPUT
34
+ expect(xmlpp(Asciidoctor.convert(input, *OPTIONS)))
35
+ .to be_equivalent_to xmlpp(output)
30
36
  expect(File.exist?("test_alt.html")).to be true
31
37
  expect(File.exist?("test.html")).to be true
32
38
  expect(File.exist?("test.doc")).to be true
@@ -35,7 +41,7 @@ RSpec.describe Asciidoctor::ISO do
35
41
  end
36
42
 
37
43
  it "converts a blank document in French" do
38
- expect(xmlpp(Asciidoctor.convert(<<~"INPUT", *OPTIONS))).to be_equivalent_to xmlpp(<<~"OUTPUT")
44
+ input = <<~INPUT
39
45
  = Document title
40
46
  Author
41
47
  :docfile: test.adoc
@@ -44,10 +50,13 @@ RSpec.describe Asciidoctor::ISO do
44
50
  :no-pdf:
45
51
  :language: fr
46
52
  INPUT
53
+ output = <<~OUTPUT
47
54
  #{BLANK_HDR_FR}
48
55
  <sections/>
49
56
  </iso-standard>
50
57
  OUTPUT
58
+ expect(xmlpp(Asciidoctor.convert(input, *OPTIONS)))
59
+ .to be_equivalent_to xmlpp(output)
51
60
  end
52
61
 
53
62
  it "processes default metadata" do
@@ -96,87 +105,88 @@ RSpec.describe Asciidoctor::ISO do
96
105
  :copyright-year: 2000
97
106
  :horizontal: true
98
107
  INPUT
99
- expect(xmlpp(output.sub(%r{<boilerplate>.*</boilerplate>}m, ""))).to be_equivalent_to xmlpp(<<~"OUTPUT")
100
- <?xml version="1.0" encoding="UTF-8"?>
101
- <iso-standard type="semantic" version="#{Metanorma::ISO::VERSION}" xmlns="https://www.metanorma.org/ns/iso">
102
- <bibdata type="standard">
103
- <title format="text/plain" language="en" type="main">Introduction — Main Title — Title — Title Part</title>
104
- <title format="text/plain" language="en" type="title-intro">Introduction</title>
105
- <title format="text/plain" language="en" type="title-main">Main Title — Title</title>
106
- <title format="text/plain" language="en" type="title-part">Title Part</title>
107
- <title format="text/plain" language="fr" type="main">Introduction Française — Titre Principal — Part du Titre</title>
108
- <title format="text/plain" language="fr" type="title-intro">Introduction Française</title>
109
- <title format="text/plain" language="fr" type="title-main">Titre Principal</title>
110
- <title format="text/plain" language="fr" type="title-part">Part du Titre</title>
111
- <docidentifier type="ISO">ISO/PreWD3 1000-1</docidentifier>
112
- <docidentifier type="iso-with-lang">ISO/PreWD3 1000-1(E)</docidentifier>
113
- <docidentifier type="iso-reference">ISO/PreWD3 1000-1:2000(E)</docidentifier>
114
- <docnumber>1000</docnumber>
115
- <contributor>
116
- <role type="author"/>
117
- <organization>
118
- <name>International Organization for Standardization</name>
119
- <abbreviation>ISO</abbreviation>
120
- </organization>
121
- </contributor>
122
- <contributor>
123
- <role type="publisher"/>
124
- <organization>
125
- <name>International Organization for Standardization</name>
126
- <abbreviation>ISO</abbreviation>
127
- </organization>
128
- </contributor>
129
- <edition>2</edition>
130
- <version>
131
- <revision-date>2000-01-01</revision-date>
132
- <draft>0.3.4</draft>
133
- </version>
134
- <language>en</language>
135
- <script>Latn</script>
136
- <status>
137
- <stage abbreviation="WD">20</stage>
138
- <substage>20</substage>
139
- <iteration>3</iteration>
140
- </status>
141
- <copyright>
142
- <from>2000</from>
143
- <owner>
108
+ expect(xmlpp(output.sub(%r{<boilerplate>.*</boilerplate>}m, "")))
109
+ .to be_equivalent_to xmlpp(<<~"OUTPUT")
110
+ <?xml version="1.0" encoding="UTF-8"?>
111
+ <iso-standard type="semantic" version="#{Metanorma::ISO::VERSION}" xmlns="https://www.metanorma.org/ns/iso">
112
+ <bibdata type="standard">
113
+ <title format="text/plain" language="en" type="main">Introduction — Main Title — Title — Title Part</title>
114
+ <title format="text/plain" language="en" type="title-intro">Introduction</title>
115
+ <title format="text/plain" language="en" type="title-main">Main Title — Title</title>
116
+ <title format="text/plain" language="en" type="title-part">Title Part</title>
117
+ <title format="text/plain" language="fr" type="main">Introduction Française — Titre Principal — Part du Titre</title>
118
+ <title format="text/plain" language="fr" type="title-intro">Introduction Française</title>
119
+ <title format="text/plain" language="fr" type="title-main">Titre Principal</title>
120
+ <title format="text/plain" language="fr" type="title-part">Part du Titre</title>
121
+ <docidentifier type="ISO">ISO/PreWD3 1000-1</docidentifier>
122
+ <docidentifier type="iso-with-lang">ISO/PreWD3 1000-1(E)</docidentifier>
123
+ <docidentifier type="iso-reference">ISO/PreWD3 1000-1:2000(E)</docidentifier>
124
+ <docnumber>1000</docnumber>
125
+ <contributor>
126
+ <role type="author"/>
144
127
  <organization>
145
128
  <name>International Organization for Standardization</name>
146
129
  <abbreviation>ISO</abbreviation>
147
130
  </organization>
148
- </owner>
149
- </copyright>
150
- <ext>
151
- <doctype>article</doctype>
152
- <horizontal>true</horizontal>
153
- <editorialgroup>
154
- <technical-committee number="1" type="A">TC</technical-committee>
155
- <technical-committee number="11" type="A1">TC1</technical-committee>
156
- <subcommittee number="2" type="B">SC</subcommittee>
157
- <subcommittee number="21" type="B1">SC1</subcommittee>
158
- <workgroup number="3" type="C">WG</workgroup>
159
- <workgroup number="31" type="C1">WG1</workgroup>
160
- <secretariat>SECRETARIAT</secretariat>
161
- </editorialgroup>
162
- <ics>
163
- <code>1</code>
164
- </ics>
165
- <ics>
166
- <code>2</code>
167
- </ics>
168
- <ics>
169
- <code>3</code>
170
- </ics>
171
- <structuredidentifier>
172
- <project-number part="1">ISO 1000</project-number>
173
- </structuredidentifier>
174
- <stagename>Third working draft</stagename>
175
- </ext>
176
- </bibdata>
177
- <sections/>
178
- </iso-standard>
179
- OUTPUT
131
+ </contributor>
132
+ <contributor>
133
+ <role type="publisher"/>
134
+ <organization>
135
+ <name>International Organization for Standardization</name>
136
+ <abbreviation>ISO</abbreviation>
137
+ </organization>
138
+ </contributor>
139
+ <edition>2</edition>
140
+ <version>
141
+ <revision-date>2000-01-01</revision-date>
142
+ <draft>0.3.4</draft>
143
+ </version>
144
+ <language>en</language>
145
+ <script>Latn</script>
146
+ <status>
147
+ <stage abbreviation="WD">20</stage>
148
+ <substage>20</substage>
149
+ <iteration>3</iteration>
150
+ </status>
151
+ <copyright>
152
+ <from>2000</from>
153
+ <owner>
154
+ <organization>
155
+ <name>International Organization for Standardization</name>
156
+ <abbreviation>ISO</abbreviation>
157
+ </organization>
158
+ </owner>
159
+ </copyright>
160
+ <ext>
161
+ <doctype>article</doctype>
162
+ <horizontal>true</horizontal>
163
+ <editorialgroup>
164
+ <technical-committee number="1" type="A">TC</technical-committee>
165
+ <technical-committee number="11" type="A1">TC1</technical-committee>
166
+ <subcommittee number="2" type="B">SC</subcommittee>
167
+ <subcommittee number="21" type="B1">SC1</subcommittee>
168
+ <workgroup number="3" type="C">WG</workgroup>
169
+ <workgroup number="31" type="C1">WG1</workgroup>
170
+ <secretariat>SECRETARIAT</secretariat>
171
+ </editorialgroup>
172
+ <ics>
173
+ <code>1</code>
174
+ </ics>
175
+ <ics>
176
+ <code>2</code>
177
+ </ics>
178
+ <ics>
179
+ <code>3</code>
180
+ </ics>
181
+ <structuredidentifier>
182
+ <project-number part="1">ISO 1000</project-number>
183
+ </structuredidentifier>
184
+ <stagename>Third working draft</stagename>
185
+ </ext>
186
+ </bibdata>
187
+ <sections/>
188
+ </iso-standard>
189
+ OUTPUT
180
190
  end
181
191
 
182
192
  it "processes complex metadata" do
@@ -203,95 +213,132 @@ RSpec.describe Asciidoctor::ISO do
203
213
  :pub-email: x@example.com
204
214
  :pub-uri: http://www.example.com
205
215
  INPUT
206
- expect(xmlpp(output.sub(%r{<boilerplate>.*</boilerplate>}m, ""))).to be_equivalent_to xmlpp(<<~"OUTPUT")
207
- <?xml version="1.0" encoding="UTF-8"?>
208
- <iso-standard type="semantic" version="#{Metanorma::ISO::VERSION}" xmlns="https://www.metanorma.org/ns/iso">
209
- <bibdata type="standard">
210
- <docidentifier type="ISO">ISO/IEC/IETF/TR 1000-1-1:2001</docidentifier>
211
- <docidentifier type="iso-with-lang">ISO/IEC/IETF/TR 1000-1-1:2001(X)</docidentifier>
212
- <docidentifier type="iso-reference">ISO/IEC/IETF/TR 1000-1-1:2001(X)</docidentifier>
213
- <docidentifier type="iso-tc">2000</docidentifier>
214
- <docidentifier type="iso-tc">2003</docidentifier>
215
- <docnumber>1000</docnumber>
216
- <contributor>
217
- <role type="author"/>
218
- <organization>
219
- <name>International Electrotechnical Commission</name>
220
- <abbreviation>IEC</abbreviation>
221
- </organization>
222
- </contributor>
223
- <contributor>
224
- <role type="author"/>
225
- <organization>
226
- <name>IETF</name>
227
- </organization>
228
- </contributor>
229
- <contributor>
230
- <role type="author"/>
231
- <organization>
232
- <name>International Organization for Standardization</name>
233
- <abbreviation>ISO</abbreviation>
234
- </organization>
235
- </contributor>
236
- <contributor>
237
- <role type="publisher"/>
238
- <organization>
239
- <name>International Electrotechnical Commission</name>
240
- <abbreviation>IEC</abbreviation>
241
- </organization>
242
- </contributor>
243
- <contributor>
244
- <role type="publisher"/>
245
- <organization>
246
- <name>IETF</name>
247
- </organization>
248
- </contributor>
249
- <contributor>
250
- <role type="publisher"/>
251
- <organization>
252
- <name>International Organization for Standardization</name>
253
- <abbreviation>ISO</abbreviation>
254
- </organization>
255
- </contributor>
256
- <language>el</language>
257
- <script>Grek</script>
258
- <status>
259
- <stage abbreviation="IS">60</stage>
260
- <substage>60</substage>
261
- </status>
262
- <copyright>
263
- <from>2001</from>
264
- <owner>
265
- <organization>
266
- <name>International Organization for Standardization</name>
267
- <abbreviation>ISO</abbreviation>
268
- </organization>
269
- </owner>
270
- </copyright>
271
- <copyright>
272
- <from>2001</from>
273
- <owner>
274
- <organization>
275
- <name>IETF</name>
276
- </organization>
277
- </owner>
278
- </copyright>
279
- <ext>
280
- <doctype>technical-report</doctype>
281
- <editorialgroup>
282
- <technical-committee/>
283
- <subcommittee/>
284
- <workgroup/>
285
- </editorialgroup>
286
- <structuredidentifier>
287
- <project-number part="1" subpart="1">ISO/IEC/IETF 1000</project-number>
288
- </structuredidentifier>
289
- <stagename>International standard</stagename>
290
- </ext>
291
- </bibdata>
292
- <sections/>
293
- </iso-standard>
294
- OUTPUT
216
+ expect(xmlpp(output.sub(%r{<boilerplate>.*</boilerplate>}m, "")))
217
+ .to be_equivalent_to xmlpp(<<~"OUTPUT")
218
+ <?xml version="1.0" encoding="UTF-8"?>
219
+ <iso-standard type="semantic" version="#{Metanorma::ISO::VERSION}" xmlns="https://www.metanorma.org/ns/iso">
220
+ <bibdata type="standard">
221
+ <docidentifier type="ISO">ISO/IEC/IETF/TR 1000-1-1:2001</docidentifier>
222
+ <docidentifier type="iso-with-lang">ISO/IEC/IETF/TR 1000-1-1:2001(X)</docidentifier>
223
+ <docidentifier type="iso-reference">ISO/IEC/IETF/TR 1000-1-1:2001(X)</docidentifier>
224
+ <docidentifier type="iso-tc">2000</docidentifier>
225
+ <docidentifier type="iso-tc">2003</docidentifier>
226
+ <docnumber>1000</docnumber>
227
+ <contributor>
228
+ <role type="author"/>
229
+ <organization>
230
+ <name>International Electrotechnical Commission</name>
231
+ <abbreviation>IEC</abbreviation>
232
+ </organization>
233
+ </contributor>
234
+ <contributor>
235
+ <role type="author"/>
236
+ <organization>
237
+ <name>IETF</name>
238
+ </organization>
239
+ </contributor>
240
+ <contributor>
241
+ <role type="author"/>
242
+ <organization>
243
+ <name>International Organization for Standardization</name>
244
+ <abbreviation>ISO</abbreviation>
245
+ </organization>
246
+ </contributor>
247
+ <contributor>
248
+ <role type="publisher"/>
249
+ <organization>
250
+ <name>International Electrotechnical Commission</name>
251
+ <abbreviation>IEC</abbreviation>
252
+ <address>
253
+ <formattedAddress>1 Infinity Loop + California</formattedAddress>
254
+ </address>
255
+ <phone>3333333</phone>
256
+ <phone type='fax'>4444444</phone>
257
+ <email>x@example.com</email>
258
+ <uri>http://www.example.com</uri>
259
+ </organization>
260
+ </contributor>
261
+ <contributor>
262
+ <role type="publisher"/>
263
+ <organization>
264
+ <name>IETF</name>
265
+ <address>
266
+ <formattedAddress>1 Infinity Loop + California</formattedAddress>
267
+ </address>
268
+ <phone>3333333</phone>
269
+ <phone type='fax'>4444444</phone>
270
+ <email>x@example.com</email>
271
+ <uri>http://www.example.com</uri>
272
+ </organization>
273
+ </contributor>
274
+ <contributor>
275
+ <role type="publisher"/>
276
+ <organization>
277
+ <name>International Organization for Standardization</name>
278
+ <abbreviation>ISO</abbreviation>
279
+ <address>
280
+ <formattedAddress>1 Infinity Loop + California</formattedAddress>
281
+ </address>
282
+ <phone>3333333</phone>
283
+ <phone type='fax'>4444444</phone>
284
+ <email>x@example.com</email>
285
+ <uri>http://www.example.com</uri>
286
+ </organization>
287
+ </contributor>
288
+ <language>el</language>
289
+ <script>Grek</script>
290
+ <status>
291
+ <stage abbreviation="IS">60</stage>
292
+ <substage>60</substage>
293
+ </status>
294
+ <copyright>
295
+ <from>2001</from>
296
+ <owner>
297
+ <organization>
298
+ <name>International Organization for Standardization</name>
299
+ <abbreviation>ISO</abbreviation>
300
+ <address>
301
+ <formattedAddress>1 Infinity Loop + California</formattedAddress>
302
+ </address>
303
+ <phone>3333333</phone>
304
+ <phone type='fax'>4444444</phone>
305
+ <email>x@example.com</email>
306
+ <uri>http://www.example.com</uri>
307
+ #{' '}
308
+ </organization>
309
+ </owner>
310
+ </copyright>
311
+ <copyright>
312
+ <from>2001</from>
313
+ <owner>
314
+ <organization>
315
+ <name>IETF</name>
316
+ <address>
317
+ <formattedAddress>1 Infinity Loop + California</formattedAddress>
318
+ </address>
319
+ <phone>3333333</phone>
320
+ <phone type='fax'>4444444</phone>
321
+ <email>x@example.com</email>
322
+ <uri>http://www.example.com</uri>
323
+ </organization>
324
+ </owner>
325
+ </copyright>
326
+ <ext>
327
+ <doctype>technical-report</doctype>
328
+ <editorialgroup>
329
+ <technical-committee/>
330
+ <subcommittee/>
331
+ <workgroup/>
332
+ </editorialgroup>
333
+ <structuredidentifier>
334
+ <project-number part="1" subpart="1">ISO/IEC/IETF 1000</project-number>
335
+ </structuredidentifier>
336
+ <stagename>International standard</stagename>
337
+ </ext>
338
+ </bibdata>
339
+ <sections/>
340
+ </iso-standard>
341
+ OUTPUT
295
342
  end
296
343
 
297
344
  it "processes subdivisions" do
@@ -318,7 +365,8 @@ RSpec.describe Asciidoctor::ISO do
318
365
  :pub-email: x@example.com
319
366
  :pub-uri: http://www.example.com
320
367
  INPUT
321
- expect(xmlpp(strip_guid(output.sub(%r{<boilerplate>.*</boilerplate>}m, ""))))
368
+ expect(xmlpp(strip_guid(output
369
+ .sub(%r{<boilerplate>.*</boilerplate>}m, ""))))
322
370
  .to be_equivalent_to xmlpp(<<~"OUTPUT")
323
371
  <iso-standard xmlns="https://www.metanorma.org/ns/iso" type="semantic" version="#{Metanorma::ISO::VERSION}">
324
372
  <bibdata type='standard'>
@@ -336,13 +384,6 @@ RSpec.describe Asciidoctor::ISO do
336
384
  <name>International Organization for Standardization</name>
337
385
  <subdivision>Subdivision</subdivision>
338
386
  <abbreviation>SD</abbreviation>
339
- <address>
340
- <formattedAddress>1 Infinity Loop <br/>California</formattedAddress>
341
- </address>
342
- <phone>3333333</phone>
343
- <phone type='fax'>4444444</phone>
344
- <email>x@example.com</email>
345
- <uri>http://www.example.com</uri>
346
387
  </organization>
347
388
  </contributor>
348
389
  <contributor>
@@ -420,12 +461,81 @@ RSpec.describe Asciidoctor::ISO do
420
461
  :doctype: international-standard
421
462
  :iteration: 2
422
463
  INPUT
423
- expect(xmlpp(output.sub(%r{<boilerplate>.*</boilerplate>}m, ""))).to be_equivalent_to xmlpp(<<~"OUTPUT")
424
- <iso-standard type="semantic" version="#{Metanorma::ISO::VERSION}" xmlns="https://www.metanorma.org/ns/iso">
464
+ expect(xmlpp(output.sub(%r{<boilerplate>.*</boilerplate>}m, "")))
465
+ .to be_equivalent_to xmlpp(<<~"OUTPUT")
466
+ <iso-standard type="semantic" version="#{Metanorma::ISO::VERSION}" xmlns="https://www.metanorma.org/ns/iso">
467
+ <bibdata type="standard">
468
+ <docidentifier type='ISO'>ISO/FDIS 1000.2</docidentifier>
469
+ <docidentifier type='iso-with-lang'>ISO/FDIS 1000.2(F)</docidentifier>
470
+ <docidentifier type='iso-reference'>ISO/FDIS 1000.2(F)</docidentifier>
471
+ <docnumber>1000</docnumber>
472
+ <contributor>
473
+ <role type="author"/>
474
+ <organization>
475
+ <name>International Organization for Standardization</name>
476
+ <abbreviation>ISO</abbreviation>
477
+ </organization>
478
+ </contributor>
479
+ <contributor>
480
+ <role type="publisher"/>
481
+ <organization>
482
+ <name>International Organization for Standardization</name>
483
+ <abbreviation>ISO</abbreviation>
484
+ </organization>
485
+ </contributor>
486
+ <language>fr</language>
487
+ <script>Latn</script>
488
+ <status>
489
+ <stage abbreviation="FDIS">50</stage>
490
+ <substage>00</substage>
491
+ <iteration>2</iteration>
492
+ </status>
493
+ <copyright>
494
+ <from>#{Date.today.year}</from>
495
+ <owner>
496
+ <organization>
497
+ <name>International Organization for Standardization</name>
498
+ <abbreviation>ISO</abbreviation>
499
+ </organization>
500
+ </owner>
501
+ </copyright>
502
+ <ext>
503
+ <doctype>international-standard</doctype>
504
+ <editorialgroup>
505
+ <technical-committee/>
506
+ <subcommittee/>
507
+ <workgroup/>
508
+ </editorialgroup>
509
+ <structuredidentifier>
510
+ <project-number>ISO 1000</project-number>
511
+ </structuredidentifier>
512
+ <stagename>Final draft</stagename>
513
+ </ext>
514
+ </bibdata>
515
+ <sections/>
516
+ </iso-standard>
517
+ OUTPUT
518
+ end
519
+
520
+ it "defaults substage for stage 60" do
521
+ output = Asciidoctor.convert(<<~"INPUT", *OPTIONS)
522
+ = Document title
523
+ Author
524
+ :docfile: test.adoc
525
+ :nodoc:
526
+ :novalid:
527
+ :no-isobib:
528
+ :docnumber: 1000
529
+ :docstage: 60
530
+ INPUT
531
+
532
+ expect(xmlpp(output.sub(%r{<boilerplate>.*</boilerplate>}m, "")))
533
+ .to be_equivalent_to xmlpp(<<~"OUTPUT")
534
+ <iso-standard xmlns="https://www.metanorma.org/ns/iso" type="semantic" version="#{Metanorma::ISO::VERSION}">
425
535
  <bibdata type="standard">
426
- <docidentifier type='ISO'>ISO/FDIS 1000.2</docidentifier>
427
- <docidentifier type='iso-with-lang'>ISO/FDIS 1000.2(F)</docidentifier>
428
- <docidentifier type='iso-reference'>ISO/FDIS 1000.2(F)</docidentifier>
536
+ <docidentifier type="ISO">ISO 1000</docidentifier>
537
+ <docidentifier type='iso-with-lang'>ISO 1000(E)</docidentifier>
538
+ <docidentifier type='iso-reference'>ISO 1000(E)</docidentifier>
429
539
  <docnumber>1000</docnumber>
430
540
  <contributor>
431
541
  <role type="author"/>
@@ -441,12 +551,12 @@ RSpec.describe Asciidoctor::ISO do
441
551
  <abbreviation>ISO</abbreviation>
442
552
  </organization>
443
553
  </contributor>
444
- <language>fr</language>
554
+
555
+ <language>en</language>
445
556
  <script>Latn</script>
446
557
  <status>
447
- <stage abbreviation="FDIS">50</stage>
448
- <substage>00</substage>
449
- <iteration>2</iteration>
558
+ <stage abbreviation="IS">60</stage>
559
+ <substage>60</substage>
450
560
  </status>
451
561
  <copyright>
452
562
  <from>#{Date.today.year}</from>
@@ -458,7 +568,7 @@ RSpec.describe Asciidoctor::ISO do
458
568
  </owner>
459
569
  </copyright>
460
570
  <ext>
461
- <doctype>international-standard</doctype>
571
+ <doctype>article</doctype>
462
572
  <editorialgroup>
463
573
  <technical-committee/>
464
574
  <subcommittee/>
@@ -467,15 +577,15 @@ RSpec.describe Asciidoctor::ISO do
467
577
  <structuredidentifier>
468
578
  <project-number>ISO 1000</project-number>
469
579
  </structuredidentifier>
470
- <stagename>Final draft</stagename>
580
+ <stagename>International standard</stagename>
471
581
  </ext>
472
582
  </bibdata>
473
583
  <sections/>
474
- </iso-standard>
475
- OUTPUT
584
+ </iso-standard>
585
+ OUTPUT
476
586
  end
477
587
 
478
- it "defaults substage for stage 60" do
588
+ it "populates metadata for PRF" do
479
589
  output = Asciidoctor.convert(<<~"INPUT", *OPTIONS)
480
590
  = Document title
481
591
  Author
@@ -485,64 +595,65 @@ RSpec.describe Asciidoctor::ISO do
485
595
  :no-isobib:
486
596
  :docnumber: 1000
487
597
  :docstage: 60
598
+ :docsubstage: 00
488
599
  INPUT
600
+ expect(xmlpp(output.sub(%r{<boilerplate>.*</boilerplate>}m, "")))
601
+ .to be_equivalent_to xmlpp(<<~"OUTPUT")
602
+ <iso-standard xmlns="https://www.metanorma.org/ns/iso" type="semantic" version="#{Metanorma::ISO::VERSION}">
603
+ <bibdata type="standard">
604
+ <docidentifier type="ISO">ISO 1000</docidentifier>
605
+ <docidentifier type='iso-with-lang'>ISO 1000(E)</docidentifier>
606
+ <docidentifier type='iso-reference'>ISO 1000(E)</docidentifier>
607
+ <docnumber>1000</docnumber>
608
+ <contributor>
609
+ <role type="author"/>
610
+ <organization>
611
+ <name>International Organization for Standardization</name>
612
+ <abbreviation>ISO</abbreviation>
613
+ </organization>
614
+ </contributor>
615
+ <contributor>
616
+ <role type="publisher"/>
617
+ <organization>
618
+ <name>International Organization for Standardization</name>
619
+ <abbreviation>ISO</abbreviation>
620
+ </organization>
621
+ </contributor>
489
622
 
490
- expect(xmlpp(output.sub(%r{<boilerplate>.*</boilerplate>}m, ""))).to be_equivalent_to xmlpp(<<~"OUTPUT")
491
- <iso-standard xmlns="https://www.metanorma.org/ns/iso" type="semantic" version="#{Metanorma::ISO::VERSION}">
492
- <bibdata type="standard">
493
- <docidentifier type="ISO">ISO 1000</docidentifier>
494
- <docidentifier type='iso-with-lang'>ISO 1000(E)</docidentifier>
495
- <docidentifier type='iso-reference'>ISO 1000(E)</docidentifier>
496
- <docnumber>1000</docnumber>
497
- <contributor>
498
- <role type="author"/>
499
- <organization>
500
- <name>International Organization for Standardization</name>
501
- <abbreviation>ISO</abbreviation>
502
- </organization>
503
- </contributor>
504
- <contributor>
505
- <role type="publisher"/>
506
- <organization>
507
- <name>International Organization for Standardization</name>
508
- <abbreviation>ISO</abbreviation>
509
- </organization>
510
- </contributor>
511
-
512
- <language>en</language>
513
- <script>Latn</script>
514
- <status>
515
- <stage abbreviation="IS">60</stage>
516
- <substage>60</substage>
517
- </status>
518
- <copyright>
519
- <from>#{Date.today.year}</from>
520
- <owner>
521
- <organization>
522
- <name>International Organization for Standardization</name>
523
- <abbreviation>ISO</abbreviation>
524
- </organization>
525
- </owner>
526
- </copyright>
527
- <ext>
528
- <doctype>article</doctype>
529
- <editorialgroup>
530
- <technical-committee/>
531
- <subcommittee/>
532
- <workgroup/>
533
- </editorialgroup>
534
- <structuredidentifier>
535
- <project-number>ISO 1000</project-number>
536
- </structuredidentifier>
537
- <stagename>International standard</stagename>
538
- </ext>
539
- </bibdata>
540
- <sections/>
541
- </iso-standard>
542
- OUTPUT
623
+ <language>en</language>
624
+ <script>Latn</script>
625
+ <status>
626
+ <stage abbreviation="PRF">60</stage>
627
+ <substage>00</substage>
628
+ </status>
629
+ <copyright>
630
+ <from>#{Date.today.year}</from>
631
+ <owner>
632
+ <organization>
633
+ <name>International Organization for Standardization</name>
634
+ <abbreviation>ISO</abbreviation>
635
+ </organization>
636
+ </owner>
637
+ </copyright>
638
+ <ext>
639
+ <doctype>article</doctype>
640
+ <editorialgroup>
641
+ <technical-committee/>
642
+ <subcommittee/>
643
+ <workgroup/>
644
+ </editorialgroup>
645
+ <structuredidentifier>
646
+ <project-number>ISO 1000</project-number>
647
+ </structuredidentifier>
648
+ <stagename>Proof</stagename>
649
+ </ext>
650
+ </bibdata>
651
+ <sections/>
652
+ </iso-standard>
653
+ OUTPUT
543
654
  end
544
655
 
545
- it "populates metadata for PRF" do
656
+ it "defaults metadata for DIR" do
546
657
  output = Asciidoctor.convert(<<~"INPUT", *OPTIONS)
547
658
  = Document title
548
659
  Author
@@ -551,62 +662,62 @@ RSpec.describe Asciidoctor::ISO do
551
662
  :novalid:
552
663
  :no-isobib:
553
664
  :docnumber: 1000
554
- :docstage: 60
555
- :docsubstage: 00
665
+ :doctype: directive
556
666
  INPUT
557
- expect(xmlpp(output.sub(%r{<boilerplate>.*</boilerplate>}m, ""))).to be_equivalent_to xmlpp(<<~"OUTPUT")
558
- <iso-standard xmlns="https://www.metanorma.org/ns/iso" type="semantic" version="#{Metanorma::ISO::VERSION}">
559
- <bibdata type="standard">
560
- <docidentifier type="ISO">ISO 1000</docidentifier>
561
- <docidentifier type='iso-with-lang'>ISO 1000(E)</docidentifier>
562
- <docidentifier type='iso-reference'>ISO 1000(E)</docidentifier>
563
- <docnumber>1000</docnumber>
564
- <contributor>
565
- <role type="author"/>
566
- <organization>
567
- <name>International Organization for Standardization</name>
568
- <abbreviation>ISO</abbreviation>
569
- </organization>
570
- </contributor>
571
- <contributor>
572
- <role type="publisher"/>
573
- <organization>
574
- <name>International Organization for Standardization</name>
575
- <abbreviation>ISO</abbreviation>
576
- </organization>
577
- </contributor>
578
667
 
579
- <language>en</language>
580
- <script>Latn</script>
581
- <status>
582
- <stage abbreviation="PRF">60</stage>
583
- <substage>00</substage>
584
- </status>
585
- <copyright>
586
- <from>#{Date.today.year}</from>
587
- <owner>
668
+ expect(xmlpp(output.sub(%r{<boilerplate>.*</boilerplate>}m, "")))
669
+ .to be_equivalent_to xmlpp(<<~"OUTPUT")
670
+ <iso-standard xmlns="https://www.metanorma.org/ns/iso" type="semantic" version="#{Metanorma::ISO::VERSION}">
671
+ <bibdata type='standard'>
672
+ <docidentifier type='ISO'>ISO DIR 1000</docidentifier>
673
+ <docidentifier type='iso-with-lang'>ISO DIR 1000(E)</docidentifier>
674
+ <docidentifier type='iso-reference'>ISO DIR 1000(E)</docidentifier>
675
+ <docnumber>1000</docnumber>
676
+ <contributor>
677
+ <role type='author'/>
588
678
  <organization>
589
679
  <name>International Organization for Standardization</name>
590
680
  <abbreviation>ISO</abbreviation>
591
681
  </organization>
592
- </owner>
593
- </copyright>
594
- <ext>
595
- <doctype>article</doctype>
596
- <editorialgroup>
597
- <technical-committee/>
598
- <subcommittee/>
599
- <workgroup/>
600
- </editorialgroup>
601
- <structuredidentifier>
602
- <project-number>ISO 1000</project-number>
603
- </structuredidentifier>
604
- <stagename>Proof</stagename>
605
- </ext>
606
- </bibdata>
607
- <sections/>
608
- </iso-standard>
609
- OUTPUT
682
+ </contributor>
683
+ <contributor>
684
+ <role type='publisher'/>
685
+ <organization>
686
+ <name>International Organization for Standardization</name>
687
+ <abbreviation>ISO</abbreviation>
688
+ </organization>
689
+ </contributor>
690
+ <language>en</language>
691
+ <script>Latn</script>
692
+ <status>
693
+ <stage abbreviation='IS'>60</stage>
694
+ <substage>60</substage>
695
+ </status>
696
+ <copyright>
697
+ <from>2021</from>
698
+ <owner>
699
+ <organization>
700
+ <name>International Organization for Standardization</name>
701
+ <abbreviation>ISO</abbreviation>
702
+ </organization>
703
+ </owner>
704
+ </copyright>
705
+ <ext>
706
+ <doctype>directive</doctype>
707
+ <editorialgroup>
708
+ <technical-committee/>
709
+ <subcommittee/>
710
+ <workgroup/>
711
+ </editorialgroup>
712
+ <structuredidentifier>
713
+ <project-number>ISO 1000</project-number>
714
+ </structuredidentifier>
715
+ <stagename>International standard</stagename>
716
+ </ext>
717
+ </bibdata>
718
+ <sections> </sections>
719
+ </iso-standard>
720
+ OUTPUT
610
721
  end
611
722
 
612
723
  it "reads scripts into blank HTML document" do
@@ -632,9 +743,12 @@ RSpec.describe Asciidoctor::ISO do
632
743
  :no-pdf:
633
744
  INPUT
634
745
  html = File.read("test.html", encoding: "utf-8")
635
- expect(html).to match(%r[\bpre[^{]+\{[^{]+font-family: "Courier New", monospace;]m)
636
- expect(html).to match(%r[blockquote[^{]+\{[^{]+font-family: "Cambria", serif;]m)
637
- expect(html).to match(%r[\.h2Annex[^{]+\{[^{]+font-family: "Cambria", serif;]m)
746
+ expect(html)
747
+ .to match(%r[\bpre[^{]+\{[^{]+font-family: "Courier New", monospace;]m)
748
+ expect(html)
749
+ .to match(%r[blockquote[^{]+\{[^{]+font-family: "Cambria", serif;]m)
750
+ expect(html)
751
+ .to match(%r[\.h2Annex[^{]+\{[^{]+font-family: "Cambria", serif;]m)
638
752
  end
639
753
 
640
754
  it "uses default fonts for alt doc" do
@@ -647,9 +761,12 @@ RSpec.describe Asciidoctor::ISO do
647
761
  :no-pdf:
648
762
  INPUT
649
763
  html = File.read("test_alt.html", encoding: "utf-8")
650
- expect(html).to match(%r[\bpre[^{]+\{[^{]+font-family: "Space Mono", monospace;]m)
651
- expect(html).to match(%r[blockquote[^{]+\{[^{]+font-family: "Lato", sans-serif;]m)
652
- expect(html).to match(%r[\.h2Annex[^{]+\{[^{]+font-family: "Lato", sans-serif;]m)
764
+ expect(html)
765
+ .to match(%r[\bpre[^{]+\{[^{]+font-family: "Space Mono", monospace;]m)
766
+ expect(html)
767
+ .to match(%r[blockquote[^{]+\{[^{]+font-family: "Lato", sans-serif;]m)
768
+ expect(html)
769
+ .to match(%r[\.h2Annex[^{]+\{[^{]+font-family: "Lato", sans-serif;]m)
653
770
  end
654
771
 
655
772
  it "uses Chinese fonts" do
@@ -663,9 +780,12 @@ RSpec.describe Asciidoctor::ISO do
663
780
  :no-pdf:
664
781
  INPUT
665
782
  html = File.read("test.html", encoding: "utf-8")
666
- expect(html).to match(%r[\bpre[^{]+\{[^{]+font-family: "Courier New", monospace;]m)
667
- expect(html).to match(%r[blockquote[^{]+\{[^{]+font-family: "Source Han Sans", serif;]m)
668
- expect(html).to match(%r[\.h2Annex[^{]+\{[^{]+font-family: "Source Han Sans", sans-serif;]m)
783
+ expect(html)
784
+ .to match(%r[\bpre[^{]+\{[^{]+font-family: "Courier New", monospace;]m)
785
+ expect(html)
786
+ .to match(%r[blockquote[^{]+\{[^{]+font-family: "Source Han Sans", serif;]m)
787
+ expect(html)
788
+ .to match(%r[\.h2Annex[^{]+\{[^{]+font-family: "Source Han Sans", sans-serif;]m)
669
789
  end
670
790
 
671
791
  it "uses specified fonts" do
@@ -683,7 +803,8 @@ RSpec.describe Asciidoctor::ISO do
683
803
  INPUT
684
804
  html = File.read("test.html", encoding: "utf-8")
685
805
  expect(html).to match(%r[\bpre[^{]+\{[^{]+font-family: Andale Mono;]m)
686
- expect(html).to match(%r[blockquote[^{]+\{[^{]+font-family: Zapf Chancery;]m)
806
+ expect(html)
807
+ .to match(%r[blockquote[^{]+\{[^{]+font-family: Zapf Chancery;]m)
687
808
  expect(html).to match(%r[\.h2Annex[^{]+\{[^{]+font-family: Comic Sans;]m)
688
809
  end
689
810