metanorma-iso 1.6.0 → 1.7.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (68) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/rake.yml +16 -29
  3. data/.rubocop.yml +0 -4
  4. data/lib/asciidoctor/iso/base.rb +13 -13
  5. data/lib/asciidoctor/iso/basicdoc.rng +5 -3
  6. data/lib/asciidoctor/iso/cleanup.rb +1 -1
  7. data/lib/asciidoctor/iso/front.rb +5 -5
  8. data/lib/asciidoctor/iso/isodoc.rng +134 -5
  9. data/lib/asciidoctor/iso/isostandard-amd.rng +11 -4
  10. data/lib/asciidoctor/iso/isostandard.rng +33 -107
  11. data/lib/asciidoctor/iso/validate.rb +79 -0
  12. data/lib/asciidoctor/iso/validate_section.rb +12 -9
  13. data/lib/isodoc/iso/base_convert.rb +11 -0
  14. data/lib/isodoc/iso/html/header.html +12 -12
  15. data/lib/isodoc/iso/html/html_iso_intro.html +1 -1
  16. data/lib/isodoc/iso/html/html_iso_titlepage.html +1 -1
  17. data/lib/isodoc/iso/html/word_iso_intro.html +1 -1
  18. data/lib/isodoc/iso/html/word_iso_titlepage.html +1 -1
  19. data/lib/isodoc/iso/html_convert.rb +2 -2
  20. data/lib/isodoc/iso/i18n-en.yaml +6 -0
  21. data/lib/isodoc/iso/i18n-fr.yaml +4 -0
  22. data/lib/isodoc/iso/i18n-zh-Hans.yaml +4 -0
  23. data/lib/isodoc/iso/index.rb +139 -0
  24. data/lib/isodoc/iso/iso.amendment.xsl +1006 -317
  25. data/lib/isodoc/iso/iso.international-standard.xsl +1006 -317
  26. data/lib/isodoc/iso/presentation_xml_convert.rb +1 -4
  27. data/lib/isodoc/iso/sections.rb +1 -1
  28. data/lib/isodoc/iso/word_convert.rb +2 -2
  29. data/lib/isodoc/iso/xref.rb +33 -12
  30. data/lib/metanorma/iso/version.rb +1 -1
  31. data/metanorma-iso.gemspec +3 -3
  32. data/spec/asciidoctor/amd_spec.rb +696 -0
  33. data/spec/asciidoctor/base_spec.rb +704 -0
  34. data/spec/asciidoctor/blocks_spec.rb +527 -0
  35. data/spec/asciidoctor/cleanup_spec.rb +1134 -0
  36. data/spec/asciidoctor/inline_spec.rb +195 -0
  37. data/spec/asciidoctor/lists_spec.rb +197 -0
  38. data/spec/asciidoctor/refs_spec.rb +375 -0
  39. data/spec/asciidoctor/section_spec.rb +393 -0
  40. data/spec/asciidoctor/table_spec.rb +329 -0
  41. data/spec/asciidoctor/validate_spec.rb +1555 -0
  42. data/spec/isodoc/amd_spec.rb +967 -946
  43. data/spec/isodoc/blocks_spec.rb +530 -507
  44. data/spec/isodoc/i18n_spec.rb +953 -911
  45. data/spec/isodoc/inline_spec.rb +355 -293
  46. data/spec/isodoc/iso_spec.rb +340 -316
  47. data/spec/isodoc/metadata_spec.rb +392 -382
  48. data/spec/isodoc/postproc_spec.rb +834 -656
  49. data/spec/isodoc/ref_spec.rb +374 -331
  50. data/spec/isodoc/section_spec.rb +821 -519
  51. data/spec/isodoc/table_spec.rb +472 -411
  52. data/spec/isodoc/terms_spec.rb +209 -185
  53. data/spec/isodoc/xref_spec.rb +1370 -1236
  54. data/spec/metanorma/processor_spec.rb +28 -26
  55. data/spec/spec_helper.rb +184 -189
  56. metadata +22 -23
  57. data/.rubocop.ribose.yml +0 -66
  58. data/spec/asciidoctor-iso/amd_spec.rb +0 -694
  59. data/spec/asciidoctor-iso/base_spec.rb +0 -713
  60. data/spec/asciidoctor-iso/blocks_spec.rb +0 -482
  61. data/spec/asciidoctor-iso/cleanup_spec.rb +0 -1025
  62. data/spec/asciidoctor-iso/inline_spec.rb +0 -170
  63. data/spec/asciidoctor-iso/lists_spec.rb +0 -190
  64. data/spec/asciidoctor-iso/refs_spec.rb +0 -317
  65. data/spec/asciidoctor-iso/section_spec.rb +0 -362
  66. data/spec/asciidoctor-iso/table_spec.rb +0 -313
  67. data/spec/asciidoctor-iso/validate_spec.rb +0 -1251
  68. data/spec/assets/xref_error.adoc +0 -7
