metanorma-standoc 1.9.3 → 1.9.4

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.
@@ -9,8 +9,8 @@ require "latexmath"
9
9
  module Asciidoctor
10
10
  module Standoc
11
11
  module Inline
12
- def refid?(x)
13
- @refids.include? x
12
+ def refid?(ref)
13
+ @refids.include? ref
14
14
  end
15
15
 
16
16
  def inline_anchor(node)
@@ -58,7 +58,8 @@ module Asciidoctor
58
58
  def inline_anchor_link(node)
59
59
  contents = node.text
60
60
  contents = "" if node.target.gsub(%r{^mailto:}, "") == node.text
61
- attributes = { "target": node.target, "alt": node.attr("title") }
61
+ attributes = { "target": node.target, "alt": node.attr("title"),
62
+ "updatetype": node.attr("updatetype") }
62
63
  noko do |xml|
63
64
  xml.link **attr_code(attributes) do |l|
64
65
  l << contents
@@ -67,8 +68,8 @@ module Asciidoctor
67
68
  end
68
69
 
69
70
  def inline_anchor_bibref(node)
70
- eref_contents = (node.text || node.target || node.id)&.
71
- sub(/^\[?([^\[\]]+?)\]?$/, "[\\1]")
71
+ eref_contents = (node.text || node.target || node.id)
72
+ &.sub(/^\[?([^\[\]]+?)\]?$/, "[\\1]")
72
73
  eref_attributes = { id: node.target || node.id }
73
74
  @refids << (node.target || node.id)
74
75
  noko do |xml|
@@ -105,7 +106,7 @@ module Asciidoctor
105
106
  attrs = {}
106
107
  node.option?("landscape") and attrs[:orientation] = "landscape"
107
108
  node.option?("portrait") and attrs[:orientation] = "portrait"
108
- noko { |xml| xml.pagebreak **attr_code(attrs)}.join
109
+ noko { |xml| xml.pagebreak **attr_code(attrs) }.join
109
110
  end
110
111
 
111
112
  def thematic_break(_node)
@@ -113,30 +114,31 @@ module Asciidoctor
113
114
  end
114
115
 
115
116
  def xml_encode(text)
