metanorma-iso 1.8.1 → 1.8.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) 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 +1 -0
  6. data/lib/asciidoctor/iso/biblio.rng +1 -0
  7. data/lib/asciidoctor/iso/cleanup.rb +17 -5
  8. data/lib/asciidoctor/iso/front.rb +3 -1
  9. data/lib/asciidoctor/iso/front_id.rb +66 -50
  10. data/lib/asciidoctor/iso/isodoc.rng +209 -4
  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_section.rb +16 -9
  15. data/lib/isodoc/iso/base_convert.rb +13 -13
  16. data/lib/isodoc/iso/html/isodoc.css +475 -20
  17. data/lib/isodoc/iso/html/isodoc.scss +456 -23
  18. data/lib/isodoc/iso/html/wordstyle.css +202 -31
  19. data/lib/isodoc/iso/html/wordstyle.scss +194 -32
  20. data/lib/isodoc/iso/iso.amendment.xsl +679 -473
  21. data/lib/isodoc/iso/iso.international-standard.xsl +679 -473
  22. data/lib/isodoc/iso/metadata.rb +3 -2
  23. data/lib/isodoc/iso/presentation_xml_convert.rb +18 -9
  24. data/lib/isodoc/iso/sts_convert.rb +10 -13
  25. data/lib/isodoc/iso/word_convert.rb +153 -39
  26. data/lib/isodoc/iso/xref.rb +42 -27
  27. data/lib/metanorma/iso/version.rb +1 -1
  28. data/metanorma-iso.gemspec +4 -4
  29. data/spec/asciidoctor/base_spec.rb +426 -334
  30. data/spec/asciidoctor/blocks_spec.rb +96 -34
  31. data/spec/asciidoctor/cleanup_spec.rb +383 -25
  32. data/spec/asciidoctor/section_spec.rb +0 -14
  33. data/spec/asciidoctor/validate_spec.rb +119 -39
  34. data/spec/isodoc/amd_spec.rb +193 -201
  35. data/spec/isodoc/blocks_spec.rb +100 -88
  36. data/spec/isodoc/i18n_spec.rb +36 -36
  37. data/spec/isodoc/inline_spec.rb +282 -2
  38. data/spec/isodoc/iso_spec.rb +86 -138
  39. data/spec/isodoc/postproc_spec.rb +492 -442
  40. data/spec/isodoc/ref_spec.rb +6 -6
  41. data/spec/isodoc/section_spec.rb +301 -306
  42. data/spec/isodoc/table_spec.rb +166 -231
  43. data/spec/isodoc/terms_spec.rb +11 -8
  44. data/spec/isodoc/xref_spec.rb +147 -118
  45. data/spec/spec_helper.rb +16 -15
  46. metadata +9 -9
@@ -1,5 +1,5 @@
1
1
  module Metanorma
2
2
  module ISO
