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,749 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe "warns when missing a title" do
4
+ specify { expect { Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true) }.to output(/Table should have title/).to_stderr }
5
+ #{VALIDATING_BLANK_HDR}
6
+ |===
7
+ |A |B |C
8
+
9
+ h|1 |2 |3
10
+ |===
11
+ INPUT
12
+ end
13
+
14
+
15
+ RSpec.describe "warn that introduction may contain requirement" do
16
+ specify { expect { Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true) }.to output(/Introduction may contain requirement/).to_stderr }
17
+ #{VALIDATING_BLANK_HDR}
18
+ == Introduction
19
+
20
+ The widget is required not to be larger than 15 cm.
21
+ INPUT
22
+ end
23
+
24
+ RSpec.describe "warn that foreword may contain recommendation" do
25
+ specify { expect { Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true) }.to output(/Foreword may contain recommendation/).to_stderr }
26
+ #{VALIDATING_BLANK_HDR}
27
+
28
+ It is not recommended that widgets should be larger than 15 cm.
29
+
30
+ == Clause
31
+ INPUT
32
+ end
33
+
34
+ RSpec.describe "warn that foreword may contain permission" do
35
+ specify { expect { Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true) }.to output(/Foreword may contain permission/).to_stderr }
36
+ #{VALIDATING_BLANK_HDR}
37
+
38
+ No widget is required to be larger than 15 cm.
39
+
40
+ == Clause
41
+ INPUT
42
+ end
43
+
44
+ RSpec.describe "warn that scope may contain recommendation" do
45
+ specify { expect { Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true) }.to output(/Scope may contain recommendation/).to_stderr }
46
+ #{VALIDATING_BLANK_HDR}
47
+
48
+ == Scope
49
+ It is not recommended that widgets should be larger than 15 cm.
50
+ INPUT
51
+ end
52
+
53
+ RSpec.describe "warn that term example may contain recommendation" do
54
+ specify { expect { Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true) }.to output(/Term Example may contain recommendation/).to_stderr }
55
+ #{VALIDATING_BLANK_HDR}
56
+
57
+ == Terms and Definitions
58
+
59
+ === Term
60
+
61
+ [example]
62
+ It is not recommended that widgets should be larger than 15 cm.
63
+ INPUT
64
+ end
65
+
66
+ RSpec.describe "warn that note may contain recommendation" do
67
+ specify { expect { Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true) }.to output(/Note may contain recommendation/).to_stderr }
68
+ #{VALIDATING_BLANK_HDR}
69
+
70
+ NOTE: It is not recommended that widgets should be larger than 15 cm.
71
+ INPUT
72
+ end
73
+
74
+ RSpec.describe "warn that footnote may contain recommendation" do
75
+ specify { expect { Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true) }.to output(/Footnote may contain recommendation/).to_stderr }
76
+ #{VALIDATING_BLANK_HDR}
77
+
78
+ footnote:[It is not recommended that widgets should be larger than 15 cm.]
79
+ INPUT
80
+ end
81
+
82
+ RSpec.describe "warn that term source is not in expected format" do
83
+ specify { expect { Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true) }.to output(/term reference not in expected format/).to_stderr }
84
+ #{VALIDATING_BLANK_HDR}
85
+
86
+ [.source]
87
+ I am a generic paragraph
88
+ INPUT
89
+ end
90
+
91
+ RSpec.describe "warn that figure does not have title" do
92
+ specify { expect { Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true) }.to output(/Figure should have title/).to_stderr }
93
+ #{VALIDATING_BLANK_HDR}
94
+
95
+ image::spec/examples/rice_images/rice_image1.png[]
96
+ INPUT
97
+ end
98
+
99
+ RSpec.describe "warn that callouts do not match annotations" do
100
+ specify { expect { Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true) }.to output(/mismatch of callouts and annotations/).to_stderr }
101
+ #{VALIDATING_BLANK_HDR}
102
+ [source,ruby]
103
+ --
104
+ puts "Hello, world." <1>
105
+ %w{a b c}.each do |x|
106
+ puts x
107
+ end
108
+ --
109
+ <1> This is one callout
110
+ <2> This is another callout
111
+ INPUT
112
+ end
113
+
114
+ RSpec.describe "term source is not a real reference" do
115
+ specify { expect { Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true) }.to output(/iso123 is not a real reference/).to_stderr }
116
+ #{VALIDATING_BLANK_HDR}
117
+
118
+ [.source]
119
+ <<iso123>>
120
+ INPUT
121
+ end
122
+
123
+ RSpec.describe "Non-reference in bibliography" do
124
+ specify { expect { Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true) }.to output(/no anchor on reference/).to_stderr }
125
+ #{VALIDATING_BLANK_HDR}
126
+
127
+ == Normative References
128
+ * I am not a reference
129
+ INPUT
130
+ end
131
+
132
+ RSpec.describe "Non-ISO reference in Normative References" do
133
+ specify { expect { Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true) }.to output(%r{non-ISO/IEC reference not expected as normative}).to_stderr }
134
+ #{VALIDATING_BLANK_HDR}
135
+
136
+ == Normative References
137
+ * [[[XYZ,IESO 121]]] _Standard_
138
+ INPUT
139
+ end
140
+
141
+ RSpec.describe "Scope contains subsections" do
142
+ specify { expect { Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true) }.to output(%r{Scope contains subsections: should be succint}).to_stderr }
143
+ #{VALIDATING_BLANK_HDR}
144
+
145
+ == Scope
146
+
147
+ === Scope subsection
148
+ INPUT
149
+ end
150
+
151
+
152
+ RSpec.describe "Table should have title" do
153
+ specify { expect { Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true) }.to output(%r{Table should have title}).to_stderr }
154
+ #{VALIDATING_BLANK_HDR}
155
+
156
+ |===
157
+ |a |b |c
158
+ |===
159
+ INPUT
160
+ end
161
+
162
+ RSpec.describe "Style warning if number not broken up in threes" do
163
+ specify { expect { Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true) }.to output(%r{number not broken up in threes}).to_stderr }
164
+ #{VALIDATING_BLANK_HDR}
165
+
166
+ == Clause
167
+ 12121
168
+ INPUT
169
+ end
170
+
171
+ RSpec.describe "No style warning if number not broken up in threes is ISO reference" do
172
+ specify { expect { Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true) }.to_not output(%r{number not broken up in threes}).to_stderr }
173
+ #{VALIDATING_BLANK_HDR}
174
+
175
+ == Clause
176
+ ISO 12121
177
+ INPUT
178
+ end
179
+
180
+ RSpec.describe "Style warning if decimal point" do
181
+ specify { expect { Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true) }.to output(%r{possible decimal point}).to_stderr }
182
+ #{VALIDATING_BLANK_HDR}
183
+
184
+ == Clause
185
+ 8.1
186
+ INPUT
187
+ end
188
+
189
+ RSpec.describe "Style warning if billion used" do
190
+ specify { expect { Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true) }.to output(%r{ambiguous number}).to_stderr }
191
+ #{VALIDATING_BLANK_HDR}
192
+
193
+ == Clause
194
+ "Billions" are a term of art.
195
+ INPUT
196
+ end
197
+
198
+ RSpec.describe "Style warning if no space before percent sign" do
199
+ specify { expect { Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true) }.to output(%r{no space before percent sign}).to_stderr }
200
+ #{VALIDATING_BLANK_HDR}
201
+
202
+ == Clause
203
+ 95%
204
+ INPUT
205
+ end
206
+
207
+ RSpec.describe "Style warning if unbracketed tolerance before percent sign" do
208
+ specify { expect { Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true) }.to output(%r{unbracketed tolerance before percent sign}).to_stderr }
209
+ #{VALIDATING_BLANK_HDR}
210
+
211
+ == Clause
212
+ 95 ± 5 %
213
+ INPUT
214
+ end
215
+
216
+ RSpec.describe "Style warning if dots in abbreviation" do
217
+ specify { expect { Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true) }.to output(%r{no dots in abbreviation}).to_stderr }
218
+ #{VALIDATING_BLANK_HDR}
219
+
220
+ == Clause
221
+ r.p.m.
222
+ INPUT
223
+ end
224
+
225
+ RSpec.describe "No Style warning if dots in abbreviation are e.g." do
226
+ specify { expect { Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true) }.to_not output(%r{no dots in abbreviation}).to_stderr }
227
+ #{VALIDATING_BLANK_HDR}
228
+
229
+ == Clause
230
+ e.g. 5
231
+ INPUT
232
+ end
233
+
234
+ RSpec.describe "Style warning if ppm used" do
235
+ specify { expect { Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true) }.to output(%r{language-specific abbreviation}).to_stderr }
236
+ #{VALIDATING_BLANK_HDR}
237
+
238
+ == Clause
239
+ 5 ppm
240
+ INPUT
241
+ end
242
+
243
+ RSpec.describe "Style warning if space between number and degree" do
244
+ specify { expect { Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true) }.to output(%r{space between number and degrees/minutes/seconds}).to_stderr }
245
+ #{VALIDATING_BLANK_HDR}
246
+
247
+ == Clause
248
+ 5 °
249
+ INPUT
250
+ end
251
+
252
+ RSpec.describe "Style warning if no space between number and SI unit" do
253
+ specify { expect { Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true) }.to output(%r{no space between number and SI unit}).to_stderr }
254
+ #{VALIDATING_BLANK_HDR}
255
+
256
+ == Clause
257
+ A measurement of 5Bq was taken.
258
+ INPUT
259
+ end
260
+
261
+ RSpec.describe "Style warning if mins used" do
262
+ specify { expect { Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true) }.to output(%r{non-standard unit}).to_stderr }
263
+ #{VALIDATING_BLANK_HDR}
264
+
265
+ == Clause
266
+ 5 mins
267
+ INPUT
268
+ end
269
+
270
+ # can't test: our asciidoc template won't allow this to be generated
271
+ # RSpec.describe "Style warning if foreword contains subsections" do
272
+ # specify { expect { Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true) }.to output(%r{non-standard unit}).to_stderr }
273
+ # #{VALIDATING_BLANK_HDR}
274
+ #
275
+ # INPUT
276
+ # end
277
+
278
+ # can't test: we strip out any such content from Normative references preemptively
279
+ #RSpec.describe "Style warning if Normative References contains subsections" do
280
+ #specify { expect { Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true) }.to output(%r{normative references contains subsections}).to_stderr }
281
+ ##{VALIDATING_BLANK_HDR}
282
+ #
283
+ #[bibliography]
284
+ #== Normative References
285
+ #
286
+ #=== Subsection
287
+ #INPUT
288
+ #end
289
+
290
+ RSpec.describe "Style warning if two Symbols and Abbreviated Terms sections" do
291
+ specify { expect { Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true) }.to output(%r{only one Symbols and Abbreviated Terms section in the standard}).to_stderr }
292
+ #{VALIDATING_BLANK_HDR}
293
+
294
+ == Terms and Abbreviations
295
+
296
+ === Symbols and Abbreviated Terms
297
+
298
+ == Symbols and Abbreviated Terms
299
+ INPUT
300
+ end
301
+
302
+ RSpec.describe "Style warning if Symbols and Abbreviated Terms contains extraneous matter" do
303
+ specify { expect { Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true) }.to output(%r{Symbols and Abbreviated Terms can only contain a definition list}).to_stderr }
304
+ #{VALIDATING_BLANK_HDR}
305
+
306
+ == Symbols and Abbreviated Terms
307
+
308
+ Paragraph
309
+ INPUT
310
+ end
311
+
312
+ RSpec.describe "Warning if do not start with scope or introduction" do
313
+ specify { expect { Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true) }.to output(%r{Prefatory material must be followed by \(clause\) Scope}).to_stderr }
314
+ #{VALIDATING_BLANK_HDR}
315
+
316
+ == Symbols and Abbreviated Terms
317
+
318
+ Paragraph
319
+ INPUT
320
+ end
321
+
322
+ RSpec.describe "Warning if introduction not followed by scope" do
323
+ specify { expect { Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true) }.to output(%r{Prefatory material must be followed by \(clause\) Scope}).to_stderr }
324
+ #{VALIDATING_BLANK_HDR}
325
+
326
+ .Foreword
327
+ Foreword
328
+
329
+ == Introduction
330
+
331
+ == Symbols and Abbreviated Terms
332
+
333
+ Paragraph
334
+ INPUT
335
+ end
336
+
337
+ RSpec.describe "Warning if normative references not followed by terms and definitions" do
338
+ specify { expect { Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true) }.to output(%r{Normative References must be followed by Terms and Definitions}).to_stderr }
339
+ #{VALIDATING_BLANK_HDR}
340
+
341
+ .Foreword
342
+ Foreword
343
+
344
+ == Scope
345
+
346
+ [bibliography]
347
+ == Normative References
348
+
349
+ == Symbols and Abbreviated Terms
350
+
351
+ Paragraph
352
+ INPUT
353
+ end
354
+
355
+ RSpec.describe "Warning if there are no clauses in the document" do
356
+ specify { expect { Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true) }.to output(%r{Document must contain clause after Terms and Definitions}).to_stderr }
357
+ #{VALIDATING_BLANK_HDR}
358
+
359
+ .Foreword
360
+ Foreword
361
+
362
+ == Scope
363
+
364
+ [bibliography]
365
+ == Normative References
366
+
367
+ == Terms and Definitions
368
+
369
+ == Symbols and Abbreviated Terms
370
+
371
+ INPUT
372
+ end
373
+
374
+ RSpec.describe "Warning if scope occurs after Terms and Definitions" do
375
+ specify { expect { Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true) }.to output(%r{Scope must occur before Terms and Definitions}).to_stderr }
376
+ #{VALIDATING_BLANK_HDR}
377
+
378
+ .Foreword
379
+ Foreword
380
+
381
+ == Scope
382
+
383
+ [bibliography]
384
+ == Normative References
385
+
386
+ == Terms and Definitions
387
+
388
+ == Scope
389
+
390
+ INPUT
391
+ end
392
+
393
+ RSpec.describe "Warning if scope occurs after Terms and Definitions" do
394
+ specify { expect { Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true) }.to output(%r{Scope must occur before Terms and Definitions}).to_stderr }
395
+ #{VALIDATING_BLANK_HDR}
396
+
397
+ .Foreword
398
+ Foreword
399
+
400
+ == Scope
401
+
402
+ [bibliography]
403
+ == Normative References
404
+
405
+ == Terms and Definitions
406
+
407
+ == Clause
408
+
409
+ == Scope
410
+
411
+ INPUT
412
+ end
413
+
414
+ RSpec.describe "Warning if Symbols and Abbreviated Terms does not occur immediately after Terms and Definitions" do
415
+ specify { expect { Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true) }.to output(%r{Only annexes and references can follow clauses}).to_stderr }
416
+ #{VALIDATING_BLANK_HDR}
417
+
418
+ .Foreword
419
+ Foreword
420
+
421
+ == Scope
422
+
423
+ [bibliography]
424
+ == Normative References
425
+
426
+ == Terms and Definitions
427
+
428
+ == Clause
429
+
430
+ == Symbols and Abbreviated Terms
431
+
432
+ INPUT
433
+ end
434
+
435
+ RSpec.describe "Warning if no normative references" do
436
+ specify { expect { Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true) }.to output(%r{Document must include \(references\) Normative References}).to_stderr }
437
+ #{VALIDATING_BLANK_HDR}
438
+
439
+ .Foreword
440
+ Foreword
441
+
442
+ == Scope
443
+
444
+ == Terms and Definitions
445
+
446
+ == Clause
447
+
448
+ [appendix]
449
+ == Appendix A
450
+
451
+ [appendix]
452
+ == Appendix B
453
+
454
+ == Appendix C
455
+
456
+ INPUT
457
+ end
458
+
459
+ RSpec.describe "Warning if final section is not Bibliography" do
460
+ specify { expect { Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true) }.to output(%r{Final section must be \(references\) Bibliography}).to_stderr }
461
+ #{VALIDATING_BLANK_HDR}
462
+
463
+ .Foreword
464
+ Foreword
465
+
466
+ == Scope
467
+
468
+ [bibliography]
469
+ == Normative References
470
+
471
+ == Terms and Definitions
472
+
473
+ == Clause
474
+
475
+ [appendix]
476
+ == Appendix A
477
+
478
+ [appendix]
479
+ == Appendix B
480
+
481
+ [bibliography]
482
+ == Appendix C
483
+
484
+ INPUT
485
+ end
486
+
487
+ RSpec.describe "Warning if final section is not Bibliography" do
488
+ specify { expect { Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true) }.to output(%r{There are sections after the final Bibliography}).to_stderr }
489
+ #{VALIDATING_BLANK_HDR}
490
+
491
+ .Foreword
492
+ Foreword
493
+
494
+ == Scope
495
+
496
+ [bibliography]
497
+ == Normative References
498
+
499
+ == Terms and Definitions
500
+
501
+ == Clause
502
+
503
+ [appendix]
504
+ == Appendix A
505
+
506
+ [appendix]
507
+ == Appendix B
508
+
509
+ [bibliography]
510
+ == Bibliography
511
+
512
+ [bibliography]
513
+ == Appendix C
514
+
515
+ INPUT
516
+ end
517
+
518
+ RSpec.describe "Warning if English title intro and no French title intro" do
519
+ specify { expect { Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true) }.to output(%r{No French Title Intro!}).to_stderr }
520
+ = Document title
521
+ Author
522
+ :docfile: test.adoc
523
+ :nodoc:
524
+ :title-intro-en: Title
525
+
526
+ INPUT
527
+ end
528
+
529
+ RSpec.describe "Warning if French title intro and no English title intro" do
530
+ specify { expect { Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true) }.to output(%r{No English Title Intro!}).to_stderr }
531
+ = Document title
532
+ Author
533
+ :docfile: test.adoc
534
+ :nodoc:
535
+ :title-intro-fr: Title
536
+
537
+ INPUT
538
+ end
539
+
540
+
541
+ RSpec.describe "Warning if English title and no French intro" do
542
+ specify { expect { Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true) }.to output(%r{No French Title!}).to_stderr }
543
+ = Document title
544
+ Author
545
+ :docfile: test.adoc
546
+ :nodoc:
547
+ :title-main-en: Title
548
+
549
+ INPUT
550
+ end
551
+
552
+ RSpec.describe "Warning if French title and no English title" do
553
+ specify { expect { Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true) }.to output(%r{No English Title!}).to_stderr }
554
+ = Document title
555
+ Author
556
+ :docfile: test.adoc
557
+ :nodoc:
558
+ :title-main-fr: Title
559
+
560
+ INPUT
561
+ end
562
+
563
+ RSpec.describe "Warning if English title part and no French title part" do
564
+ specify { expect { Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true) }.to output(%r{No French Title Part!}).to_stderr }
565
+ = Document title
566
+ Author
567
+ :docfile: test.adoc
568
+ :nodoc:
569
+ :title-part-en: Title
570
+
571
+ INPUT
572
+ end
573
+
574
+ RSpec.describe "Warning if French title part and no English title part" do
575
+ specify { expect { Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true) }.to output(%r{No English Title Part!}).to_stderr }
576
+ = Document title
577
+ Author
578
+ :docfile: test.adoc
579
+ :nodoc:
580
+ :title-part-fr: Title
581
+
582
+ INPUT
583
+ end
584
+
585
+ RSpec.describe "Warning if non-IEC document with subpart" do
586
+ specify { expect { Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true) }.to output(%r{Subpart defined on non-IEC document!}).to_stderr }
587
+ = Document title
588
+ Author
589
+ :docfile: test.adoc
590
+ :nodoc:
591
+ :partnumber: 1-1
592
+ :publisher: ISO
593
+
594
+ INPUT
595
+ end
596
+
597
+ RSpec.describe "No warning if joint IEC/non-IEC document with subpart" do
598
+ specify { expect { Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true) }.not_to output(%r{Subpart defined on non-IEC document!}).to_stderr }
599
+ = Document title
600
+ Author
601
+ :docfile: test.adoc
602
+ :nodoc:
603
+ :partnumber: 1-1
604
+ :publisher: ISO,IEC
605
+
606
+ INPUT
607
+ end
608
+
609
+ RSpec.describe "Warning if main title contains document type" do
610
+ specify { expect { Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true) }.to output(%r{Main Title may name document type}).to_stderr }
611
+ = Document title
612
+ Author
613
+ :docfile: test.adoc
614
+ :nodoc:
615
+ :title-main-en: A Technical Specification on Widgets
616
+
617
+ INPUT
618
+ end
619
+
620
+ RSpec.describe "Warning if intro title contains document type" do
621
+ specify { expect { Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true) }.to output(%r{Title Intro may name document type}).to_stderr }
622
+ = Document title
623
+ Author
624
+ :docfile: test.adoc
625
+ :nodoc:
626
+ :title-intro-en: A Technical Specification on Widgets
627
+
628
+ INPUT
629
+ end
630
+
631
+ RSpec.describe "Each first-level subclause must have a title" do
632
+ specify { expect { Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true) }.to output(%r{each first-level subclause must have a title}).to_stderr }
633
+ #{VALIDATING_BLANK_HDR}
634
+ == Clause
635
+
636
+ === {blank}
637
+ INPUT
638
+ end
639
+
640
+ RSpec.describe "All subclauses must have a title, or none" do
641
+ specify { expect { Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true) }.to output(%r{all subclauses must have a title, or none}).to_stderr }
642
+ #{VALIDATING_BLANK_HDR}
643
+ == Clause
644
+
645
+ === Subclause
646
+
647
+ ==== {blank}
648
+
649
+ ==== Subsubclause
650
+ INPUT
651
+ end
652
+
653
+ RSpec.describe "Warning if subsection is only child of its parent, or none" do
654
+ specify { expect { Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true) }.to output(%r{subsection is only child}).to_stderr }
655
+ #{VALIDATING_BLANK_HDR}
656
+ == Clause
657
+
658
+ === Subclause
659
+
660
+ INPUT
661
+ end
662
+
663
+ RSpec.describe "Warning if invalid technical committee type" do
664
+ specify { expect { Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true) }.to output(%r{invalid technical committee type}).to_stderr }
665
+ = Document title
666
+ Author
667
+ :docfile: test.adoc
668
+ :nodoc:
669
+ :technical-committee-type: X
670
+
671
+ INPUT
672
+ end
673
+
674
+ RSpec.describe "Warning if invalid subcommittee type" do
675
+ specify { expect { Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true) }.to output(%r{invalid subcommittee type}).to_stderr }
676
+ = Document title
677
+ Author
678
+ :docfile: test.adoc
679
+ :nodoc:
680
+ :subcommittee-type: X
681
+
682
+ INPUT
683
+ end
684
+
685
+ RSpec.describe "Warning if invalid subcommittee type" do
686
+ specify { expect { Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true) }.to output(%r{invalid subcommittee type}).to_stderr }
687
+ = Document title
688
+ Author
689
+ :docfile: test.adoc
690
+ :nodoc:
691
+ :subcommittee-type: X
692
+
693
+ INPUT
694
+ end
695
+
696
+ RSpec.describe "Warning if 'see' crossreference points to normative section" do
697
+ specify { expect { Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true) }.to output(%r{'see terms' is pointing to a normative section}).to_stderr }
698
+ #{VALIDATING_BLANK_HDR}
699
+ [[terms]]
700
+ == Terms and Definitions
701
+
702
+ == Clause
703
+ See <<terms>>
704
+ INPUT
705
+ end
706
+
707
+ RSpec.describe "Warning if 'see' reference points to normative reference" do
708
+ specify { expect { Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true) }.to output(%r{is pointing to a normative reference}).to_stderr }
709
+ #{VALIDATING_BLANK_HDR}
710
+ [bibliography]
711
+ == Normative References
712
+ * [[[terms,ISO 1]]] _References_
713
+
714
+ == Clause
715
+ See <<terms>>
716
+ INPUT
717
+ end
718
+
719
+ RSpec.describe "Warning if term definition starts with article" do
720
+ specify { expect { Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true) }.to output(%r{term definition starts with article}).to_stderr }
721
+ #{VALIDATING_BLANK_HDR}
722
+ == Terms and Definitions
723
+
724
+ === Term
725
+
726
+ The definition of a term is a part of the specialized vocabulary of a particular field
727
+ INPUT
728
+ end
729
+
730
+ RSpec.describe "Warning if term definition ends with period" do
731
+ specify { expect { Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true) }.to output(%r{term definition ends with period}).to_stderr }
732
+ #{VALIDATING_BLANK_HDR}
733
+ == Terms and Definitions
734
+
735
+ === Term
736
+
737
+ Part of the specialized vocabulary of a particular field.
738
+ INPUT
739
+ end
740
+
741
+ RSpec.describe "validates document against ISO XML schema" do
742
+ specify { expect { Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true) }.to output(%r{value of attribute "align" is invalid; must be equal to}).to_stderr }
743
+ #{VALIDATING_BLANK_HDR}
744
+
745
+ [align=mid-air]
746
+ Para
747
+ INPUT
748
+ end
749
+