metanorma-standoc 1.9.3 → 1.9.4

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