3
- VERSION = "1.8.1".freeze
3
+ VERSION = "1.8.6".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"
33
- spec.add_dependency "metanorma-standoc", "~> 1.9.0"
34
- spec.add_dependency "mn2sts", "~> 1.5.0"
32
+ spec.add_dependency "isodoc", "~> 1.7.0"
33
+ spec.add_dependency "metanorma-standoc", "~> 1.10.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,131 +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
- <address>
242
- <formattedAddress>1 Infinity Loop + California</formattedAddress>
243
- </address>
244
- <phone>3333333</phone>
245
- <phone type='fax'>4444444</phone>
246
- <email>x@example.com</email>
247
- <uri>http://www.example.com</uri>
248
- </organization>
249
- </contributor>
250
- <contributor>
251
- <role type="publisher"/>
252
- <organization>
253
- <name>IETF</name>
254
- <address>
255
- <formattedAddress>1 Infinity Loop + California</formattedAddress>
256
- </address>
257
- <phone>3333333</phone>
258
- <phone type='fax'>4444444</phone>
259
- <email>x@example.com</email>
260
- <uri>http://www.example.com</uri>
261
- </organization>
262
- </contributor>
263
- <contributor>
264
- <role type="publisher"/>
265
- <organization>
266
- <name>International Organization for Standardization</name>
267
- <abbreviation>ISO</abbreviation>
268
- <address>
269
- <formattedAddress>1 Infinity Loop + California</formattedAddress>
270
- </address>
271
- <phone>3333333</phone>
272
- <phone type='fax'>4444444</phone>
273
- <email>x@example.com</email>
274
- <uri>http://www.example.com</uri>
275
- </organization>
276
- </contributor>
277
- <language>el</language>
278
- <script>Grek</script>
279
- <status>
280
- <stage abbreviation="IS">60</stage>
281
- <substage>60</substage>
282
- </status>
283
- <copyright>
284
- <from>2001</from>
285
- <owner>
286
- <organization>
287
- <name>International Organization for Standardization</name>
288
- <abbreviation>ISO</abbreviation>
289
- <address>
290
- <formattedAddress>1 Infinity Loop + California</formattedAddress>
291
- </address>
292
- <phone>3333333</phone>
293
- <phone type='fax'>4444444</phone>
294
- <email>x@example.com</email>
295
- <uri>http://www.example.com</uri>
296
-
297
- </organization>
298
- </owner>
299
- </copyright>
300
- <copyright>
301
- <from>2001</from>
302
- <owner>
303
- <organization>
304
- <name>IETF</name>
305
- <address>
306
- <formattedAddress>1 Infinity Loop + California</formattedAddress>
307
- </address>
308
- <phone>3333333</phone>
309
- <phone type='fax'>4444444</phone>
310
- <email>x@example.com</email>
311
- <uri>http://www.example.com</uri>
312
- </organization>
313
- </owner>
314
- </copyright>
315
- <ext>
316
- <doctype>technical-report</doctype>
317
- <editorialgroup>
318
- <technical-committee/>
319
- <subcommittee/>
320
- <workgroup/>
321
- </editorialgroup>
322
- <structuredidentifier>
323
- <project-number part="1" subpart="1">ISO/IEC/IETF 1000</project-number>
324
- </structuredidentifier>
325
- <stagename>International standard</stagename>
326
- </ext>
327
- </bibdata>
328
- <sections/>
329
- </iso-standard>
330
- 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
331
342
  end
332
343
 
333
344
  it "processes subdivisions" do
@@ -354,7 +365,8 @@ RSpec.describe Asciidoctor::ISO do
354
365
  :pub-email: x@example.com
355
366
  :pub-uri: http://www.example.com
356
367
  INPUT
357
- expect(xmlpp(strip_guid(output.sub(%r{<boilerplate>.*</boilerplate>}m, ""))))
368
+ expect(xmlpp(strip_guid(output
369
+ .sub(%r{<boilerplate>.*</boilerplate>}m, ""))))
358
370
  .to be_equivalent_to xmlpp(<<~"OUTPUT")
359
371
  <iso-standard xmlns="https://www.metanorma.org/ns/iso" type="semantic" version="#{Metanorma::ISO::VERSION}">
360
372
  <bibdata type='standard'>
@@ -449,12 +461,81 @@ RSpec.describe Asciidoctor::ISO do
449
461
  :doctype: international-standard
450
462
  :iteration: 2
451
463
  INPUT
452
- expect(xmlpp(output.sub(%r{<boilerplate>.*</boilerplate>}m, ""))).to be_equivalent_to xmlpp(<<~"OUTPUT")
453
- <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}">
454
535
  <bibdata type="standard">
455
- <docidentifier type='ISO'>ISO/FDIS 1000.2</docidentifier>
456
- <docidentifier type='iso-with-lang'>ISO/FDIS 1000.2(F)</docidentifier>
457
- <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>
458
539
  <docnumber>1000</docnumber>
459
540
  <contributor>
460
541
  <role type="author"/>
@@ -470,12 +551,12 @@ RSpec.describe Asciidoctor::ISO do
470
551
  <abbreviation>ISO</abbreviation>
471
552
  </organization>
472
553
  </contributor>
473
- <language>fr</language>
554
+
555
+ <language>en</language>
474
556
  <script>Latn</script>
475
557
  <status>
476
- <stage abbreviation="FDIS">50</stage>
477
- <substage>00</substage>
478
- <iteration>2</iteration>
558
+ <stage abbreviation="IS">60</stage>
559
+ <substage>60</substage>
479
560
  </status>
480
561
  <copyright>
481
562
  <from>#{Date.today.year}</from>