@@ -0,0 +1,1134 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe Asciidoctor::ISO do
4
+ it "removes empty text elements" do
5
+ expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", *OPTIONS)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
6
+ #{ASCIIDOC_BLANK_HDR}
7
+ == {blank}
8
+ INPUT
9
+ #{BLANK_HDR}
10
+ <sections>
11
+ <clause id="_" inline-header="false" obligation="normative"/>
12
+ </sections>
13
+ </iso-standard>
14
+ OUTPUT
15
+ end
16
+
17
+ it "processes stem-only terms as admitted" do
18
+ expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", *OPTIONS)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
19
+ #{ASCIIDOC_BLANK_HDR}
20
+ == Terms and Definitions
21
+
22
+ === stem:[t_90]
23
+
24
+ stem:[t_91]
25
+
26
+ Time
27
+ INPUT
28
+ #{BLANK_HDR}
29
+ <sections>
30
+ <terms id="_" obligation="normative">
31
+ <title>Terms and definitions</title>
32
+ #{TERM_BOILERPLATE}
33
+ <term id="term-t90">
34
+ <preferred>
35
+ <stem type="MathML">
36
+ <math xmlns="http://www.w3.org/1998/Math/MathML">
37
+ <msub>
38
+ <mrow>
39
+ <mi>t</mi></mrow>
40
+ <mrow>
41
+ <mn>90</mn>
42
+ </mrow>
43
+ </msub>
44
+ </math>
45
+ </stem>
46
+ </preferred>
47
+ <admitted>
48
+ <stem type="MathML">
49
+ <math xmlns="http://www.w3.org/1998/Math/MathML">
50
+ <msub>
51
+ <mrow>
52
+ <mi>t</mi>
53
+ </mrow>
54
+ <mrow>
55
+ <mn>91</mn>
56
+ </mrow>
57
+ </msub>
58
+ </math>
59
+ </stem>
60
+ </admitted>
61
+ <definition>
62
+ <p id="_">Time</p>
63
+ </definition>
64
+ </term>
65
+ </terms>
66
+ </sections>
67
+ </iso-standard>
68
+ OUTPUT
69
+ end
70
+
71
+ it "moves term domains out of the term definition paragraph" do
72
+ expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", *OPTIONS)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
73
+ #{ASCIIDOC_BLANK_HDR}
74
+ == Terms and Definitions
75
+
76
+ === Tempus
77
+
78
+ domain:[relativity] Time
79
+ INPUT
80
+ #{BLANK_HDR}
81
+ <sections>
82
+ <terms id="_" obligation="normative">
83
+ <title>Terms and definitions</title>#{TERM_BOILERPLATE}
84
+
85
+ <term id="term-tempus">
86
+ <preferred>Tempus</preferred>
87
+ <domain>relativity</domain>
88
+ <definition>
89
+ <p id="_">Time</p></definition>
90
+ </term>
91
+ </terms>
92
+ </sections>
93
+ </iso-standard>
94
+ OUTPUT
95
+ end
96
+
97
+ it "permits multiple blocks in term definition paragraph" do
98
+ expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", *OPTIONS)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
99
+ = Document title
100
+ Author
101
+ :docfile: test.adoc
102
+ :nodoc:
103
+ :novalid:
104
+ :stem:
105
+ :no-isobib:
106
+
107
+ == Terms and Definitions
108
+
109
+ === stem:[t_90]
110
+
111
+ [stem]
112
+ ++++
113
+ t_A
114
+ ++++
115
+
116
+ This paragraph is extraneous
117
+ INPUT
118
+ #{BLANK_HDR}
119
+ <sections>
120
+ <terms id="_" obligation="normative">
121
+ <title>Terms and definitions</title>
122
+ #{TERM_BOILERPLATE}
123
+ <term id="term-t90">
124
+ <preferred>
125
+ <stem type="MathML">
126
+ <math xmlns="http://www.w3.org/1998/Math/MathML">
127
+ <msub>
128
+ <mrow>
129
+ <mi>t</mi></mrow>
130
+ <mrow>
131
+ <mn>90</mn>
132
+ </mrow>
133
+ </msub>
134
+ </math>
135
+ </stem>
136
+ </preferred>
137
+ <definition>
138
+ <formula id="_">
139
+ <stem type="MathML">
140
+ <math xmlns="http://www.w3.org/1998/Math/MathML">
141
+ <msub>
142
+ <mrow>
143
+ <mi>t</mi>
144
+ </mrow>
145
+ <mrow>
146
+ <mi>A</mi>
147
+ </mrow>
148
+ </msub>
149
+ </math>
150
+ </stem>
151
+ </formula>
152
+ <p id="_">This paragraph is extraneous</p>
153
+ </definition>
154
+ </term>
155
+ </terms>
156
+ </sections>
157
+ </iso-standard>
158
+ OUTPUT
159
+ end
160
+
161
+ it "keeps any initial boilerplate from terms and definitions" do
162
+ expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", *OPTIONS)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
163
+ #{ASCIIDOC_BLANK_HDR}
164
+ == Terms and Definitions
165
+
166
+ I am boilerplate
167
+
168
+ * So am I
169
+
170
+ === Time
171
+
172
+ This paragraph is extraneous
173
+ INPUT
174
+ #{BLANK_HDR}
175
+ <sections>
176
+ <terms id="_" obligation="normative">
177
+ <title>Terms and definitions</title>#{TERM_BOILERPLATE}
178
+
179
+ <p id="_">I am boilerplate</p>
180
+ <ul id="_">
181
+ <li>
182
+ <p id="_">So am I</p></li>
183
+ </ul>
184
+ <term id="term-time">
185
+ <preferred>Time</preferred>
186
+ <definition>
187
+ <p id="_">This paragraph is extraneous</p>
188
+ </definition>
189
+ </term>
190
+ </terms>
191
+ </sections>
192
+ </iso-standard>
193
+ OUTPUT
194
+ end
195
+
196
+ it "moves notes inside preceding blocks, if they are not at clause end, and the blocks are not delimited" do
197
+ expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", *OPTIONS)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
198
+ #{ASCIIDOC_BLANK_HDR}
199
+ [stem]
200
+ ++++
201
+ r = 1 %
202
+ r = 1 %
203
+ ++++
204
+
205
+ NOTE: That formula does not do much
206
+
207
+ Indeed.
208
+ INPUT
209
+ #{BLANK_HDR}
210
+ <sections>
211
+ <formula id="_">
212
+ <stem type="MathML">
213
+ <math xmlns="http://www.w3.org/1998/Math/MathML">
214
+ <mi>r</mi>
215
+ <mo>=</mo>
216
+ <mn>1</mn>
217
+ <mi>%</mi>
218
+ <mi>r</mi>
219
+ <mo>=</mo>
220
+ <mn>1</mn>
221
+ <mi>%</mi>
222
+ </math>
223
+ </stem>
224
+ <note id="_">
225
+ <p id="_">That formula does not do much</p>
226
+ </note>
227
+ </formula>
228
+ <p id="_">Indeed.</p>
229
+ </sections>
230
+ </iso-standard>
231
+ OUTPUT
232
+ end
233
+
234
+ it "does not move notes inside preceding blocks, if they are at clause end" do
235
+ expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", *OPTIONS)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
236
+ #{ASCIIDOC_BLANK_HDR}
237
+ [source,ruby]
238
+ [1...x].each do |y|
239
+ puts y
240
+ end
241
+
242
+ NOTE: That loop does not do much
243
+ INPUT
244
+ #{BLANK_HDR}
245
+ <sections>
246
+ <sourcecode id="_" lang="ruby">[1...x].each do |y|
247
+ puts y
248
+ end</sourcecode>
249
+ <note id="_">
250
+ <p id="_">That loop does not do much</p>
251
+ </note>
252
+ </sections>
253
+ </iso-standard>
254
+ OUTPUT
255
+ end
256
+
257
+ it "converts xrefs to references into erefs" do
258
+ expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", *OPTIONS)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
259
+ #{ASCIIDOC_BLANK_HDR}
260
+ <<iso216>>
261
+
262
+ [bibliography]
263
+ == Normative References
264
+ * [[[iso216,ISO 216:2001]]], _Reference_
265
+ INPUT
266
+ #{BLANK_HDR}
267
+ <preface>
268
+ <foreword id="_" obligation="informative">
269
+ <title>Foreword</title>
270
+ <p id="_">
271
+ <eref bibitemid="iso216" citeas="ISO 216:2001" type="inline"/>
272
+ </p>
273
+ </foreword>
274
+ </preface>
275
+ <sections>
276
+ </sections>
277
+ <bibliography>
278
+ <references id="_" normative="true" obligation="informative">
279
+ <title>Normative references</title>
280
+ <p id="_">The following documents are referred to in the text in such a way that some or all of their content constitutes requirements of this document. For dated references, only the edition cited applies. For undated references, the latest edition of the referenced document (including any amendments) applies.</p>
281
+ <bibitem id="iso216" type="standard">
282
+ <title format="text/plain">Reference</title>
283
+ <docidentifier>ISO 216:2001</docidentifier>
284
+ <docnumber>216</docnumber>
285
+ <date type="published">
286
+ <on>2001</on>
287
+ </date>
288
+ <contributor>
289
+ <role type="publisher"/>
290
+ <organization>
291
+ <name>International Organization for Standardization</name>
292
+ <abbreviation>ISO</abbreviation>
293
+ </organization>
294
+ </contributor>
295
+ </bibitem>
296
+ </references>
297
+ </bibliography>
298
+ </iso-standard>
299
+ OUTPUT
300
+ end
301
+
302
+ it "extracts localities from erefs" do
303
+ expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", *OPTIONS)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
304
+ #{ASCIIDOC_BLANK_HDR}
305
+ <<iso216,whole,clause=3,example=9-11,locality:prelude=33,locality:entirety:the reference>>
306
+
307
+ [bibliography]
308
+ == Normative References
309
+ * [[[iso216,ISO 216]]], _Reference_
310
+ INPUT
311
+ #{BLANK_HDR}
312
+ <preface>
313
+ <foreword id="_" obligation="informative">
314
+ <title>Foreword</title>
315
+ <p id="_">
316
+ <eref bibitemid="iso216" citeas="ISO 216" type="inline">
317
+ <localityStack>
318
+ <locality type="whole"/>
319
+ <locality type="clause">
320
+ <referenceFrom>3</referenceFrom>
321
+ </locality>
322
+ <locality type="example">
323
+ <referenceFrom>9</referenceFrom>
324
+ <referenceTo>11</referenceTo>
325
+ </locality>
326
+ <locality type="locality:prelude">
327
+ <referenceFrom>33</referenceFrom>
328
+ </locality>
329
+ <locality type="locality:entirety"/>
330
+ </localityStack>the reference</eref>
331
+ </p>
332
+ </foreword>
333
+ </preface>
334
+ <sections>
335
+ </sections>
336
+ <bibliography>
337
+ <references id="_" normative="true" obligation="informative">
338
+ <title>Normative references</title>
339
+ <p id="_">The following documents are referred to in the text in such a way that some or all of their content constitutes requirements of this document. For dated references, only the edition cited applies. For undated references, the latest edition of the referenced document (including any amendments) applies.</p>
340
+ <bibitem id="iso216" type="standard">
341
+ <title format="text/plain">Reference</title>
342
+ <docidentifier>ISO 216</docidentifier>
343
+ <docnumber>216</docnumber>
344
+ <contributor>
345
+ <role type="publisher"/>
346
+ <organization>
347
+ <name>International Organization for Standardization</name>
348
+ <abbreviation>ISO</abbreviation>
349
+ </organization>
350
+ </contributor>
351
+ </bibitem>
352
+ </references>
353
+ </bibliography>
354
+ </iso-standard>
355
+ OUTPUT
356
+ end
357
+
358
+ it "strips type from xrefs" do
359
+ expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", *OPTIONS)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
360
+ #{ASCIIDOC_BLANK_HDR}
361
+ <<iso216>>
362
+
363
+ [bibliography]
364
+ == Clause
365
+ * [[[iso216,ISO 216]]], _Reference_
366
+ INPUT
367
+ #{BLANK_HDR}
368
+ <preface>
369
+ <foreword id="_" obligation="informative">
370
+ <title>Foreword</title>
371
+ <p id="_">
372
+ <eref bibitemid="iso216" citeas="ISO 216" type="inline"/>
373
+ </p>
374
+ </foreword>
375
+ </preface>
376
+ <sections>
377
+ </sections>
378
+ <bibliography>
379
+ <references id="_" normative="false" obligation="informative">
380
+ <title>Bibliography</title>
381
+ <bibitem id="iso216" type="standard">
382
+ <title format="text/plain">Reference</title>
383
+ <docidentifier>ISO 216</docidentifier>
384
+ <docnumber>216</docnumber>
385
+ <contributor>
386
+ <role type="publisher"/>
387
+ <organization>
388
+ <name>International Organization for Standardization</name>
389
+ <abbreviation>ISO</abbreviation>
390
+ </organization>
391
+ </contributor>
392
+ </bibitem>
393
+ </references>
394
+ </bibliography>
395
+ </iso-standard>
396
+ OUTPUT
397
+ end
398
+
399
+ it "processes localities in term sources" do
400
+ expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", *OPTIONS)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
401
+ #{ASCIIDOC_BLANK_HDR}
402
+ == Terms and Definitions
403
+
404
+ === Term1
405
+
406
+ [.source]
407
+ <<ISO2191,section=1>>
408
+ INPUT
409
+ #{BLANK_HDR}
410
+ <sections>
411
+ <terms id="_" obligation="normative">
412
+ <title>Terms and definitions</title>
413
+ #{TERM_BOILERPLATE}
414
+ <term id="term-term1">
415
+ <preferred>Term1</preferred>
416
+ <termsource status="identical">
417
+ <origin bibitemid="ISO2191" citeas="" type="inline">
418
+ <localityStack>
419
+ <locality type="section">
420
+ <referenceFrom>1</referenceFrom></locality>
421
+ </localityStack>
422
+ </origin>
423
+ </termsource>
424
+ </term>
425
+ </terms>
426
+ </sections>
427
+ </iso-standard>
428
+ OUTPUT
429
+ end
430
+
431
+ it "removes extraneous material from Normative References" do
432
+ expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", *OPTIONS)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
433
+ #{ASCIIDOC_BLANK_HDR}
434
+ [bibliography]
435
+ == Normative References
436
+
437
+ This is extraneous information
438
+
439
+ * [[[iso216,ISO 216]]], _Reference_
440
+ INPUT
441
+ #{BLANK_HDR}
442
+ <sections></sections>
443
+ <bibliography>
444
+ <references id="_" normative="true" obligation="informative">
445
+ <title>Normative references</title>
446
+ <p id="_">The following documents are referred to in the text in such a way that some or all of their content constitutes requirements of this document. For dated references, only the edition cited applies. For undated references, the latest edition of the referenced document (including any amendments) applies.</p>
447
+ <bibitem id="iso216" type="standard">
448
+ <title format="text/plain">Reference</title>
449
+ <docidentifier>ISO 216</docidentifier>
450
+ <docnumber>216</docnumber>
451
+ <contributor>
452
+ <role type="publisher"/>
453
+ <organization>
454
+ <name>International Organization for Standardization</name>
455
+ <abbreviation>ISO</abbreviation>
456
+ </organization>
457
+ </contributor>
458
+ </bibitem>
459
+ </references>
460
+ </bibliography>
461
+ </iso-standard>
462
+ OUTPUT
463
+ end
464
+
465
+ it "inserts IDs into paragraphs" do
466
+ expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", *OPTIONS)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
467
+ #{ASCIIDOC_BLANK_HDR}
468
+ Paragraph
469
+ INPUT
470
+ #{BLANK_HDR}
471
+ <sections>
472
+ <p id="_">Paragraph</p>
473
+ </sections>
474
+ </iso-standard>
475
+ OUTPUT
476
+ end
477
+
478
+ it "inserts IDs into notes" do
479
+ expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", *OPTIONS)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
480
+ #{ASCIIDOC_BLANK_HDR}
481
+ [example]
482
+ ====
483
+ NOTE: This note has no ID
484
+ ====
485
+ INPUT
486
+ #{BLANK_HDR}
487
+ <sections>
488
+ <example id="_">
489
+ <note id="_">
490
+ <p id="_">This note has no ID</p>
491
+ </note>
492
+ </example>
493
+ </sections>
494
+ </iso-standard>
495
+ OUTPUT
496
+ end
497
+
498
+ it "moves table key inside table" do
499
+ expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", *OPTIONS)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
500
+ #{ASCIIDOC_BLANK_HDR}
501
+ |===
502
+ |a |b |c
503
+ |===
504
+
505
+ Key
506
+
507
+ a:: b
508
+ INPUT
509
+ #{BLANK_HDR}
510
+ <sections>
511
+ <table id="_">
512
+ <tbody>
513
+ <tr>
514
+ <td align="left" valign="top">a</td>
515
+ <td align="left" valign="top">b</td>
516
+ <td align="left" valign="top">c</td>
517
+ </tr>
518
+ </tbody>
519
+ <dl id="_" key="true">
520
+ <dt>a</dt>
521
+ <dd>
522
+ <p id="_">b</p>
523
+ </dd>
524
+ </dl>
525
+ </table>
526
+ </sections>
527
+ </iso-standard>
528
+ OUTPUT
529
+ end
530
+
531
+ it "processes headerrows attribute for table without header rows" do
532
+ expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", *OPTIONS)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
533
+ #{ASCIIDOC_BLANK_HDR}
534
+ [headerrows=3]
535
+ |===
536
+ |a |b |c
537
+ |a |b |c
538
+ |a |b |c
539
+ |a |b |c
540
+ |===
541
+ INPUT
542
+ #{BLANK_HDR}
543
+ <sections>
544
+ <table id="_">
545
+ <thead>
546
+ <tr>
547
+ <th align="left" valign="top">a</th>
548
+ <th align="left" valign="top">b</th>
549
+ <th align="left" valign="top">c</th>
550
+ </tr>
551
+ <tr>
552
+ <th align="left" valign="top">a</th>
553
+ <th align="left" valign="top">b</th>
554
+ <th align="left" valign="top">c</th>
555
+ </tr>
556
+ <tr>
557
+ <th align="left" valign="top">a</th>
558
+ <th align="left" valign="top">b</th>
559
+ <th align="left" valign="top">c</th>
560
+ </tr>
561
+ </thead>
562
+ <tbody>
563
+ <tr>
564
+ <td align="left" valign="top">a</td>
565
+ <td align="left" valign="top">b</td>
566
+ <td align="left" valign="top">c</td>
567
+ </tr>
568
+ </tbody>
569
+ </table>
570
+ </sections>
571
+ </iso-standard>
572
+ OUTPUT
573
+ end
574
+
575
+ it "processes headerrows attribute for table with header rows" do
576
+ expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", *OPTIONS)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
577
+ #{ASCIIDOC_BLANK_HDR}
578
+ [headerrows=3]
579
+ |===
580
+ |a |b |c
581
+
582
+ |a |b |c
583
+ |a |b |c
584
+ |a |b |c
585
+ |===
586
+ INPUT
587
+ #{BLANK_HDR}
588
+ <sections>
589
+ <table id="_">
590
+ <thead>
591
+ <tr>
592
+ <th align="left" valign="top">a</th>
593
+ <th align="left" valign="top">b</th>
594
+ <th align="left" valign="top">c</th>
595
+ </tr>
596
+ <tr>
597
+ <th align="left" valign="top">a</th>
598
+ <th align="left" valign="top">b</th>
599
+ <th align="left" valign="top">c</th>
600
+ </tr>
601
+ <tr>
602
+ <th align="left" valign="top">a</th>
603
+ <th align="left" valign="top">b</th>
604
+ <th align="left" valign="top">c</th>
605
+ </tr>
606
+ </thead>
607
+ <tbody>
608
+ <tr>
609
+ <td align="left" valign="top">a</td>
610
+ <td align="left" valign="top">b</td>
611
+ <td align="left" valign="top">c</td>
612
+ </tr>
613
+ </tbody>
614
+ </table>
615
+ </sections>
616
+ </iso-standard>
617
+ OUTPUT
618
+ end
619
+
620
+ it "moves table notes inside table" do
621
+ expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", *OPTIONS)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
622
+ #{ASCIIDOC_BLANK_HDR}
623
+ |===
624
+ |a |b |c
625
+ |===
626
+
627
+ NOTE: Note 1
628
+
629
+ NOTE: Note 2
630
+ INPUT
631
+ #{BLANK_HDR}
632
+ <sections>
633
+ <table id="_">
634
+ <tbody>
635
+ <tr>
636
+ <td align="left" valign="top">a</td>
637
+ <td align="left" valign="top">b</td>
638
+ <td align="left" valign="top">c</td>
639
+ </tr>
640
+ </tbody>
641
+ <note id="_">
642
+ <p id="_">Note 1</p>
643
+ </note>
644
+ <note id="_">
645
+ <p id="_">Note 2</p>
646
+ </note>
647
+ </table>
648
+ </sections>
649
+ </iso-standard>
650
+ OUTPUT
651
+ end
652
+
653
+ it "moves formula key inside formula" do
654
+ expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", *OPTIONS)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
655
+ #{ASCIIDOC_BLANK_HDR}
656
+ [stem]
657
+ ++++
658
+ Formula
659
+ ++++
660
+
661
+ where
662
+
663
+ a:: b
664
+ INPUT
665
+ #{BLANK_HDR}
666
+ <sections>
667
+ <formula id="_">
668
+ <stem type="MathML">
669
+ <math xmlns="http://www.w3.org/1998/Math/MathML">
670
+ <mi>F</mi>
671
+ <mi>or</mi>
672
+ <mi>μ</mi>
673
+ <mi>l</mi>
674
+ <mi>a</mi>
675
+ </math>
676
+ </stem>
677
+ <dl id="_" key="true">
678
+ <dt>a</dt>
679
+ <dd>
680
+ <p id="_">b</p>
681
+ </dd>
682
+ </dl>
683
+ </formula>
684
+ </sections>
685
+ </iso-standard>
686
+ OUTPUT
687
+ end
688
+
689
+ it "moves footnotes inside figures" do
690
+ expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", *OPTIONS)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
691
+ #{ASCIIDOC_BLANK_HDR}
692
+ image::spec/examples/rice_images/rice_image1.png[]
693
+
694
+ footnote:[This is a footnote to a figure]
695
+
696
+ footnote:[This is another footnote to a figure]
697
+ INPUT
698
+ #{BLANK_HDR}
699
+ <sections>
700
+ <figure id="_">
701
+ <image height="auto" id="_" mimetype="image/png" src="spec/examples/rice_images/rice_image1.png" width="auto"/>
702
+ <fn reference="a">
703
+ <p id="_">This is a footnote to a figure</p>
704
+ </fn>
705
+ <fn reference="b">
706
+ <p id="_">This is another footnote to a figure</p>
707
+ </fn>
708
+ </figure>
709
+ </sections>
710
+ </iso-standard>
711
+ OUTPUT
712
+ end
713
+
714
+ it "moves figure key inside figure" do
715
+ expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", *OPTIONS)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
716
+ #{ASCIIDOC_BLANK_HDR}
717
+ image::spec/examples/rice_images/rice_image1.png[]
718
+
719
+ Key
720
+
721
+ a:: b
722
+ INPUT
723
+ #{BLANK_HDR}
724
+ <sections>
725
+ <figure id="_">
726
+ <image height="auto" id="_" mimetype="image/png" src="spec/examples/rice_images/rice_image1.png" width="auto"/>
727
+ <dl id="_" key="true">
728
+ <dt>a</dt>
729
+ <dd>
730
+ <p id="_">b</p>
731
+ </dd>
732
+ </dl>
733
+ </figure>
734
+ </sections>
735
+ </iso-standard>
736
+ OUTPUT
737
+ end
738
+
739
+ it "numbers bibliographic notes and footnotes sequentially" do
740
+ expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", *OPTIONS)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
741
+ #{ASCIIDOC_BLANK_HDR}
742
+ footnote:[Footnote]
743
+
744
+ [bibliography]
745
+ == Normative References
746
+
747
+ * [[[iso123,ISO 123:--]]] footnote:[The standard is in press] _Standard_
748
+
749
+ == Clause
750
+ footnote:[Footnote2]
751
+ INPUT
752
+ #{BLANK_HDR}
753
+ <preface>
754
+ <foreword id="_" obligation="informative">
755
+ <title>Foreword</title>
756
+ <p id="_">
757
+ <fn reference="1">
758
+ <p id="_">Footnote</p>
759
+ </fn>
760
+ </p>
761
+ </foreword>
762
+ </preface>
763
+ <sections>
764
+ <clause id="_" inline-header="false" obligation="normative">
765
+ <title>Clause</title>
766
+ <p id="_">
767
+ <fn reference="2">
768
+ <p id="_">Footnote2</p>
769
+ </fn>
770
+ </p>
771
+ </clause>
772
+ </sections>
773
+ <bibliography>
774
+ <references id="_" normative="true" obligation="informative">
775
+ <title>Normative references</title>
776
+ <p id="_">The following documents are referred to in the text in such a way that some or all of their content constitutes requirements of this document. For dated references, only the edition cited applies. For undated references, the latest edition of the referenced document (including any amendments) applies.</p>
777
+ <bibitem id="iso123" type="standard">
778
+ <title format="text/plain">Standard</title>
779
+ <docidentifier>ISO 123:—</docidentifier>
780
+ <docnumber>123</docnumber>
781
+ <date type="published">
782
+ <on>–</on>
783
+ </date>
784
+ <contributor>
785
+ <role type="publisher"/>
786
+ <organization>
787
+ <name>International Organization for Standardization</name>
788
+ <abbreviation>ISO</abbreviation>
789
+ </organization>
790
+ </contributor>
791
+ <note format="text/plain" type="Unpublished-Status">The standard is in press</note>
792
+ </bibitem>
793
+ </references>
794
+ </bibliography>
795
+ </iso-standard>
796
+ OUTPUT
797
+ end
798
+
799
+ it "defaults section obligations" do
800
+ expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", *OPTIONS)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
801
+ #{ASCIIDOC_BLANK_HDR}
802
+
803
+ == Clause
804
+ Text
805
+
806
+ [appendix]
807
+ == Clause
808
+
809
+ Text
810
+ INPUT
811
+ #{BLANK_HDR}
812
+ <sections>
813
+ <clause id="_" inline-header="false" obligation="normative">
814
+ <title>Clause</title>
815
+ <p id="_">Text</p>
816
+ </clause>
817
+ </sections>
818
+ <annex id="_" inline-header="false" obligation="normative">
819
+ <title>Clause</title>
820
+ <p id="_">Text</p>
821
+ </annex>
822
+ </iso-standard>
823
+ OUTPUT
824
+ end
825
+
826
+ it "extends clause levels past 5" do
827
+ expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", *OPTIONS)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
828
+ #{ASCIIDOC_BLANK_HDR}
829
+
830
+ == Clause1
831
+
832
+ === Clause2
833
+
834
+ ==== Clause3
835
+
836
+ ===== Clause4
837
+
838
+ ====== Clause 5
839
+
840
+ [level=6]
841
+ ====== Clause 6
842
+
843
+ [level=7]
844
+ ====== Clause 7A
845
+
846
+ [level=7]
847
+ ====== Clause 7B
848
+
849
+ [level=6]
850
+ ====== Clause 6B
851
+
852
+ ====== Clause 5B
853
+
854
+ INPUT
855
+ #{BLANK_HDR}
856
+ <sections>
857
+ <clause id="_" inline-header="false" obligation="normative">
858
+ <title>Clause1</title>
859
+ <clause id="_" inline-header="false" obligation="normative">
860
+ <title>Clause2</title>
861
+ <clause id="_" inline-header="false" obligation="normative">
862
+ <title>Clause3</title>
863
+ <clause id="_" inline-header="false" obligation="normative">
864
+ <title>Clause4</title>
865
+ <clause id="_" inline-header="false" obligation="normative">
866
+ <title>Clause 5</title>
867
+ <clause id="_" inline-header="false" obligation="normative">
868
+ <title>Clause 6</title>
869
+ <clause id="_" inline-header="false" obligation="normative">
870
+ <title>Clause 7A</title>
871
+ </clause>
872
+ <clause id="_" inline-header="false" obligation="normative">
873
+ <title>Clause 7B</title>
874
+ </clause>
875
+ </clause>
876
+ <clause id="_" inline-header="false" obligation="normative">
877
+ <title>Clause 6B</title>
878
+ </clause>
879
+ </clause>
880
+ <clause id="_" inline-header="false" obligation="normative">
881
+ <title>Clause 5B</title>
882
+ </clause>
883
+ </clause>
884
+ </clause>
885
+ </clause>
886
+ </clause>
887
+ </sections>
888
+ </iso-standard>
889
+ OUTPUT
890
+ end
891
+
892
+ it "reorders references in bibliography, and renumbers citations accordingly" do
893
+ expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", *OPTIONS)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
894
+ #{ASCIIDOC_BLANK_HDR}
895
+
896
+ == Clause 1
897
+ <<ref1>>
898
+ <<ref1a>>
899
+ <<ref1b>>
900
+ <<ref2>>
901
+ <<ref3>>
902
+ <<ref4>>
903
+ <<ref5>>
904
+ <<ref6>>
905
+ <<ref7>>
906
+ <<ref8>>
907
+ <<ref9>>
908
+ <<ref10>>
909
+
910
+ [bibliography]
911
+ == Bibliography
912
+
913
+ [bibliography]
914
+ === Clause 1
915
+ * [[[ref3,IEC 123]]], _Standard IEC 123_
916
+ * [[[ref5,20]]], _Standard 10_
917
+ * [[[ref1,ISO 123]]], _Standard ISO 123_
918
+ * [[[ref1a,ISO 123-100]]], _Standard ISO 123_
919
+ * [[[ref1b,ISO/TS 123-1]]], _Standard ISO 123_
920
+ * [[[ref4,GB 123]]], _Standard GB 123_
921
+ * [[[ref2,ISO/IEC 123]]], _Standard ISO/IEC 123_
922
+ * [[[ref6,(B)]]], _Standard 20_
923
+ * [[[ref7,(A)]]], _Standard 30_
924
+
925
+ [bibliography]
926
+ === {blank}
927
+ * [[[ref15,20]]], _Standard 10_
928
+ * [[[ref14,GB 123]]], _Standard GB 123_
929
+ * [[[ref13,IEC 123]]], _Standard IEC 123_
930
+ * [[[ref11,ISO 123]]], _Standard ISO 123_
931
+ * [[[ref10,ISO/IEC 123]]], _Standard ISO/IEC 123_
932
+ * [[[ref16,(B)]]], _Standard 20_
933
+ * [[[ref17,(A)]]], _Standard 30_
934
+ INPUT
935
+ #{BLANK_HDR}
936
+ <sections>
937
+ <clause id="_" inline-header="false" obligation="normative">
938
+ <title>Clause 1</title>
939
+ <p id="_">
940
+ <eref bibitemid="ref1" citeas="ISO 123" type="inline"/>
941
+ <eref bibitemid="ref1a" citeas="ISO 123-100" type="inline"/>
942
+ <eref bibitemid="ref1b" citeas="ISO/TS 123-1" type="inline"/>
943
+ <eref bibitemid="ref2" citeas="ISO/IEC 123" type="inline"/>
944
+ <eref bibitemid="ref3" citeas="IEC 123" type="inline"/>
945
+ <eref bibitemid="ref4" citeas="GB 123" type="inline"/>
946
+ <eref bibitemid="ref5" citeas="[6]" type="inline"/>
947
+ <eref bibitemid="ref6" citeas="[B]" type="inline"/>
948
+ <eref bibitemid="ref7" citeas="[A]" type="inline"/>
949
+ <xref target="ref8"/>
950
+ <xref target="ref9"/>
951
+ <eref bibitemid="ref10" citeas="ISO/IEC 123" type="inline"/>
952
+ </p>
953
+ </clause>
954
+ </sections>
955
+ <bibliography>
956
+ <clause id="_" obligation="informative">
957
+ <title>Bibliography</title>
958
+ <references id="_" normative="false" obligation="informative">
959
+ <title>Clause 1</title>
960
+ <bibitem id="ref1" type="standard">
961
+ <title format="text/plain">Standard ISO 123</title>
962
+ <docidentifier>ISO 123</docidentifier>
963
+ <docnumber>123</docnumber>
964
+ <contributor>
965
+ <role type="publisher"/>
966
+ <organization>
967
+ <name>International Organization for Standardization</name>
968
+ <abbreviation>ISO</abbreviation>
969
+ </organization>
970
+ </contributor>
971
+ </bibitem>
972
+ <bibitem id="ref2" type="standard">
973
+ <title format="text/plain">Standard ISO/IEC 123</title>
974
+ <docidentifier>ISO/IEC 123</docidentifier>
975
+ <docnumber>123</docnumber>
976
+ <contributor>
977
+ <role type="publisher"/>
978
+ <organization>
979
+ <name>International Organization for Standardization</name>
980
+ <abbreviation>ISO</abbreviation>
981
+ </organization>
982
+ </contributor>
983
+ <contributor>
984
+ <role type="publisher"/>
985
+ <organization>
986
+ <name>International Electrotechnical Commission</name>
987
+ <abbreviation>IEC</abbreviation>
988
+ </organization>
989
+ </contributor>
990
+ </bibitem>
991
+ <bibitem id="ref1b" type="standard">
992
+ <title format="text/plain">Standard ISO 123</title>
993
+ <docidentifier>ISO/TS 123-1</docidentifier>
994
+ <docnumber>123-1</docnumber>
995
+ <contributor>
996
+ <role type="publisher"/>
997
+ <organization>
998
+ <name>International Organization for Standardization</name>
999
+ <abbreviation>ISO</abbreviation>
1000
+ </organization>
1001
+ </contributor>
1002
+ <contributor>
1003
+ <role type="publisher"/>
1004
+ <organization>
1005
+ <name>TS</name>
1006
+ </organization>
1007
+ </contributor>
1008
+ </bibitem>
1009
+ <bibitem id="ref1a" type="standard">
1010
+ <title format="text/plain">Standard ISO 123</title>
1011
+ <docidentifier>ISO 123-100</docidentifier>
1012
+ <docnumber>123-100</docnumber>
1013
+ <contributor>
1014
+ <role type="publisher"/>
1015
+ <organization>
1016
+ <name>International Organization for Standardization</name>
1017
+ <abbreviation>ISO</abbreviation>
1018
+ </organization>
1019
+ </contributor>
1020
+ </bibitem>
1021
+ <bibitem id="ref3" type="standard">
1022
+ <title format="text/plain">Standard IEC 123</title>
1023
+ <docidentifier>IEC 123</docidentifier>
1024
+ <docnumber>123</docnumber>
1025
+ <contributor>
1026
+ <role type="publisher"/>
1027
+ <organization>
1028
+ <name>International Electrotechnical Commission</name>
1029
+ <abbreviation>IEC</abbreviation>
1030
+ </organization>
1031
+ </contributor>
1032
+ </bibitem>
1033
+ <bibitem id="ref5">
1034
+ <formattedref format="application/x-isodoc+xml">
1035
+ <em>Standard 10</em>
1036
+ </formattedref>
1037
+ <docidentifier type="metanorma">[6]</docidentifier>
1038
+ </bibitem>
1039
+ <bibitem id="ref6">
1040
+ <formattedref format="application/x-isodoc+xml">
1041
+ <em>Standard 20</em>
1042
+ </formattedref>
1043
+ <docidentifier type="metanorma">[B]</docidentifier>
1044
+ </bibitem>
1045
+ <bibitem id="ref7">
1046
+ <formattedref format="application/x-isodoc+xml">
1047
+ <em>Standard 30</em>
1048
+ </formattedref>
1049
+ <docidentifier type="metanorma">[A]</docidentifier>
1050
+ </bibitem>
1051
+ <bibitem id="ref4">
1052
+ <formattedref format="application/x-isodoc+xml">
1053
+ <em>Standard GB 123</em>
1054
+ </formattedref>
1055
+ <docidentifier>GB 123</docidentifier>
1056
+ <docnumber>123</docnumber>
1057
+ </bibitem>
1058
+ </references>
1059
+ <references id="_" normative="false" obligation="informative">
1060
+ <bibitem id="ref11" type="standard">
1061
+ <title format="text/plain">Standard ISO 123</title>
1062
+ <docidentifier>ISO 123</docidentifier>
1063
+ <docnumber>123</docnumber>
1064
+ <contributor>
1065
+ <role type="publisher"/>
1066
+ <organization>
1067
+ <name>International Organization for Standardization</name>
1068
+ <abbreviation>ISO</abbreviation>
1069
+ </organization>
1070
+ </contributor>
1071
+ </bibitem>
1072
+ <bibitem id="ref10" type="standard">
1073
+ <title format="text/plain">Standard ISO/IEC 123</title>
1074
+ <docidentifier>ISO/IEC 123</docidentifier>
1075
+ <docnumber>123</docnumber>
1076
+ <contributor>
1077
+ <role type="publisher"/>
1078
+ <organization>
1079
+ <name>International Organization for Standardization</name>
1080
+ <abbreviation>ISO</abbreviation>
1081
+ </organization>
1082
+ </contributor>
1083
+ <contributor>
1084
+ <role type="publisher"/>
1085
+ <organization>
1086
+ <name>International Electrotechnical Commission</name>
1087
+ <abbreviation>IEC</abbreviation>
1088
+ </organization>
1089
+ </contributor>
1090
+ </bibitem>
1091
+ <bibitem id="ref13" type="standard">
1092
+ <title format="text/plain">Standard IEC 123</title>
1093
+ <docidentifier>IEC 123</docidentifier>
1094
+ <docnumber>123</docnumber>
1095
+ <contributor>
1096
+ <role type="publisher"/>
1097
+ <organization>
1098
+ <name>International Electrotechnical Commission</name>
1099
+ <abbreviation>IEC</abbreviation>
1100
+ </organization>
1101
+ </contributor>
1102
+ </bibitem>
1103
+ <bibitem id="ref15">
1104
+ <formattedref format="application/x-isodoc+xml">
1105
+ <em>Standard 10</em>
1106
+ </formattedref>
1107
+ <docidentifier type="metanorma">[13]</docidentifier>
1108
+ </bibitem>
1109
+ <bibitem id="ref16">
1110
+ <formattedref format="application/x-isodoc+xml">
1111
+ <em>Standard 20</em>
1112
+ </formattedref>
1113
+ <docidentifier type="metanorma">[B]</docidentifier>
1114
+ </bibitem>
1115
+ <bibitem id="ref17">
1116
+ <formattedref format="application/x-isodoc+xml">
1117
+ <em>Standard 30</em>
1118
+ </formattedref>
1119
+ <docidentifier type="metanorma">[A]</docidentifier>
1120
+ </bibitem>
1121
+ <bibitem id="ref14">
1122
+ <formattedref format="application/x-isodoc+xml">
1123
+ <em>Standard GB 123</em>
1124
+ </formattedref>
1125
+ <docidentifier>GB 123</docidentifier>
1126
+ <docnumber>123</docnumber>
1127
+ </bibitem>
1128
+ </references>
1129
+ </clause>
1130
+ </bibliography>
1131
+ </iso-standard>
1132
+ OUTPUT
1133
+ end
1134
+ end