asciidoctor-iso 0.6.1 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/.gitattributes +2 -0
  3. data/.travis.yml +5 -0
  4. data/Gemfile.lock +12 -10
  5. data/README.adoc +113 -16
  6. data/bin/rspec +18 -0
  7. data/lib/asciidoctor/iso/base.rb +30 -28
  8. data/lib/asciidoctor/iso/blocks.rb +33 -33
  9. data/lib/asciidoctor/iso/cleanup.rb +79 -33
  10. data/lib/asciidoctor/iso/cleanup_block.rb +71 -18
  11. data/lib/asciidoctor/iso/cleanup_ref.rb +35 -30
  12. data/lib/asciidoctor/iso/converter.rb +0 -3
  13. data/lib/asciidoctor/iso/front.rb +29 -16
  14. data/lib/asciidoctor/iso/html/isodoc.css +34 -0
  15. data/lib/asciidoctor/iso/html/wordstyle.css +138 -6
  16. data/lib/asciidoctor/iso/inline.rb +10 -22
  17. data/lib/asciidoctor/iso/isodoc.rng +66 -16
  18. data/lib/asciidoctor/iso/isostandard.rng +129 -15
  19. data/lib/asciidoctor/iso/lists.rb +49 -42
  20. data/lib/asciidoctor/iso/macros.rb +12 -8
  21. data/lib/asciidoctor/iso/section.rb +53 -37
  22. data/lib/asciidoctor/iso/table.rb +9 -1
  23. data/lib/asciidoctor/iso/utils.rb +18 -13
  24. data/lib/asciidoctor/iso/validate.rb +100 -24
  25. data/lib/asciidoctor/iso/validate_requirements.rb +106 -0
  26. data/lib/asciidoctor/iso/validate_section.rb +85 -65
  27. data/lib/asciidoctor/iso/validate_style.rb +68 -115
  28. data/lib/asciidoctor/iso/version.rb +1 -1
  29. data/spec/asciidoctor-iso/base_spec.rb +193 -0
  30. data/spec/asciidoctor-iso/blocks_spec.rb +426 -0
  31. data/spec/asciidoctor-iso/cleanup_spec.rb +687 -0
  32. data/spec/asciidoctor-iso/inline_spec.rb +159 -0
  33. data/spec/asciidoctor-iso/lists_spec.rb +189 -0
  34. data/spec/asciidoctor-iso/macros_spec.rb +20 -0
  35. data/spec/asciidoctor-iso/refs_spec.rb +194 -0
  36. data/spec/asciidoctor-iso/section_spec.rb +301 -0
  37. data/spec/asciidoctor-iso/table_spec.rb +307 -0
  38. data/spec/asciidoctor-iso/validate_spec.rb +749 -0
  39. data/spec/examples/english.yaml +69 -0
  40. data/spec/examples/rice.adoc +30 -28
  41. data/spec/examples/rice.doc +3035 -2865
  42. data/spec/examples/rice.html +281 -234
  43. data/spec/examples/rice.preview.html +30 -20
  44. data/spec/examples/rice.xml +250 -282
  45. data/spec/spec_helper.rb +87 -0
  46. metadata +17 -2