@@ -487,7 +568,7 @@ RSpec.describe Asciidoctor::ISO do
487
568
  </owner>
488
569
  </copyright>
489
570
  <ext>
490
- <doctype>international-standard</doctype>
571
+ <doctype>article</doctype>
491
572
  <editorialgroup>
492
573
  <technical-committee/>
493
574
  <subcommittee/>
@@ -496,15 +577,15 @@ RSpec.describe Asciidoctor::ISO do
496
577
  <structuredidentifier>
497
578
  <project-number>ISO 1000</project-number>
498
579
  </structuredidentifier>
499
- <stagename>Final draft</stagename>
580
+ <stagename>International standard</stagename>
500
581
  </ext>
501
582
  </bibdata>
502
583
  <sections/>
503
- </iso-standard>
504
- OUTPUT
584
+ </iso-standard>
585
+ OUTPUT
505
586
  end
506
587
 
507
- it "defaults substage for stage 60" do
588
+ it "populates metadata for PRF" do
508
589
  output = Asciidoctor.convert(<<~"INPUT", *OPTIONS)
509
590
  = Document title
510
591
  Author
@@ -514,64 +595,65 @@ RSpec.describe Asciidoctor::ISO do
514
595
  :no-isobib:
515
596
  :docnumber: 1000
516
597
  :docstage: 60
598
+ :docsubstage: 00
517
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>
518
622
 
519
- expect(xmlpp(output.sub(%r{<boilerplate>.*</boilerplate>}m, ""))).to be_equivalent_to xmlpp(<<~"OUTPUT")
520
- <iso-standard xmlns="https://www.metanorma.org/ns/iso" type="semantic" version="#{Metanorma::ISO::VERSION}">
521
- <bibdata type="standard">
522
- <docidentifier type="ISO">ISO 1000</docidentifier>
523
- <docidentifier type='iso-with-lang'>ISO 1000(E)</docidentifier>
524
- <docidentifier type='iso-reference'>ISO 1000(E)</docidentifier>
525
- <docnumber>1000</docnumber>
526
- <contributor>
527
- <role type="author"/>
528
- <organization>
529
- <name>International Organization for Standardization</name>
530
- <abbreviation>ISO</abbreviation>
531
- </organization>
532
- </contributor>
533
- <contributor>
534
- <role type="publisher"/>
535
- <organization>
536
- <name>International Organization for Standardization</name>
537
- <abbreviation>ISO</abbreviation>
538
- </organization>
539
- </contributor>
540
-
541
- <language>en</language>
542
- <script>Latn</script>
543
- <status>
544
- <stage abbreviation="IS">60</stage>
545
- <substage>60</substage>
546
- </status>
547
- <copyright>
548
- <from>#{Date.today.year}</from>
549
- <owner>
550
- <organization>
551
- <name>International Organization for Standardization</name>
552
- <abbreviation>ISO</abbreviation>
553
- </organization>
554
- </owner>
555
- </copyright>
556
- <ext>
557
- <doctype>article</doctype>
558
- <editorialgroup>
559
- <technical-committee/>
560
- <subcommittee/>
561
- <workgroup/>
562
- </editorialgroup>
563
- <structuredidentifier>
564
- <project-number>ISO 1000</project-number>
565
- </structuredidentifier>
566
- <stagename>International standard</stagename>
567
- </ext>
568
- </bibdata>
569
- <sections/>
570
- </iso-standard>
571
- 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
572
654
  end
573
655
 
574
- it "populates metadata for PRF" do
656
+ it "defaults metadata for DIR" do
575
657
  output = Asciidoctor.convert(<<~"INPUT", *OPTIONS)
576
658
  = Document title
577
659
  Author
@@ -580,62 +662,62 @@ RSpec.describe Asciidoctor::ISO do
580
662
  :novalid:
581
663
  :no-isobib:
582
664
  :docnumber: 1000
583
- :docstage: 60
584
- :docsubstage: 00
665
+ :doctype: directive
585
666
  INPUT