116
- HTMLEntities.new.encode(text, :basic, :hexadecimal).
117
- gsub(/&amp;gt;/, ">").gsub(/\&amp;lt;/, "<").gsub(/&amp;amp;/, "&").
118
- gsub(/&gt;/, ">").gsub(/&lt;/, "<").gsub(/&amp;/, "&").
119
- gsub(/&quot;/, '"').gsub(/&#xa;/, "\n").gsub(/&amp;#/, "&#")
117
+ HTMLEntities.new.encode(text, :basic, :hexadecimal)
118
+ .gsub(/&amp;gt;/, ">").gsub(/\&amp;lt;/, "<").gsub(/&amp;amp;/, "&")
119
+ .gsub(/&gt;/, ">").gsub(/&lt;/, "<").gsub(/&amp;/, "&")
120
+ .gsub(/&quot;/, '"').gsub(/&#xa;/, "\n").gsub(/&amp;#/, "&#")
120
121
  end
121
122
 
122
123
  def latex_parse(text)
123
124
  lxm_input = Unicode2LaTeX.unicode2latex(HTMLEntities.new.decode(text))
124
125
  results = Latexmath.parse(lxm_input).to_mathml
125
126
  results.nil? and
126
- @log.add('Math', nil,
127
+ @log.add("Math", nil,
127
128
  "latexmlmath failed to process equation:\n#{lxm_input}")
128
129
  results&.sub(%r{<math ([^>]+ )?display="block"}, "<math \\1")
129
130
  end
130
131
 
131
132
  def stem_parse(text, xml, style)
132
133
  if /&lt;([^:>&]+:)?math(\s+[^>&]+)?&gt; |
133
- <([^:>&]+:)?math(\s+[^>&]+)?>/x.match text
134
+ <([^:>&]+:)?math(\s+[^>&]+)?>/x.match? text
134
135
  math = xml_encode(text)
135
136
  xml.stem math, **{ type: "MathML" }
136
137
  elsif style == :latexmath
137
138
  latex = latex_parse(text) or return xml.stem **{ type: "MathML" }
138
139
  xml.stem **{ type: "MathML" } do |s|
139
- math = Nokogiri::XML.fragment(latex.sub(/<\?[^>]+>/, "")).elements[0]
140
+ math = Nokogiri::XML.fragment(latex.sub(/<\?[^>]+>/, ""))
141
+ .elements[0]
140
142
  math.delete("alttext")
141
143
  s.parent.children = math
142
144
  end
@@ -145,9 +147,9 @@ module Asciidoctor
145
147
  end
146
148
  end
147
149
 
148
- def highlight_parse(text, xml)
149
- xml << text
150
- end
150
+ def highlight_parse(text, xml)
151
+ xml << text
152
+ end
151
153
 
152
154
  def inline_quoted(node)
153
155
  noko do |xml|
@@ -182,14 +184,20 @@ module Asciidoctor
182
184
 
183
185
  def image_attributes(node)
184
186
  uri = node.image_uri (node.attr("target") || node.target)
185
- types = /^data:/.match(uri) ? Metanorma::Utils::datauri2mime(uri) : MIME::Types.type_for(uri)
187
+ types = if /^data:/.match?(uri) then Metanorma::Utils::datauri2mime(uri)
188
+ else MIME::Types.type_for(uri)
189
+ end
186
190
  type = types.first.to_s
187
191
  uri = uri.sub(%r{^data:image/\*;}, "data:#{type};")
188
- attr_code(src: uri,
192
+ image_attributes1(node, uri, type)
193
+ end
194
+
195
+ def image_attributes1(node, uri, type)
196
+ attr_code(src: uri,
189
197
  id: Metanorma::Utils::anchor_or_uuid,
190
198
  mimetype: type,
191
199
  height: node.attr("height") || "auto",
192
- width: node.attr("width") || "auto" ,
200
+ width: node.attr("width") || "auto",
193
201
  filename: node.attr("filename"),
194
202
  title: node.attr("titleattr"),
195
203
  alt: node.alt == node.attr("default-alt") ? nil : node.alt)
@@ -197,14 +205,14 @@ module Asciidoctor
197
205
 
198
206
  def inline_image(node)
199
207
  noko do |xml|
200
- xml.image **(image_attributes(node))
208
+ xml.image **image_attributes(node)
201
209
  end.join("")
202
210
  end
203
211
 
204
212
  def inline_indexterm(node)
205
213
  noko do |xml|
206
214
  node.type == :visible and xml << node.text
207
- terms = (node.attr("terms") || [node.text]).map { |x| xml_encode(x) }
215
+ terms = (node.attr("terms") || [node.text]).map { |x| xml_encode(x) }
208
216
  xml.index do |i|
209
217
  i.primary { |x| x << terms[0] }
210
218
  a = terms.dig(1) and i.secondary { |x| x << a }
@@ -45,6 +45,11 @@
45
45
  <optional>
46
46
  <attribute name="alt"/>
47
47
  </optional>
48
+ <optional>
49
+ <attribute name="updatetype">
50
+ <data type="boolean"/>
51
+ </attribute>
52
+ </optional>
48
53
  <text/>
49
54
  </element>
50
55
  </define>
@@ -543,6 +548,9 @@
543
548
  </define>
544
549
  <define name="BibDataExtensionType">
545
550
  <ref name="doctype"/>
551
+ <optional>
552
+ <ref name="docsubtype"/>
553
+ </optional>
546
554
  <optional>
547
555
  <ref name="editorialgroup"/>
548
556
  </optional>
@@ -890,6 +898,14 @@
890
898
  </define>
891
899
  </include>
892
900
  <!-- end overrides -->
901
+ <define name="docsubtype">
902
+ <element name="docsubtype">
903
+ <ref name="DocumentSubtype"/>
904
+ </element>
905
+ </define>
906
+ <define name="DocumentSubtype">
907
+ <text/>
908
+ </define>
893
909
  <define name="colgroup">
894
910
  <element name="colgroup">
895
911
  <oneOrMore>
@@ -19,6 +19,6 @@ module Metanorma
19
19
  end
20
20
 
21
21
  module Standoc
22
- VERSION = "1.9.3".freeze
22
+ VERSION = "1.9.4".freeze
23
23
  end
24
24
  end
@@ -7,155 +7,167 @@ RSpec.describe Asciidoctor::Standoc do
7
7
  end
8
8
 
9
9
  it "processes a blank document" do
10
- expect(Asciidoctor.convert(<<~"INPUT", *OPTIONS)).to be_equivalent_to <<~"OUTPUT"
11
- #{ASCIIDOC_BLANK_HDR}
10
+ input = <<~INPUT
11
+ #{ASCIIDOC_BLANK_HDR}
12
12
  INPUT
13
- #{BLANK_HDR}
14
- <sections/>
15
- </standard-document>
13
+ output = <<~OUTPUT
14
+ #{BLANK_HDR}
15
+ <sections/>
16
+ </standard-document>
16
17
  OUTPUT
18
+ expect(xmlpp(Asciidoctor.convert(input, *OPTIONS)))
19
+ .to be_equivalent_to xmlpp(output)
17
20
  end
18
21
 
19
22
  it "converts a blank document" do
20
23
  FileUtils.rm_f "test.doc"
21
- expect(xmlpp(Asciidoctor.convert(<<~"INPUT", *OPTIONS))).to be_equivalent_to xmlpp(<<~"OUTPUT")
24
+ input = <<~INPUT
22
25
  = Document title
23
26
  Author
24
27
  :docfile: test.adoc
25
28
  :novalid:
26
29
  INPUT
27
- #{BLANK_HDR}
28
- <sections/>
29
- </standard-document>
30
+ output = <<~OUTPUT
31
+ #{BLANK_HDR}
32
+ <sections/>
33
+ </standard-document>
30
34
  OUTPUT
35
+ expect(xmlpp(Asciidoctor.convert(input, *OPTIONS)))
36
+ .to be_equivalent_to xmlpp(output)
31
37
  expect(File.exist?("test.doc")).to be true
32
38
  expect(File.exist?("htmlstyle.css")).to be false
33
39
  end
34
40
 
35
- it "assigns default scripts to major languages" do
41
+ it "assigns default scripts to major languages" do
36
42
  FileUtils.rm_f "test.doc"
37
- expect(xmlpp(Asciidoctor.convert(<<~"INPUT", *OPTIONS))).to be_equivalent_to xmlpp(<<~"OUTPUT")
43
+ input = <<~INPUT
38
44
  = Document title
39
45
  Author
40
46
  :docfile: test.adoc
41
47
  :novalid:
42
48
  :language: ar
43
49
  INPUT
44
- <standard-document xmlns='https://www.metanorma.org/ns/standoc' type='semantic' version='#{Metanorma::Standoc::VERSION}'>
45
- <bibdata type='standard'>
46
- <title language='en' format='text/plain'>Document title</title>
47
- <language>ar</language>
48
- <script>Arab</script>
49
- <status>
50
- <stage>published</stage>
51
- </status>
52
- <copyright>
53
- <from>2021</from>
54
- </copyright>
55
- <ext>
56
- <doctype>article</doctype>
57
- </ext>
58
- </bibdata>
59
- <sections> </sections>
60
- </standard-document>
50
+ output = <<~OUTPUT
51
+ <standard-document xmlns='https://www.metanorma.org/ns/standoc' type='semantic' version='#{Metanorma::Standoc::VERSION}'>
52
+ <bibdata type='standard'>
53
+ <title language='en' format='text/plain'>Document title</title>
54
+ <language>ar</language>
55
+ <script>Arab</script>
56
+ <status>
57
+ <stage>published</stage>
58
+ </status>
59
+ <copyright>
60
+ <from>2021</from>
61
+ </copyright>
62
+ <ext>
63
+ <doctype>article</doctype>
64
+ </ext>
65
+ </bibdata>
66
+ <sections> </sections>
67
+ </standard-document>
61
68
  OUTPUT
69
+ expect(xmlpp(Asciidoctor.convert(input, *OPTIONS)))
70
+ .to be_equivalent_to xmlpp(output)
62
71
  end
63
72
 
64
73
  it "processes publisher abbreviations" do
65
74
  mock_org_abbrevs
66
- expect(xmlpp(Asciidoctor.convert(<<~"INPUT", *OPTIONS))).to be_equivalent_to xmlpp(<<~"OUTPUT")
75
+ input = <<~INPUT
67
76
  = Document title
68
77
  Author
69
78
  :docfile: test.adoc
70
79
  :nodoc:
71
80
  :novalid:
72
81
  :publisher: International Electrotechnical Commission;IETF;ISO
73
- INPUT
74
- <standard-document xmlns='https://www.metanorma.org/ns/standoc' type='semantic' version='#{Metanorma::Standoc::VERSION}'>
75
- <bibdata type='standard'>
76
- <title language='en' format='text/plain'>Document title</title>
77
- <contributor>
78
- <role type='author'/>
79
- <organization>
80
- <name>International Electrotechnical Commission</name>
81
- <abbreviation>IEC</abbreviation>
82
- </organization>
83
- </contributor>
84
- <contributor>
85
- <role type='author'/>
86
- <organization>
87
- <name>IETF</name>
88
- </organization>
89
- </contributor>
90
- <contributor>
91
- <role type='author'/>
92
- <organization>
93
- <name>International Standards Organization</name>
94
- <abbreviation>ISO</abbreviation>
95
- </organization>
96
- </contributor>
97
- <contributor>
98
- <role type='publisher'/>
99
- <organization>
100
- <name>International Electrotechnical Commission</name>
101
- <abbreviation>IEC</abbreviation>
102
- </organization>
103
- </contributor>
104
- <contributor>
105
- <role type='publisher'/>
106
- <organization>
107
- <name>IETF</name>
108
- </organization>
109
- </contributor>
110
- <contributor>
111
- <role type='publisher'/>
112
- <organization>
113
- <name>International Standards Organization</name>
114
- <abbreviation>ISO</abbreviation>
115
- </organization>
116
- </contributor>
117
- <language>en</language>
118
- <script>Latn</script>
119
- <status>
120
- <stage>published</stage>
121
- </status>
122
- <copyright>
123
- <from>#{Time.now.year}</from>
124
- <owner>
125
- <organization>
126
- <name>International Electrotechnical Commission</name>
127
- <abbreviation>IEC</abbreviation>
128
- </organization>
129
- </owner>
130
- </copyright>
131
- <copyright>
132
- <from>#{Time.now.year}</from>
133
- <owner>
134
- <organization>
135
- <name>IETF</name>
136
- </organization>
137
- </owner>
138
- </copyright>
139
- <copyright>
140
- <from>#{Time.now.year}</from>
141
- <owner>
142
- <organization>
143
- <name>International Standards Organization</name>
144
- <abbreviation>ISO</abbreviation>
145
- </organization>
146
- </owner>
147
- </copyright>
148
- <ext>
149
- <doctype>article</doctype>
150
- </ext>
151
- </bibdata>
152
- <sections> </sections>
153
- </standard-document>
154
- OUTPUT
82
+ INPUT
83
+ output = <<~OUTPUT
84
+ <standard-document xmlns='https://www.metanorma.org/ns/standoc' type='semantic' version='#{Metanorma::Standoc::VERSION}'>
85
+ <bibdata type='standard'>
86
+ <title language='en' format='text/plain'>Document title</title>
87
+ <contributor>
88
+ <role type='author'/>
89
+ <organization>
90
+ <name>International Electrotechnical Commission</name>
91
+ <abbreviation>IEC</abbreviation>
92
+ </organization>
93
+ </contributor>
94
+ <contributor>
95
+ <role type='author'/>
96
+ <organization>
97
+ <name>IETF</name>
98
+ </organization>
99
+ </contributor>
100
+ <contributor>
101
+ <role type='author'/>
102
+ <organization>
103
+ <name>International Standards Organization</name>
104
+ <abbreviation>ISO</abbreviation>
105
+ </organization>
106
+ </contributor>
107
+ <contributor>
108
+ <role type='publisher'/>
109
+ <organization>
110
+ <name>International Electrotechnical Commission</name>
111
+ <abbreviation>IEC</abbreviation>
112
+ </organization>
113
+ </contributor>
114
+ <contributor>
115
+ <role type='publisher'/>
116
+ <organization>
117
+ <name>IETF</name>
118
+ </organization>
119
+ </contributor>
120
+ <contributor>
121
+ <role type='publisher'/>
122
+ <organization>
123
+ <name>International Standards Organization</name>
124
+ <abbreviation>ISO</abbreviation>
125
+ </organization>
126
+ </contributor>
127
+ <language>en</language>
128
+ <script>Latn</script>
129
+ <status>
130
+ <stage>published</stage>
131
+ </status>
132
+ <copyright>
133
+ <from>#{Time.now.year}</from>
134
+ <owner>
135
+ <organization>
136
+ <name>International Electrotechnical Commission</name>
137
+ <abbreviation>IEC</abbreviation>
138
+ </organization>
139
+ </owner>
140
+ </copyright>
141
+ <copyright>
142
+ <from>#{Time.now.year}</from>
143
+ <owner>
144
+ <organization>
145
+ <name>IETF</name>
146
+ </organization>
147
+ </owner>
148
+ </copyright>
149
+ <copyright>
150
+ <from>#{Time.now.year}</from>
151
+ <owner>
152
+ <organization>
153
+ <name>International Standards Organization</name>
154
+ <abbreviation>ISO</abbreviation>
155
+ </organization>
156
+ </owner>
157
+ </copyright>
158
+ <ext>
159
+ <doctype>article</doctype>
160
+ </ext>
161
+ </bibdata>
162
+ <sections> </sections>
163
+ </standard-document>
164
+ OUTPUT
165
+ expect(xmlpp(Asciidoctor.convert(input, *OPTIONS)))
166
+ .to be_equivalent_to xmlpp(output)
155
167
  end
156
168
 
157
169
  it "processes default metadata" do
158
- expect(xmlpp(Asciidoctor.convert(<<~"INPUT", *OPTIONS))).to be_equivalent_to xmlpp(<<~"OUTPUT")
170
+ input = <<~INPUT
159
171
  = Document title
160
172
  Author
161
173
  :docfile: test.adoc
@@ -242,270 +254,273 @@ OUTPUT
242
254
  :isbn10: ISBN-10
243
255
  :classification: a:b, c
244
256
  INPUT
245
- <?xml version="1.0" encoding="UTF-8"?>
246
- <standard-document xmlns="https://www.metanorma.org/ns/standoc" type="semantic" version="#{Metanorma::Standoc::VERSION}">
247
- <bibdata type="standard">
248
- <title language="en" format="text/plain">Main Title — Title</title>
249
- <docidentifier>1000-1</docidentifier>
250
- <docidentifier type='ISBN'>ISBN-13</docidentifier>
251
- <docidentifier type='ISBN10'>ISBN-10</docidentifier>
252
- <docnumber>1000</docnumber>
253
- <date type="published">
254
- <on>1000-01-01</on>
255
- </date>
256
- <date type="accessed">
257
- <on>1001-01-01</on>
258
- </date>
259
- <date type="created">
260
- <on>1002-01-01</on>
261
- </date>
262
- <date type="implemented">
263
- <on>1003-01-01</on>
264
- </date>
265
- <date type="obsoleted">
266
- <on>1004-01-01</on>
267
- </date>
268
- <date type="confirmed">
269
- <on>1005-01-01</on>
270
- </date>
271
- <date type="updated">
272
- <on>1006-01-01</on>
273
- </date>
274
- <date type="issued">
275
- <on>1007-01-01</on>
276
- </date>
277
- <date type="circulated">
278
- <on>1008-01-01</on>
279
- </date>
280
- <date type="unchanged">
281
- <on>1009-01-01</on>
282
- </date>
283
- <date type='vote-started'>
284
- <on>1011-01-01</on>
285
- </date>
286
- <date type='vote-ended'>
287
- <on>1012-01-01</on>
288
- </date>
289
- <date type="Fred">
290
- <on>1010-01-01</on>
291
- </date>
292
- <date type="Jack">
293
- <on>1010-01-01</on>
294
- </date>
295
- <contributor>
296
- <role type="author"/>
297
- <organization>
298
- <name>Hanna Barbera</name>
299
- </organization>
300
- </contributor>
301
- <contributor>
302
- <role type="author"/>
303
- <organization>
304
- <name>Cartoon Network</name>
305
- </organization>
306
- </contributor>
307
- <contributor>
308
- <role type="author"/>
309
- <organization>
310
- <name>Ribose, Inc.</name>
311
- </organization>
312
- </contributor>
313
- <contributor>
314
- <role type="author"/>
315
- <person>
316
- <name>
317
- <completename>Fred Flintstone</completename>
318
- </name>
319
- <affiliation>
320
- <organization>
321
- <name>Slate Rock and Gravel Company</name>
322
- <abbreviation>SRG</abbreviation>
323
- <subdivision>Hermeneutics Unit</subdivision>
324
- <subdivision>Exegetical Subunit</subdivision>
325
- <address>
326
- <formattedAddress>
327
- 6 Rubble Way, Bedrock
328
- </formattedAddress>
329
- </address>
330
- </organization>
331
- </affiliation>
332
- <phone>123</phone>
333
- <phone type='fax'>456</phone>
334
- <uri>http://slate.example.com</uri>
335
- </person>
336
- </contributor>
337
- <contributor>
338
- <role type="editor"/>
339
- <person>
340
- <name>
341
- <forename>Barney</forename>
342
- <initial>B. X.</initial>
343
- <surname>Rubble</surname>
344
- </name>
345
- <affiliation>
346
- <organization>
347
- <name>Rockhead and Quarry Cave Construction Company</name>
348
- <abbreviation>RQCCC</abbreviation>
349
- <subdivision>Hermeneutics Unit</subdivision>
350
- <subdivision>Exegetical Subunit</subdivision>
351
- <address>
352
- <formattedAddress>6A Rubble Way, <br/>Bedrock</formattedAddress>
353
- </address>
354
- </organization>
355
- </affiliation>
356
- <phone>789</phone>
357
- <phone type='fax'>012</phone>
358
- <email>barney@rockhead.example.com</email>
359
- </person>
360
- </contributor>
361
- <contributor>
362
- <role type="publisher"/>
363
- <organization>
364
- <name>Hanna Barbera</name>
365
- <address>
366
- <formattedAddress>
367
- 1 Infinity Loop
368
- <br/>
369
- California
370
- </formattedAddress>
371
- </address>
372
- <phone>3333333</phone>
373
- <phone type='fax'>4444444</phone>
374
- <email>x@example.com</email>
375
- <uri>http://www.example.com</uri>
376
- </organization>
377
- </contributor>
378
- <contributor>
379
- <role type="publisher"/>
380
- <organization>
381
- <name>Cartoon Network</name>
382
- <address>
383
- <formattedAddress>
384
- 1 Infinity Loop
385
- <br/>
386
- California
387
- </formattedAddress>
388
- </address>
389
- <phone>3333333</phone>
390
- <phone type='fax'>4444444</phone>
391
- <email>x@example.com</email>
392
- <uri>http://www.example.com</uri>
393
- </organization>
394
- </contributor>
395
- <contributor>
396
- <role type="publisher"/>
397
- <organization>
398
- <name>Ribose, Inc.</name>
399
- <address>
400
- <formattedAddress>
401
- 1 Infinity Loop
402
- <br/>
403
- California
404
- </formattedAddress>
405
- </address>
406
- <phone>3333333</phone>
407
- <phone type='fax'>4444444</phone>
408
- <email>x@example.com</email>
409
- <uri>http://www.example.com</uri>
410
- </organization>
411
- </contributor>
412
- <edition>2</edition>
413
- <version>
414
- <revision-date>2000-01-01</revision-date>
415
- <draft>3.4</draft>
416
- </version>
417
- <language>en</language>
418
- <script>Latn</script>
419
- <status>
420
- <stage>10</stage>
421
- <substage>20</substage>
422
- <iteration>3</iteration>
423
- </status>
424
- <copyright>
425
- <from>2001</from>
426
- <owner>
427
- <organization>
428
- <name>Ribose, Inc.</name>
257
+ output = <<~OUTPUT
258
+ <?xml version="1.0" encoding="UTF-8"?>
259
+ <standard-document xmlns="https://www.metanorma.org/ns/standoc" type="semantic" version="#{Metanorma::Standoc::VERSION}">
260
+ <bibdata type="standard">
261
+ <title language="en" format="text/plain">Main Title — Title</title>
262
+ <docidentifier>1000-1</docidentifier>
263
+ <docidentifier type='ISBN'>ISBN-13</docidentifier>
264
+ <docidentifier type='ISBN10'>ISBN-10</docidentifier>
265
+ <docnumber>1000</docnumber>
266
+ <date type="published">
267
+ <on>1000-01-01</on>
268
+ </date>
269
+ <date type="accessed">
270
+ <on>1001-01-01</on>
271
+ </date>
272
+ <date type="created">
273
+ <on>1002-01-01</on>
274
+ </date>
275
+ <date type="implemented">
276
+ <on>1003-01-01</on>
277
+ </date>
278
+ <date type="obsoleted">
279
+ <on>1004-01-01</on>
280
+ </date>
281
+ <date type="confirmed">
282
+ <on>1005-01-01</on>
283
+ </date>
284
+ <date type="updated">
285
+ <on>1006-01-01</on>
286
+ </date>
287
+ <date type="issued">
288
+ <on>1007-01-01</on>
289
+ </date>
290
+ <date type="circulated">
291
+ <on>1008-01-01</on>
292
+ </date>
293
+ <date type="unchanged">
294
+ <on>1009-01-01</on>
295
+ </date>
296
+ <date type='vote-started'>
297
+ <on>1011-01-01</on>
298
+ </date>
299
+ <date type='vote-ended'>
300
+ <on>1012-01-01</on>
301
+ </date>
302
+ <date type="Fred">
303
+ <on>1010-01-01</on>
304
+ </date>
305
+ <date type="Jack">
306
+ <on>1010-01-01</on>
307
+ </date>
308
+ <contributor>
309
+ <role type="author"/>
310
+ <organization>
311
+ <name>Hanna Barbera</name>
312
+ </organization>
313
+ </contributor>
314
+ <contributor>
315
+ <role type="author"/>
316
+ <organization>
317
+ <name>Cartoon Network</name>
318
+ </organization>
319
+ </contributor>
320
+ <contributor>
321
+ <role type="author"/>
322
+ <organization>
323
+ <name>Ribose, Inc.</name>
324
+ </organization>
325
+ </contributor>
326
+ <contributor>
327
+ <role type="author"/>
328
+ <person>
329
+ <name>
330
+ <completename>Fred Flintstone</completename>
331
+ </name>
332
+ <affiliation>
333
+ <organization>
334
+ <name>Slate Rock and Gravel Company</name>
335
+ <abbreviation>SRG</abbreviation>
336
+ <subdivision>Hermeneutics Unit</subdivision>
337
+ <subdivision>Exegetical Subunit</subdivision>
429
338
  <address>
430
- <formattedAddress>
431
- 1 Infinity Loop
432
- <br/>
433
- California
434
- </formattedAddress>
435
- </address>
436
- <phone>3333333</phone>
437
- <phone type='fax'>4444444</phone>
438
- <email>x@example.com</email>
439
- <uri>http://www.example.com</uri>
440
- </organization>
441
- </owner>
442
- </copyright>
443
- <copyright>
444
- <from>2001</from>
445
- <owner>
446
- <organization>
447
- <name>Hanna Barbera</name>
339
+ <formattedAddress>
340
+ 6 Rubble Way, Bedrock
341
+ </formattedAddress>
342
+ </address>
343
+ </organization>
344
+ </affiliation>
345
+ <phone>123</phone>
346
+ <phone type='fax'>456</phone>
347
+ <uri>http://slate.example.com</uri>
348
+ </person>
349
+ </contributor>
350
+ <contributor>
351
+ <role type="editor"/>
352
+ <person>
353
+ <name>
354
+ <forename>Barney</forename>
355
+ <initial>B. X.</initial>
356
+ <surname>Rubble</surname>
357
+ </name>
358
+ <affiliation>
359
+ <organization>
360
+ <name>Rockhead and Quarry Cave Construction Company</name>
361
+ <abbreviation>RQCCC</abbreviation>
362
+ <subdivision>Hermeneutics Unit</subdivision>
363
+ <subdivision>Exegetical Subunit</subdivision>
448
364
  <address>
449
- <formattedAddress>
450
- 1 Infinity Loop
451
- <br/>
452
- California
453
- </formattedAddress>
454
- </address>
455
- <phone>3333333</phone>
456
- <phone type='fax'>4444444</phone>
457
- <email>x@example.com</email>
458
- <uri>http://www.example.com</uri>
459
- </organization>
460
- </owner>
461
- </copyright>
462
- <relation type="partOf">
463
- <bibitem>
464
- <title>--</title>
465
- <docidentifier>ABC</docidentifier>
466
- </bibitem>
467
- </relation>
468
- <relation type="translatedFrom">
469
- <bibitem>
470
- <title>GHI</title>
471
- <docidentifier>DEF</docidentifier>
472
- </bibitem>
473
- </relation>
474
- <relation type="translatedFrom">
475
- <bibitem>
476
- <title>PQR</title>
477
- <docidentifier>JKL MNO</docidentifier>
478
- </bibitem>
479
- </relation>
480
- <classification type='a'>b</classification>
481
- <classification type='default'>c</classification>
482
- <keyword>a</keyword>
483
- <keyword>b</keyword>
484
- <keyword>c</keyword>
485
- <ext>
486
- <doctype>article</doctype>
487
- <editorialgroup>
488
- <technical-committee number="1" type="A">TC</technical-committee>
489
- <technical-committee number="11" type="A1">TC1</technical-committee>
490
- </editorialgroup>
491
- <ics>
492
- <code>1</code>
493
- </ics>
494
- <ics>
495
- <code>2</code>
496
- </ics>
497
- <ics>
498
- <code>3</code>
499
- </ics>
500
- </ext>
501
- </bibdata>
502
- <sections/>
503
- </standard-document>
365
+ <formattedAddress>6A Rubble Way, <br/>Bedrock</formattedAddress>
366
+ </address>
367
+ </organization>
368
+ </affiliation>
369
+ <phone>789</phone>
370
+ <phone type='fax'>012</phone>
371
+ <email>barney@rockhead.example.com</email>
372
+ </person>
373
+ </contributor>
374
+ <contributor>
375
+ <role type="publisher"/>
376
+ <organization>
377
+ <name>Hanna Barbera</name>
378
+ <address>
379
+ <formattedAddress>
380
+ 1 Infinity Loop
381
+ <br/>
382
+ California
383
+ </formattedAddress>
384
+ </address>
385
+ <phone>3333333</phone>
386
+ <phone type='fax'>4444444</phone>
387
+ <email>x@example.com</email>
388
+ <uri>http://www.example.com</uri>
389
+ </organization>
390
+ </contributor>
391
+ <contributor>
392
+ <role type="publisher"/>
393
+ <organization>
394
+ <name>Cartoon Network</name>
395
+ <address>
396
+ <formattedAddress>
397
+ 1 Infinity Loop
398
+ <br/>
399
+ California
400
+ </formattedAddress>
401
+ </address>
402
+ <phone>3333333</phone>
403
+ <phone type='fax'>4444444</phone>
404
+ <email>x@example.com</email>
405
+ <uri>http://www.example.com</uri>
406
+ </organization>
407
+ </contributor>
408
+ <contributor>
409
+ <role type="publisher"/>
410
+ <organization>
411
+ <name>Ribose, Inc.</name>
412
+ <address>
413
+ <formattedAddress>
414
+ 1 Infinity Loop
415
+ <br/>
416
+ California
417
+ </formattedAddress>
418
+ </address>
419
+ <phone>3333333</phone>
420
+ <phone type='fax'>4444444</phone>
421
+ <email>x@example.com</email>
422
+ <uri>http://www.example.com</uri>
423
+ </organization>
424
+ </contributor>
425
+ <edition>2</edition>
426
+ <version>
427
+ <revision-date>2000-01-01</revision-date>
428
+ <draft>3.4</draft>
429
+ </version>
430
+ <language>en</language>
431
+ <script>Latn</script>
432
+ <status>
433
+ <stage>10</stage>
434
+ <substage>20</substage>
435
+ <iteration>3</iteration>
436
+ </status>
437
+ <copyright>
438
+ <from>2001</from>
439
+ <owner>
440
+ <organization>
441
+ <name>Ribose, Inc.</name>
442
+ <address>
443
+ <formattedAddress>
444
+ 1 Infinity Loop
445
+ <br/>
446
+ California
447
+ </formattedAddress>
448
+ </address>
449
+ <phone>3333333</phone>
450
+ <phone type='fax'>4444444</phone>
451
+ <email>x@example.com</email>
452
+ <uri>http://www.example.com</uri>
453
+ </organization>
454
+ </owner>
455
+ </copyright>
456
+ <copyright>
457
+ <from>2001</from>
458
+ <owner>
459
+ <organization>
460
+ <name>Hanna Barbera</name>
461
+ <address>
462
+ <formattedAddress>
463
+ 1 Infinity Loop
464
+ <br/>
465
+ California
466
+ </formattedAddress>
467
+ </address>
468
+ <phone>3333333</phone>
469
+ <phone type='fax'>4444444</phone>
470
+ <email>x@example.com</email>
471
+ <uri>http://www.example.com</uri>
472
+ </organization>
473
+ </owner>
474
+ </copyright>
475
+ <relation type="partOf">
476
+ <bibitem>
477
+ <title>--</title>
478
+ <docidentifier>ABC</docidentifier>
479
+ </bibitem>
480
+ </relation>
481
+ <relation type="translatedFrom">
482
+ <bibitem>
483
+ <title>GHI</title>
484
+ <docidentifier>DEF</docidentifier>
485
+ </bibitem>
486
+ </relation>
487
+ <relation type="translatedFrom">
488
+ <bibitem>
489
+ <title>PQR</title>
490
+ <docidentifier>JKL MNO</docidentifier>
491
+ </bibitem>
492
+ </relation>
493
+ <classification type='a'>b</classification>
494
+ <classification type='default'>c</classification>
495
+ <keyword>a</keyword>
496
+ <keyword>b</keyword>
497
+ <keyword>c</keyword>
498
+ <ext>
499
+ <doctype>article</doctype>
500
+ <editorialgroup>
501
+ <technical-committee number="1" type="A">TC</technical-committee>
502
+ <technical-committee number="11" type="A1">TC1</technical-committee>
503
+ </editorialgroup>
504
+ <ics>
505
+ <code>1</code>
506
+ </ics>
507
+ <ics>
508
+ <code>2</code>
509
+ </ics>
510
+ <ics>
511
+ <code>3</code>
512
+ </ics>
513
+ </ext>
514
+ </bibdata>
515
+ <sections/>
516
+ </standard-document>
504
517
  OUTPUT
518
+ expect(xmlpp(Asciidoctor.convert(input, *OPTIONS)))
519
+ .to be_equivalent_to xmlpp(output)
505
520
  end
506
521
 
507
522
  it "processes complex metadata" do
508
- expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", *OPTIONS)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
523
+ input = <<~INPUT
509
524
  = Document title
510
525
  Author
511
526
  :docfile: test.adoc
@@ -530,6 +545,19 @@ OUTPUT
530
545
  :docsubtype: This is a DocSubType
531
546
  :subdivision: Subdivision
532
547
  :subdivision-abbr: SD
548
+ :fullname: Fred Flintstone
549
+ :affiliation: Slate Rock and Gravel Company
550
+ :street: 1 Infinity Loop
551
+ :city: Cupertino
552
+ :state: CA
553
+ :country: USA
554
+ :postcode: 95014
555
+ :fullname_2: Barney Rubble
556
+ :affiliation_2: Slate Rock and Gravel Company
557
+ :street_2: Pavillon de Breteuil
558
+ :city_2: Sèvres CEDEX
559
+ :country_2: France
560
+ :postcode_2: F-92312
533
561
 
534
562
  [abstract]
535
563
  == Abstract
@@ -540,114 +568,227 @@ OUTPUT
540
568
  [language=en]
541
569
  == Clause 1
542
570
  INPUT
543
- <?xml version="1.0" encoding="UTF-8"?>
544
- <standard-document xmlns="https://www.metanorma.org/ns/standoc" type="semantic" version="#{Metanorma::Standoc::VERSION}">
545
- <bibdata type="standard">
546
- <title language="en" format="text/plain">Document title</title>
547
- <title language="eo" format="text/plain">Dokumenttitolo</title>
548
- <uri>A</uri>
549
- <uri type="xml">B</uri>
550
- <uri type="html">C</uri>
551
- <uri type="pdf">D</uri>
552
- <uri type="doc">E</uri>
553
- <uri type="relaton">F</uri>
554
- <docidentifier>1000-1-1</docidentifier>
555
- <docnumber>1000</docnumber>
556
- <date type='published'>
557
- <on>1000-01</on>
558
- </date>
559
- <contributor>
560
- <role type="author"/>
561
- <organization>
562
- <name>IEC</name>
563
- </organization>
564
- </contributor>
565
- <contributor>
566
- <role type="author"/>
567
- <organization>
568
- <name>IETF</name>
569
- </organization>
570
- </contributor>
571
- <contributor>
572
- <role type="author"/>
573
- <organization>
574
- <name>ISO</name>
575
- </organization>
576
- </contributor>
577
- <contributor>
578
- <role type="publisher"/>
579
- <organization>
580
- <name>IEC</name>
581
- </organization>
582
- </contributor>
583
- <contributor>
584
- <role type="publisher"/>
585
- <organization>
586
- <name>IETF</name>
587
- </organization>
588
- </contributor>
589
- <contributor>
590
- <role type="publisher"/>
591
- <organization>
592
- <name>ISO</name>
593
- </organization>
594
- </contributor>
595
- <version>
596
- <revision-date>2000-01</revision-date>
597
- </version>
598
- <language>el</language>
599
- <script>Grek</script>
600
- <abstract><p>This is the abstract of the document</p>
601
- <p>This is the second paragraph of the abstract of the document.</p></abstract>
602
- <status><stage>published</stage></status>
603
- <copyright>
604
- <from>#{Date.today.year}</from>
605
- <owner>
606
- <organization>
607
- <name>IEC</name>
608
- </organization>
609
- </owner>
610
- </copyright>
611
- <copyright>
612
- <from>#{Date.today.year}</from>
613
- <owner>
614
- <organization>
615
- <name>IETF</name>
616
- </organization>
617
- </owner>
618
- </copyright>
619
- <copyright>
620
- <from>#{Date.today.year}</from>
621
- <owner>
622
- <organization>
623
- <name>ISO</name>
624
- </organization>
625
- </owner>
626
- </copyright>
627
- <ext>
628
- <doctype>this-is-a-doctype</doctype>
629
- <subdoctype>This is a DocSubType</subdoctype>
630
- </ext>
631
- </bibdata>
632
- <preface>
633
- <abstract id='_'>
634
- <title>Abstract</title>
635
- <p id='_'>This is the abstract of the document</p>
636
- <p id='_'>This is the second paragraph of the abstract of the document.</p>
637
- </abstract>
638
- </preface>
639
- <sections>
640
- <clause id='_' language='en' inline-header='false' obligation='normative'>
641
- <title>Clause 1</title>
642
- </clause>
643
- </sections>
644
- </standard-document>
571
+ output = <<~OUTPUT
572
+ <?xml version="1.0" encoding="UTF-8"?>
573
+ <standard-document xmlns="https://www.metanorma.org/ns/standoc" type="semantic" version="#{Metanorma::Standoc::VERSION}">
574
+ <bibdata type="standard">
575
+ <title language="en" format="text/plain">Document title</title>
576
+ <title language="eo" format="text/plain">Dokumenttitolo</title>
577
+ <uri>A</uri>
578
+ <uri type="xml">B</uri>
579
+ <uri type="html">C</uri>
580
+ <uri type="pdf">D</uri>
581
+ <uri type="doc">E</uri>
582
+ <uri type="relaton">F</uri>
583
+ <docidentifier>1000-1-1</docidentifier>
584
+ <docnumber>1000</docnumber>
585
+ <date type='published'>
586
+ <on>1000-01</on>
587
+ </date>
588
+ <contributor>
589
+ <role type="author"/>
590
+ <organization>
591
+ <name>IEC</name>
592
+ </organization>
593
+ </contributor>
594
+ <contributor>
595
+ <role type="author"/>
596
+ <organization>
597
+ <name>IETF</name>
598
+ </organization>
599
+ </contributor>
600
+ <contributor>
601
+ <role type="author"/>
602
+ <organization>
603
+ <name>ISO</name>
604
+ </organization>
605
+ </contributor>
606
+ <contributor>
607
+ <role type='author'/>
608
+ <person>
609
+ <name>
610
+ <completename>Fred Flintstone</completename>
611
+ </name>
612
+ <affiliation>
613
+ <organization>
614
+ <name>Slate Rock and Gravel Company</name>
615
+ <address>
616
+ <street>1 Infinity Loop</street>
617
+ <city>Cupertino</city>
618
+ <state>CA</state>
619
+ <country>USA</country>
620
+ <postcode>95014</postcode>
621
+ </address>
622
+ </organization>
623
+ </affiliation>
624
+ </person>
625
+ </contributor>
626
+ <contributor>
627
+ <role type='author'/>
628
+ <person>
629
+ <name>
630
+ <completename>Barney Rubble</completename>
631
+ </name>
632
+ <affiliation>
633
+ <organization>
634
+ <name>Slate Rock and Gravel Company</name>
635
+ <address>
636
+ <street>Pavillon de Breteuil</street>
637
+ <city>S&#232;vres CEDEX</city>
638
+ <country>France</country>
639
+ <postcode>F-92312</postcode>
640
+ </address>
641
+ </organization>
642
+ </affiliation>
643
+ </person>
644
+ </contributor>
645
+ <contributor>
646
+ <role type="publisher"/>
647
+ <organization>
648
+ <name>IEC</name>
649
+ </organization>
650
+ </contributor>
651
+ <contributor>
652
+ <role type="publisher"/>
653
+ <organization>
654
+ <name>IETF</name>
655
+ </organization>
656
+ </contributor>
657
+ <contributor>
658
+ <role type="publisher"/>
659
+ <organization>
660
+ <name>ISO</name>
661
+ </organization>
662
+ </contributor>
663
+ <version>
664
+ <revision-date>2000-01</revision-date>
665
+ </version>
666
+ <language>el</language>
667
+ <script>Grek</script>
668
+ <abstract><p>This is the abstract of the document</p>
669
+ <p>This is the second paragraph of the abstract of the document.</p></abstract>
670
+ <status><stage>published</stage></status>
671
+ <copyright>
672
+ <from>#{Date.today.year}</from>
673
+ <owner>
674
+ <organization>
675
+ <name>IEC</name>
676
+ </organization>
677
+ </owner>
678
+ </copyright>
679
+ <copyright>
680
+ <from>#{Date.today.year}</from>
681
+ <owner>
682
+ <organization>
683
+ <name>IETF</name>
684
+ </organization>
685
+ </owner>
686
+ </copyright>
687
+ <copyright>
688
+ <from>#{Date.today.year}</from>
689
+ <owner>
690
+ <organization>
691
+ <name>ISO</name>
692
+ </organization>
693
+ </owner>
694
+ </copyright>
695
+ <ext>
696
+ <doctype>this-is-a-doctype</doctype>
697
+ <subdoctype>This is a DocSubType</subdoctype>
698
+ </ext>
699
+ </bibdata>
700
+ <preface>
701
+ <abstract id='_'>
702
+ <title>Abstract</title>
703
+ <p id='_'>This is the abstract of the document</p>
704
+ <p id='_'>This is the second paragraph of the abstract of the document.</p>
705
+ </abstract>
706
+ </preface>
707
+ <sections>
708
+ <clause id='_' language='en' inline-header='false' obligation='normative'>
709
+ <title>Clause 1</title>
710
+ </clause>
711
+ </sections>
712
+ </standard-document>
713
+ OUTPUT
714
+ expect(xmlpp(strip_guid(Asciidoctor.convert(input, *OPTIONS))))
715
+ .to be_equivalent_to xmlpp(output)
716
+ end
717
+
718
+ it "processes formatted address overridding address components" do
719
+ input = <<~INPUT
720
+ = Document title
721
+ Author
722
+ :docfile: test.adoc
723
+ :nodoc:
724
+ :novalid:
725
+ :fullname: Fred Flintstone
726
+ :affiliation: Slate Rock and Gravel Company
727
+ :address: Address
728
+ :city: Utopia
729
+ :fullname_2: Barney Rubble
730
+ :affiliation_2: Slate Rock and Gravel Company
731
+ :city_2: Utopia
732
+
733
+ INPUT
734
+ output = <<~OUTPUT
735
+ <standard-document xmlns="https://www.metanorma.org/ns/standoc" type="semantic" version="#{Metanorma::Standoc::VERSION}">
736
+ <bibdata type='standard'>
737
+ <title language='en' format='text/plain'>Document title</title>
738
+ <contributor>
739
+ <role type='author'/>
740
+ <person>
741
+ <name>
742
+ <completename>Fred Flintstone</completename>
743
+ </name>
744
+ <affiliation>
745
+ <organization>
746
+ <name>Slate Rock and Gravel Company</name>
747
+ <address>
748
+ <formattedAddress>Address</formattedAddress>
749
+ </address>
750
+ </organization>
751
+ </affiliation>
752
+ </person>
753
+ </contributor>
754
+ <contributor>
755
+ <role type='author'/>
756
+ <person>
757
+ <name>
758
+ <completename>Barney Rubble</completename>
759
+ </name>
760
+ <affiliation>
761
+ <organization>
762
+ <name>Slate Rock and Gravel Company</name>
763
+ <address>
764
+ <city>Utopia</city>
765
+ </address>
766
+ </organization>
767
+ </affiliation>
768
+ </person>
769
+ </contributor>
770
+ <language>en</language>
771
+ <script>Latn</script>
772
+ <status>
773
+ <stage>published</stage>
774
+ </status>
775
+ <copyright>
776
+ <from>2021</from>
777
+ </copyright>
778
+ <ext>
779
+ <doctype>article</doctype>
780
+ </ext>
781
+ </bibdata>
782
+ <sections> </sections>
783
+ </standard-document>
645
784
  OUTPUT
785
+ expect(xmlpp(Asciidoctor.convert(input, *OPTIONS)))
786
+ .to be_equivalent_to xmlpp(output)
646
787
  end
647
788
 
648
- it "processes subdivisions" do
649
- mock_default_publisher
650
- expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", *OPTIONS)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
789
+ it "processes subdivisions" do
790
+ mock_default_publisher
791
+ input = <<~INPUT
651
792
  = Document title
652
793
  Author
653
794
  :docfile: test.adoc
@@ -671,71 +812,73 @@ OUTPUT
671
812
  :pub-uri: http://www.example.com
672
813
 
673
814
  INPUT
674
- <standard-document xmlns="https://www.metanorma.org/ns/standoc" type="semantic" version="#{Metanorma::Standoc::VERSION}">
675
- <bibdata type='standard'>
676
- <title language='en' format='text/plain'>Document title</title>
677
- <docidentifier>1000-1-1</docidentifier>
678
- <docnumber>1000</docnumber>
679
- <date type='published'>
680
- <on>1000-01</on>
681
- </date>
682
- <contributor>
683
- <role type='author'/>
684
- <organization>
685
- <name>International Standards Organization</name>
686
- <subdivision>Subdivision</subdivision>
687
- <abbreviation>SD</abbreviation>
688
- </organization>
689
- </contributor>
690
- <contributor>
691
- <role type='publisher'/>
692
- <organization>
693
- <name>International Standards Organization</name>
694
- <subdivision>Subdivision</subdivision>
695
- <abbreviation>SD</abbreviation>
696
- <address>
697
- <formattedAddress>1 Infinity Loop <br/>California</formattedAddress>
698
- </address>
699
- <phone>3333333</phone>
700
- <phone type='fax'>4444444</phone>
701
- <email>x@example.com</email>
702
- <uri>http://www.example.com</uri>
703
- </organization>
704
- </contributor>
705
- <version>
706
- <revision-date>2000-01</revision-date>
707
- </version>
708
- <language>el</language>
709
- <script>Grek</script>
710
- <status>
711
- <stage>published</stage>
712
- </status>
713
- <copyright>
714
- <from>#{Time.now.year}</from>
715
- <owner>
716
- <organization>
717
- <name>International Standards Organization</name>
718
- <subdivision>Subdivision</subdivision>
719
- <abbreviation>SD</abbreviation>
720
- <address>
721
- <formattedAddress>1 Infinity Loop <br/>California</formattedAddress>
722
- </address>
723
- <phone>3333333</phone>
724
- <phone type='fax'>4444444</phone>
725
- <email>x@example.com</email>
726
- <uri>http://www.example.com</uri>
727
- </organization>
728
- </owner>
729
- </copyright>
730
- <ext>
731
- <doctype>this-is-a-doctype</doctype>
732
- </ext>
733
- </bibdata>
734
- <sections> </sections>
735
- </standard-document>
736
-
737
- OUTPUT
738
- end
815
+ output = <<~OUTPUT
816
+ <standard-document xmlns="https://www.metanorma.org/ns/standoc" type="semantic" version="#{Metanorma::Standoc::VERSION}">
817
+ <bibdata type='standard'>
818
+ <title language='en' format='text/plain'>Document title</title>
819
+ <docidentifier>1000-1-1</docidentifier>
820
+ <docnumber>1000</docnumber>
821
+ <date type='published'>
822
+ <on>1000-01</on>
823
+ </date>
824
+ <contributor>
825
+ <role type='author'/>
826
+ <organization>
827
+ <name>International Standards Organization</name>
828
+ <subdivision>Subdivision</subdivision>
829
+ <abbreviation>SD</abbreviation>
830
+ </organization>
831
+ </contributor>
832
+ <contributor>
833
+ <role type='publisher'/>
834
+ <organization>
835
+ <name>International Standards Organization</name>
836
+ <subdivision>Subdivision</subdivision>
837
+ <abbreviation>SD</abbreviation>
838
+ <address>
839
+ <formattedAddress>1 Infinity Loop <br/>California</formattedAddress>
840
+ </address>
841
+ <phone>3333333</phone>
842
+ <phone type='fax'>4444444</phone>
843
+ <email>x@example.com</email>
844
+ <uri>http://www.example.com</uri>
845
+ </organization>
846
+ </contributor>
847
+ <version>
848
+ <revision-date>2000-01</revision-date>
849
+ </version>
850
+ <language>el</language>
851
+ <script>Grek</script>
852
+ <status>
853
+ <stage>published</stage>
854
+ </status>
855
+ <copyright>
856
+ <from>#{Time.now.year}</from>
857
+ <owner>
858
+ <organization>
859
+ <name>International Standards Organization</name>
860
+ <subdivision>Subdivision</subdivision>
861
+ <abbreviation>SD</abbreviation>
862
+ <address>
863
+ <formattedAddress>1 Infinity Loop <br/>California</formattedAddress>
864
+ </address>
865
+ <phone>3333333</phone>
866
+ <phone type='fax'>4444444</phone>
867
+ <email>x@example.com</email>
868
+ <uri>http://www.example.com</uri>
869
+ </organization>
870
+ </owner>
871
+ </copyright>
872
+ <ext>
873
+ <doctype>this-is-a-doctype</doctype>
874
+ </ext>
875
+ </bibdata>
876
+ <sections> </sections>
877
+ </standard-document>
878
+ OUTPUT
879
+ expect(xmlpp(Asciidoctor.convert(input, *OPTIONS)))
880
+ .to be_equivalent_to xmlpp(output)
881
+ end
739
882
 
740
883
  it "reads scripts into blank HTML document" do
741
884
  FileUtils.rm_f "test.html"
@@ -856,20 +999,17 @@ QU1FOiB0ZXN0Cgo=
856
999
  private
857
1000
 
858
1001
  def mock_org_abbrevs
859
- allow_any_instance_of(::Asciidoctor::Standoc::Front).to receive(:org_abbrev).and_return(
860
- { "International Standards Organization" => "ISO",
861
- "International Electrotechnical Commission" => "IEC" }
862
- )
1002
+ allow_any_instance_of(::Asciidoctor::Standoc::Front)
1003
+ .to receive(:org_abbrev).and_return(
1004
+ { "International Standards Organization" => "ISO",
1005
+ "International Electrotechnical Commission" => "IEC" },
1006
+ )
863
1007
  end
864
1008
 
865
- def mock_default_publisher
866
- allow_any_instance_of(::Asciidoctor::Standoc::Front).to receive(:default_publisher).and_return(
867
- "International Standards Organization"
868
- )
1009
+ def mock_default_publisher
1010
+ allow_any_instance_of(::Asciidoctor::Standoc::Front)
1011
+ .to receive(:default_publisher).and_return(
1012
+ "International Standards Organization",
1013
+ )
869
1014
  end
870
-
871
-
872
1015
  end
873
-
874
-
875
-