@@ -0,0 +1,687 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe Asciidoctor::ISO do
4
+ it "removes empty text elements" do
5
+ expect(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true))).to be_equivalent_to <<~"OUTPUT"
6
+ #{ASCIIDOC_BLANK_HDR}
7
+ == {blank}
8
+ INPUT
9
+ #{BLANK_HDR}
10
+ <sections>
11
+ <clause id="_" inline-header="false" obligation="normative">
12
+
13
+ </clause>
14
+ </sections>
15
+ </iso-standard>
16
+ OUTPUT
17
+ end
18
+
19
+ it "processes stem-only terms as admitted" do
20
+ expect(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true))).to be_equivalent_to <<~"OUTPUT"
21
+ #{ASCIIDOC_BLANK_HDR}
22
+ == Terms and Definitions
23
+
24
+ === stem:[t_90]
25
+
26
+ stem:[t_91]
27
+
28
+ Time
29
+ INPUT
30
+ #{BLANK_HDR}
31
+ <sections>
32
+ <terms id="_" obligation="normative">
33
+ <title>Terms and Definitions</title>
34
+ <term id="_"><preferred><stem type="AsciiMath">t_90</stem></preferred><admitted><stem type="AsciiMath">t_91</stem></admitted>
35
+ <definition><p id="_">Time</p></definition></term>
36
+ </terms>
37
+ </sections>
38
+ </iso-standard>
39
+ OUTPUT
40
+ end
41
+
42
+ it "moves term domains out of the term definition paragraph" do
43
+ expect(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true))).to be_equivalent_to <<~"OUTPUT"
44
+ #{ASCIIDOC_BLANK_HDR}
45
+ == Terms and Definitions
46
+
47
+ === Tempus
48
+
49
+ domain:[relativity] Time
50
+ INPUT
51
+ #{BLANK_HDR}
52
+ <sections>
53
+ <terms id="_" obligation="normative">
54
+ <title>Terms and Definitions</title>
55
+ <term id="_">
56
+ <preferred>Tempus</preferred>
57
+ <domain>relativity</domain><definition><p id="_"> Time</p></definition>
58
+ </term>
59
+ </terms>
60
+ </sections>
61
+ </iso-standard>
62
+ OUTPUT
63
+ end
64
+
65
+ it "permits multiple blocks in term definition paragraph" do
66
+ expect(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true))).to be_equivalent_to <<~"OUTPUT"
67
+ = Document title
68
+ Author
69
+ :docfile: test.adoc
70
+ :nodoc:
71
+ :novalid:
72
+ :stem:
73
+
74
+ == Terms and Definitions
75
+
76
+ === stem:[t_90]
77
+
78
+ [stem]
79
+ ++++
80
+ t_A
81
+ ++++
82
+
83
+ This paragraph is extraneous
84
+ INPUT
85
+ #{BLANK_HDR}
86
+ <sections>
87
+ <terms id="_" obligation="normative">
88
+ <title>Terms and Definitions</title>
89
+ <term id="_"><preferred><stem type="AsciiMath">t_90</stem></preferred><definition><formula id="_">
90
+ <stem type="AsciiMath">t_A</stem>
91
+ </formula><p id="_">This paragraph is extraneous</p></definition>
92
+ </term>
93
+ </terms>
94
+ </sections>
95
+ </iso-standard>
96
+ OUTPUT
97
+ end
98
+
99
+ it "strips any initial boilerplate from terms and definitions" do
100
+ expect(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true))).to be_equivalent_to <<~"OUTPUT"
101
+ #{ASCIIDOC_BLANK_HDR}
102
+ == Terms and Definitions
103
+
104
+ I am boilerplate
105
+
106
+ * So am I
107
+
108
+ === Time
109
+
110
+ This paragraph is extraneous
111
+ INPUT
112
+ #{BLANK_HDR}
113
+ <sections>
114
+ <terms id="_" obligation="normative"><title>Terms and Definitions</title>
115
+
116
+ <term id="_">
117
+ <preferred>Time</preferred>
118
+ <definition><p id="_">This paragraph is extraneous</p></definition>
119
+ </term></terms>
120
+ </sections>
121
+ </iso-standard>
122
+ OUTPUT
123
+ end
124
+
125
+ it "moves notes inside preceding blocks, if they are not at clause end" do
126
+ expect(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true))).to be_equivalent_to <<~"OUTPUT"
127
+ #{ASCIIDOC_BLANK_HDR}
128
+ [source,ruby]
129
+ [1...x].each do |y|
130
+ puts y
131
+ end
132
+
133
+ NOTE: That loop does not do much
134
+
135
+ Indeed.
136
+ INPUT
137
+ #{BLANK_HDR}
138
+ <sections><sourcecode id="_">[1...x].each do |y|
139
+ puts y
140
+ end<note id="_">
141
+ <p id="_">That loop does not do much</p>
142
+ </note></sourcecode>
143
+
144
+ <p id="_">Indeed.</p></sections>
145
+ </iso-standard>
146
+ OUTPUT
147
+ end
148
+
149
+ it "does not move notes inside preceding blocks, if they are at clause end" do
150
+ expect(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true))).to be_equivalent_to <<~"OUTPUT"
151
+ #{ASCIIDOC_BLANK_HDR}
152
+ [source,ruby]
153
+ [1...x].each do |y|
154
+ puts y
155
+ end
156
+
157
+ NOTE: That loop does not do much
158
+ INPUT
159
+ #{BLANK_HDR}
160
+ <sections><sourcecode id="_">[1...x].each do |y|
161
+ puts y
162
+ end</sourcecode>
163
+ <note id="_">
164
+ <p id="_">That loop does not do much</p>
165
+ </note></sections>
166
+ </iso-standard>
167
+ OUTPUT
168
+ end
169
+
170
+ it "converts xrefs to references into erefs" do
171
+ expect(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true))).to be_equivalent_to <<~"OUTPUT"
172
+ #{ASCIIDOC_BLANK_HDR}
173
+ <<iso216>>
174
+
175
+ [bibliography]
176
+ == Normative References
177
+ * [[[iso216,ISO 216:2001]]], _Reference_
178
+ INPUT
179
+ #{BLANK_HDR}
180
+ <foreword obligation="informative">
181
+ <title>Foreword</title>
182
+ <p id="_">
183
+ <eref type="inline" bibitemid="iso216" citeas="ISO 216: 2001"/>
184
+ </p>
185
+ </foreword><sections>
186
+ </sections><references id="_" obligation="informative">
187
+ <title>Normative References</title>
188
+ <bibitem id="iso216" type="standard">
189
+ <title format="text/plain">Reference</title>
190
+ <docidentifier>ISO 216</docidentifier>
191
+ <date type="published">2001</date>
192
+ <contributor>
193
+ <role type="publisher"/>
194
+ <organization>
195
+ <name>ISO</name>
196
+ </organization>
197
+ </contributor>
198
+ </bibitem>
199
+ </references>
200
+ </iso-standard>
201
+ OUTPUT
202
+ end
203
+
204
+ it "extracts localities from erefs" do
205
+ expect(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true))).to be_equivalent_to <<~"OUTPUT"
206
+ #{ASCIIDOC_BLANK_HDR}
207
+ <<iso216,whole,clause 3,example 9-11:the reference>>
208
+
209
+ [bibliography]
210
+ == Normative References
211
+ * [[[iso216,ISO 216]]], _Reference_
212
+ INPUT
213
+ #{BLANK_HDR}
214
+ <foreword obligation="informative">
215
+ <title>Foreword</title>
216
+ <p id="_">
217
+ <eref type="inline" bibitemid="iso216" citeas="ISO 216"><locality type="whole"/><locality type="clause"><referenceFrom>3</referenceFrom></locality><locality type="example"><referenceFrom>9</referenceFrom><referenceTo>11</referenceTo></locality>the reference</eref>
218
+ </p>
219
+ </foreword><sections>
220
+ </sections><references id="_" obligation="informative">
221
+ <title>Normative References</title>
222
+ <bibitem id="iso216" type="standard">
223
+ <title format="text/plain">Reference</title>
224
+ <docidentifier>ISO 216</docidentifier>
225
+ <contributor>
226
+ <role type="publisher"/>
227
+ <organization>
228
+ <name>ISO</name>
229
+ </organization>
230
+ </contributor>
231
+ </bibitem>
232
+ </references>
233
+ </iso-standard>
234
+ OUTPUT
235
+ end
236
+
237
+
238
+ it "strips type from xrefs" do
239
+ expect(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true))).to be_equivalent_to <<~"OUTPUT"
240
+ #{ASCIIDOC_BLANK_HDR}
241
+ <<iso216>>
242
+
243
+ [bibliography]
244
+ == Clause
245
+ * [[[iso216,ISO 216]]], _Reference_
246
+ INPUT
247
+ #{BLANK_HDR}
248
+ <foreword obligation="informative">
249
+ <title>Foreword</title>
250
+ <p id="_">
251
+ <eref type="inline" bibitemid="iso216" citeas=""/>
252
+ </p>
253
+ </foreword><sections>
254
+ <clause id="_" inline-header="false" obligation="normative">
255
+ <title>Clause</title>
256
+ <ul id="_">
257
+ <li>
258
+ <ref id="iso216">[ISO 216]</ref><p id="_">, <em>Reference</em></p>
259
+ </li>
260
+ </ul>
261
+ </clause></sections>
262
+ </iso-standard>
263
+ OUTPUT
264
+ end
265
+
266
+ it "processes localities in term sources" do
267
+ expect(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true))).to be_equivalent_to <<~"OUTPUT"
268
+ #{ASCIIDOC_BLANK_HDR}
269
+ == Terms and Definitions
270
+
271
+ === Term1
272
+
273
+ [.source]
274
+ <<ISO2191,section 1>>
275
+ INPUT
276
+ #{BLANK_HDR}
277
+ <sections>
278
+ <terms id="_" obligation="normative">
279
+ <title>Terms and Definitions</title>
280
+ <term id="_">
281
+ <preferred>Term1</preferred>
282
+ <termsource status="identical">
283
+ <origin bibitemid="ISO2191" type="inline" citeas=""><locality type="section"><referenceFrom>1</referenceFrom></locality></origin>
284
+ </termsource>
285
+ </term>
286
+ </terms>
287
+ </sections>
288
+ </iso-standard>
289
+ OUTPUT
290
+ end
291
+
292
+ it "removes extraneous material from Normative References" do
293
+ expect(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true))).to be_equivalent_to <<~"OUTPUT"
294
+ #{ASCIIDOC_BLANK_HDR}
295
+ [bibliography]
296
+ == Normative References
297
+
298
+ This is extraneous information
299
+
300
+ * [[[iso216,ISO 216]]], _Reference_
301
+ INPUT
302
+ #{BLANK_HDR}
303
+ <sections>
304
+
305
+ </sections><references id="_" obligation="informative"><title>Normative References</title>
306
+ <bibitem id="iso216" type="standard">
307
+ <title format="text/plain">Reference</title>
308
+ <docidentifier>ISO 216</docidentifier>
309
+ <contributor>
310
+ <role type="publisher"/>
311
+ <organization>
312
+ <name>ISO</name>
313
+ </organization>
314
+ </contributor>
315
+ </bibitem></references>
316
+ </iso-standard>
317
+ OUTPUT
318
+ end
319
+
320
+ it "inserts IDs into paragraphs" do
321
+ expect(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true))).to be_equivalent_to <<~"OUTPUT"
322
+ #{ASCIIDOC_BLANK_HDR}
323
+ Paragraph
324
+ INPUT
325
+ #{BLANK_HDR}
326
+ <sections>
327
+ <p id="_">Paragraph</p>
328
+ </sections>
329
+ </iso-standard>
330
+ OUTPUT
331
+ end
332
+
333
+ it "inserts IDs into notes" do
334
+ expect(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true))).to be_equivalent_to <<~"OUTPUT"
335
+ #{ASCIIDOC_BLANK_HDR}
336
+ [example]
337
+ ====
338
+ NOTE: This note has no ID
339
+ ====
340
+ INPUT
341
+ #{BLANK_HDR}
342
+ <sections>
343
+ <example id="_">
344
+ <note id="_">
345
+ <p id="_">This note has no ID</p>
346
+ </note>
347
+ </example>
348
+ </sections>
349
+ </iso-standard>
350
+ OUTPUT
351
+ end
352
+
353
+ it "moves table key inside table" do
354
+ expect(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true))).to be_equivalent_to <<~"OUTPUT"
355
+ #{ASCIIDOC_BLANK_HDR}
356
+ |===
357
+ |a |b |c
358
+ |===
359
+
360
+ Key
361
+
362
+ a:: b
363
+ INPUT
364
+ #{BLANK_HDR}
365
+ <sections><table id="_">
366
+ <tbody>
367
+ <tr>
368
+ <td align="left">a</td>
369
+ <td align="left">b</td>
370
+ <td align="left">c</td>
371
+ </tr>
372
+ </tbody>
373
+ <dl id="_">
374
+ <dt>a</dt>
375
+ <dd>
376
+ <p id="_">b</p>
377
+ </dd>
378
+ </dl></table>
379
+
380
+ </sections>
381
+ </iso-standard>
382
+ OUTPUT
383
+ end
384
+
385
+ it "processes headerrows attribute for table without header rows" do
386
+ expect(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true))).to be_equivalent_to <<~"OUTPUT"
387
+ #{ASCIIDOC_BLANK_HDR}
388
+ [headerrows=3]
389
+ |===
390
+ |a |b |c
391
+ |a |b |c
392
+ |a |b |c
393
+ |a |b |c
394
+ |===
395
+ INPUT
396
+ #{BLANK_HDR}
397
+ <sections>
398
+ <table id="_"><thead><tr>
399
+ <td align="left">a</td>
400
+ <td align="left">b</td>
401
+ <td align="left">c</td>
402
+ </tr><tr>
403
+ <td align="left">a</td>
404
+ <td align="left">b</td>
405
+ <td align="left">c</td>
406
+ </tr><tr>
407
+ <td align="left">a</td>
408
+ <td align="left">b</td>
409
+ <td align="left">c</td>
410
+ </tr></thead>
411
+ <tbody>
412
+ <tr>
413
+ <td align="left">a</td>
414
+ <td align="left">b</td>
415
+ <td align="left">c</td>
416
+ </tr>
417
+ </tbody>
418
+ </table>
419
+ </sections>
420
+ </iso-standard>
421
+ OUTPUT
422
+ end
423
+
424
+ it "processes headerrows attribute for table with header rows" do
425
+ expect(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true))).to be_equivalent_to <<~"OUTPUT"
426
+ #{ASCIIDOC_BLANK_HDR}
427
+ [headerrows=3]
428
+ |===
429
+ |a |b |c
430
+
431
+ |a |b |c
432
+ |a |b |c
433
+ |a |b |c
434
+ |===
435
+ INPUT
436
+ #{BLANK_HDR}
437
+ <sections>
438
+ <table id="_">
439
+ <thead>
440
+ <tr>
441
+ <th align="left">a</th>
442
+ <th align="left">b</th>
443
+ <th align="left">c</th>
444
+ </tr>
445
+ <tr>
446
+ <td align="left">a</td>
447
+ <td align="left">b</td>
448
+ <td align="left">c</td>
449
+ </tr><tr>
450
+ <td align="left">a</td>
451
+ <td align="left">b</td>
452
+ <td align="left">c</td>
453
+ </tr></thead>
454
+ <tbody>
455
+
456
+
457
+ <tr>
458
+ <td align="left">a</td>
459
+ <td align="left">b</td>
460
+ <td align="left">c</td>
461
+ </tr>
462
+ </tbody>
463
+ </table>
464
+ </sections>
465
+ </iso-standard>
466
+ OUTPUT
467
+ end
468
+
469
+ it "moves table notes inside table" do
470
+ expect(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true))).to be_equivalent_to <<~"OUTPUT"
471
+ #{ASCIIDOC_BLANK_HDR}
472
+ |===
473
+ |a |b |c
474
+ |===
475
+
476
+ NOTE: Note 1
477
+
478
+ NOTE: Note 2
479
+ INPUT
480
+ #{BLANK_HDR}
481
+ <sections><table id="_">
482
+ <tbody>
483
+ <tr>
484
+ <td align="left">a</td>
485
+ <td align="left">b</td>
486
+ <td align="left">c</td>
487
+ </tr>
488
+ </tbody>
489
+ <note id="_">
490
+ <p id="_">Note 1</p>
491
+ </note><note id="_">
492
+ <p id="_">Note 2</p>
493
+ </note></table>
494
+
495
+ </sections>
496
+ OUTPUT
497
+ end
498
+
499
+ it "moves formula key inside formula" do
500
+ expect(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true))).to be_equivalent_to <<~"OUTPUT"
501
+ #{ASCIIDOC_BLANK_HDR}
502
+ [stem]
503
+ ++++
504
+ Formula
505
+ ++++
506
+
507
+ where
508
+
509
+ a:: b
510
+ INPUT
511
+ #{BLANK_HDR}
512
+ <sections><formula id="_">
513
+ <stem type="AsciiMath">Formula</stem>
514
+ <dl id="_">
515
+ <dt>a</dt>
516
+ <dd>
517
+ <p id="_">b</p>
518
+ </dd>
519
+ </dl></formula>
520
+
521
+ </sections>
522
+ </iso-standard>
523
+ OUTPUT
524
+ end
525
+
526
+ it "moves footnotes inside figures" do
527
+ expect(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true))).to be_equivalent_to <<~"OUTPUT"
528
+ #{ASCIIDOC_BLANK_HDR}
529
+ image::spec/examples/rice_images/rice_image1.png[]
530
+
531
+ footnote:[This is a footnote to a figure]
532
+
533
+ footnote:[This is another footnote to a figure]
534
+ INPUT
535
+ #{BLANK_HDR}
536
+ <sections><figure id="_">
537
+ <image src="spec/examples/rice_images/rice_image1.png" id="_" imagetype="PNG"/>
538
+ <fn reference="a">
539
+ <p id="_">This is a footnote to a figure</p>
540
+ </fn><fn reference="b">
541
+ <p id="_">This is another footnote to a figure</p>
542
+ </fn></figure>
543
+
544
+ </sections>
545
+
546
+ </iso-standard>
547
+ OUTPUT
548
+ end
549
+
550
+ it "moves figure key inside figure" do
551
+ expect(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true))).to be_equivalent_to <<~"OUTPUT"
552
+ #{ASCIIDOC_BLANK_HDR}
553
+ image::spec/examples/rice_images/rice_image1.png[]
554
+
555
+ Key
556
+
557
+ a:: b
558
+ INPUT
559
+ #{BLANK_HDR}
560
+ <sections><figure id="_">
561
+ <image src="spec/examples/rice_images/rice_image1.png" id="_" imagetype="PNG"/>
562
+ <dl id="_">
563
+ <dt>a</dt>
564
+ <dd>
565
+ <p id="_">b</p>
566
+ </dd>
567
+ </dl></figure>
568
+
569
+ </sections>
570
+
571
+ </iso-standard>
572
+ OUTPUT
573
+ end
574
+
575
+ it "processes subfigures" do
576
+ expect(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true))).to be_equivalent_to <<~"OUTPUT"
577
+ #{ASCIIDOC_BLANK_HDR}
578
+ [[figureC-2]]
579
+ .Stages of gelatinization
580
+ ====
581
+ .Initial stages: No grains are fully gelatinized (ungelatinized starch granules are visible inside the kernels)
582
+ image::spec/examples/rice_images/rice_image3_1.png[]
583
+
584
+ .Intermediate stages: Some fully gelatinized kernels are visible
585
+ image::spec/examples/rice_images/rice_image3_2.png[]
586
+
587
+ .Final stages: All kernels are fully gelatinized
588
+ image::spec/examples/rice_images/rice_image3_3.png[]
589
+ ====
590
+ INPUT
591
+ #{BLANK_HDR}
592
+ <sections>
593
+ <figure id="figureC-2"><figure id="_">
594
+ <name>Initial stages: No grains are fully gelatinized (ungelatinized starch granules are visible inside the kernels)</name>
595
+ <image src="spec/examples/rice_images/rice_image3_1.png" id="_" imagetype="PNG"/>
596
+ </figure>
597
+ <figure id="_">
598
+ <name>Intermediate stages: Some fully gelatinized kernels are visible</name>
599
+ <image src="spec/examples/rice_images/rice_image3_2.png" id="_" imagetype="PNG"/>
600
+ </figure>
601
+ <figure id="_">
602
+ <name>Final stages: All kernels are fully gelatinized</name>
603
+ <image src="spec/examples/rice_images/rice_image3_3.png" id="_" imagetype="PNG"/>
604
+ </figure></figure>
605
+ </sections>
606
+ </iso-standard>
607
+ OUTPUT
608
+ end
609
+
610
+ it "numbers bibliographic notes and footnotes sequentially" do
611
+ expect(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true))).to be_equivalent_to <<~"OUTPUT"
612
+ #{ASCIIDOC_BLANK_HDR}
613
+ footnote:[Footnote]
614
+
615
+ [bibliography]
616
+ == Normative References
617
+
618
+ * [[[iso123,ISO 123:--]]] footnote:[The standard is in press] _Standard_
619
+
620
+ == Clause
621
+ footnote:[Footnote2]
622
+ INPUT
623
+ #{BLANK_HDR}
624
+ <foreword obligation="informative">
625
+ <title>Foreword</title>
626
+ <p id="_"><fn reference="1">
627
+ <p id="_">Footnote</p>
628
+ </fn>
629
+ </p>
630
+ </foreword><sections>
631
+
632
+ <clause id="_" inline-header="false" obligation="normative">
633
+ <title>Clause</title>
634
+ <p id="_"><fn reference="3">
635
+ <p id="_">Footnote2</p>
636
+ </fn>
637
+ </p>
638
+ </clause></sections><references id="_" obligation="informative">
639
+ <title>Normative References</title>
640
+ <bibitem id="iso123" type="standard">
641
+ <title format="text/plain">Standard</title>
642
+ <docidentifier>ISO 123</docidentifier>
643
+ <date type="published">--</date>
644
+ <contributor>
645
+ <role type="publisher"/>
646
+ <organization>
647
+ <name>ISO</name>
648
+ </organization>
649
+ </contributor>
650
+ <note format="text/plain" reference="2">ISO DATE: The standard is in press</note>
651
+ </bibitem>
652
+ </references>
653
+ </iso-standard>
654
+ OUTPUT
655
+ end
656
+
657
+ it "defaults section obligations" do
658
+ expect(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true))).to be_equivalent_to <<~"OUTPUT"
659
+ #{ASCIIDOC_BLANK_HDR}
660
+
661
+ == Clause
662
+ Text
663
+
664
+ [appendix]
665
+ == Clause
666
+
667
+ Text
668
+ INPUT
669
+ #{BLANK_HDR}
670
+ <sections><clause id="_" inline-header="false" obligation="normative">
671
+ <title>Clause</title>
672
+ <p id="_">Text</p>
673
+ </clause>
674
+ </sections><annex id="_" inline-header="false" obligation="normative">
675
+ <title>Clause</title>
676
+ <p id="_">Text</p>
677
+ </annex>
678
+ </iso-standard>
679
+ OUTPUT
680
+ end
681
+
682
+
683
+
684
+
685
+
686
+
687
+ end