586
- expect(xmlpp(output.sub(%r{<boilerplate>.*</boilerplate>}m, ""))).to be_equivalent_to xmlpp(<<~"OUTPUT")
587
- <iso-standard xmlns="https://www.metanorma.org/ns/iso" type="semantic" version="#{Metanorma::ISO::VERSION}">
588
- <bibdata type="standard">
589
- <docidentifier type="ISO">ISO 1000</docidentifier>
590
- <docidentifier type='iso-with-lang'>ISO 1000(E)</docidentifier>
591
- <docidentifier type='iso-reference'>ISO 1000(E)</docidentifier>
592
- <docnumber>1000</docnumber>
593
- <contributor>
594
- <role type="author"/>
595
- <organization>
596
- <name>International Organization for Standardization</name>
597
- <abbreviation>ISO</abbreviation>
598
- </organization>
599
- </contributor>
600
- <contributor>
601
- <role type="publisher"/>
602
- <organization>
603
- <name>International Organization for Standardization</name>
604
- <abbreviation>ISO</abbreviation>
605
- </organization>
606
- </contributor>
607
667
 
608
- <language>en</language>
609
- <script>Latn</script>
610
- <status>
611
- <stage abbreviation="PRF">60</stage>
612
- <substage>00</substage>
613
- </status>
614
- <copyright>
615
- <from>#{Date.today.year}</from>
616
- <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'/>
617
678
  <organization>
618
679
  <name>International Organization for Standardization</name>
619
680
  <abbreviation>ISO</abbreviation>
620
681
  </organization>
621
- </owner>
622
- </copyright>
623
- <ext>
624
- <doctype>article</doctype>
625
- <editorialgroup>
626
- <technical-committee/>
627
- <subcommittee/>
628
- <workgroup/>
629
- </editorialgroup>
630
- <structuredidentifier>
631
- <project-number>ISO 1000</project-number>
632
- </structuredidentifier>
633
- <stagename>Proof</stagename>
634
- </ext>
635
- </bibdata>
636
- <sections/>
637
- </iso-standard>
638
- 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
639
721
  end
640
722
 
641
723
  it "reads scripts into blank HTML document" do
@@ -661,9 +743,12 @@ RSpec.describe Asciidoctor::ISO do
661
743
  :no-pdf:
662
744
  INPUT
663
745
  html = File.read("test.html", encoding: "utf-8")
664
- expect(html).to match(%r[\bpre[^{]+\{[^{]+font-family: "Courier New", monospace;]m)
665
- expect(html).to match(%r[blockquote[^{]+\{[^{]+font-family: "Cambria", serif;]m)
666
- 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)
667
752
  end
668
753
 
669
754
  it "uses default fonts for alt doc" do
@@ -676,9 +761,12 @@ RSpec.describe Asciidoctor::ISO do
676
761
  :no-pdf:
677
762
  INPUT
678
763
  html = File.read("test_alt.html", encoding: "utf-8")
679
- expect(html).to match(%r[\bpre[^{]+\{[^{]+font-family: "Space Mono", monospace;]m)
680
- expect(html).to match(%r[blockquote[^{]+\{[^{]+font-family: "Lato", sans-serif;]m)
681
- 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)
682
770
  end
683
771
 
684
772
  it "uses Chinese fonts" do
@@ -692,9 +780,12 @@ RSpec.describe Asciidoctor::ISO do
692
780
  :no-pdf:
693
781
  INPUT
694
782
  html = File.read("test.html", encoding: "utf-8")
695
- expect(html).to match(%r[\bpre[^{]+\{[^{]+font-family: "Courier New", monospace;]m)
696
- expect(html).to match(%r[blockquote[^{]+\{[^{]+font-family: "Source Han Sans", serif;]m)
697
- 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)
698
789
  end
699
790
 
700
791
  it "uses specified fonts" do
@@ -712,7 +803,8 @@ RSpec.describe Asciidoctor::ISO do
712
803
  INPUT
713
804
  html = File.read("test.html", encoding: "utf-8")
714
805
  expect(html).to match(%r[\bpre[^{]+\{[^{]+font-family: Andale Mono;]m)
715
- expect(html).to match(%r[blockquote[^{]+\{[^{]+font-family: Zapf Chancery;]m)
806
+ expect(html)
807
+ .to match(%r[blockquote[^{]+\{[^{]+font-family: Zapf Chancery;]m)
716
808
  expect(html).to match(%r[\.h2Annex[^{]+\{[^{]+font-family: Comic Sans;]m)
717
809
  end
718
810