review 4.2.0 → 5.0.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 (165) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby-win.yml +11 -5
  3. data/.rubocop.yml +113 -24
  4. data/NEWS.ja.md +94 -0
  5. data/NEWS.md +94 -0
  6. data/bin/review-catalog-converter +1 -1
  7. data/bin/review-check +2 -4
  8. data/bin/review-checkdep +1 -1
  9. data/bin/review-compile +8 -14
  10. data/bin/review-validate +1 -1
  11. data/doc/config.yml.sample +4 -1
  12. data/doc/config.yml.sample-simple +1 -1
  13. data/doc/format.ja.md +83 -4
  14. data/doc/format.md +84 -7
  15. data/doc/makeindex.ja.md +2 -2
  16. data/doc/quickstart.ja.md +3 -3
  17. data/doc/quickstart.md +2 -2
  18. data/lib/epubmaker/content.rb +3 -2
  19. data/lib/epubmaker/epubcommon.rb +33 -25
  20. data/lib/epubmaker/epubv2.rb +5 -6
  21. data/lib/epubmaker/epubv3.rb +20 -18
  22. data/lib/review/book.rb +2 -2
  23. data/lib/review/book/base.rb +61 -25
  24. data/lib/review/book/bib.rb +21 -0
  25. data/lib/review/book/book_unit.rb +155 -0
  26. data/lib/review/book/chapter.rb +30 -26
  27. data/lib/review/book/index.rb +23 -185
  28. data/lib/review/book/index/item.rb +7 -1
  29. data/lib/review/book/part.rb +21 -9
  30. data/lib/review/book/volume.rb +1 -1
  31. data/lib/review/builder.rb +68 -13
  32. data/lib/review/catalog.rb +2 -2
  33. data/lib/review/compiler.rb +159 -73
  34. data/lib/review/configure.rb +22 -1
  35. data/lib/review/converter.rb +1 -1
  36. data/lib/review/epub2html.rb +6 -1
  37. data/lib/review/epubmaker.rb +12 -23
  38. data/lib/review/htmlbuilder.rb +36 -7
  39. data/lib/review/htmlutils.rb +7 -10
  40. data/lib/review/i18n.rb +1 -1
  41. data/lib/review/idgxmlbuilder.rb +51 -6
  42. data/lib/review/idgxmlmaker.rb +9 -14
  43. data/lib/review/index_builder.rb +653 -0
  44. data/lib/review/init.rb +5 -13
  45. data/lib/review/latexbuilder.rb +65 -4
  46. data/lib/review/logger.rb +2 -2
  47. data/lib/review/makerhelper.rb +11 -0
  48. data/lib/review/markdownbuilder.rb +19 -1
  49. data/lib/review/pdfmaker.rb +17 -36
  50. data/lib/review/plaintextbuilder.rb +48 -2
  51. data/lib/review/preprocessor.rb +5 -5
  52. data/lib/review/rstbuilder.rb +25 -6
  53. data/lib/review/sec_counter.rb +13 -0
  54. data/lib/review/textmaker.rb +4 -12
  55. data/lib/review/tocprinter.rb +2 -3
  56. data/lib/review/topbuilder.rb +26 -0
  57. data/lib/review/update.rb +7 -7
  58. data/lib/review/version.rb +1 -1
  59. data/lib/review/volumeprinter.rb +2 -3
  60. data/lib/review/webmaker.rb +9 -20
  61. data/review.gemspec +2 -2
  62. data/samples/sample-book/src/config.yml +1 -1
  63. data/samples/syntax-book/Gemfile +1 -1
  64. data/samples/syntax-book/config.yml +1 -1
  65. data/templates/latex/config.erb +27 -23
  66. data/templates/latex/review-jlreq/README.md +3 -1
  67. data/templates/latex/review-jlreq/review-base.sty +31 -15
  68. data/templates/latex/review-jlreq/review-jlreq.cls +8 -24
  69. data/templates/latex/review-jsbook/README.md +7 -5
  70. data/templates/latex/review-jsbook/review-base.sty +34 -16
  71. data/templates/latex/review-jsbook/review-jsbook.cls +4 -2
  72. data/templates/web/html/layout-html5.html.erb +1 -1
  73. data/test/assets/test_template.tex +3 -3
  74. data/test/assets/test_template_backmatter.tex +3 -3
  75. data/test/book_test_helper.rb +11 -5
  76. data/test/test_book.rb +54 -63
  77. data/test/test_book_chapter.rb +93 -52
  78. data/test/test_builder.rb +24 -15
  79. data/test/test_converter.rb +1 -0
  80. data/test/test_epub3maker.rb +2 -2
  81. data/test/test_epubmaker.rb +8 -0
  82. data/test/test_helper.rb +4 -1
  83. data/test/test_htmlbuilder.rb +627 -56
  84. data/test/test_htmlutils.rb +0 -12
  85. data/test/test_i18n.rb +33 -33
  86. data/test/test_idgxmlbuilder.rb +358 -11
  87. data/test/test_idgxmlmaker_cmd.rb +1 -1
  88. data/test/test_index.rb +62 -52
  89. data/test/test_indexbuilder.rb +52 -0
  90. data/test/test_latexbuilder.rb +547 -10
  91. data/test/test_latexbuilder_v2.rb +43 -5
  92. data/test/test_logger.rb +7 -7
  93. data/test/test_makerhelper.rb +0 -12
  94. data/test/test_markdownbuilder.rb +3 -0
  95. data/test/test_pdfmaker.rb +13 -12
  96. data/test/test_pdfmaker_cmd.rb +1 -1
  97. data/test/test_plaintextbuilder.rb +422 -7
  98. data/test/test_review_ext.rb +2 -1
  99. data/test/test_rstbuilder.rb +25 -1
  100. data/test/test_sec_counter.rb +156 -0
  101. data/test/test_textmaker_cmd.rb +1 -1
  102. data/test/test_topbuilder.rb +187 -10
  103. data/test/test_update.rb +10 -10
  104. data/test/test_webtocprinter.rb +12 -12
  105. data/vendor/gentombow/LICENSE +1 -1
  106. data/vendor/gentombow/Makefile +0 -1
  107. data/vendor/gentombow/bounddvi-en.pdf +0 -0
  108. data/vendor/gentombow/bounddvi-en.tex +1 -0
  109. data/vendor/gentombow/bounddvi.pdf +0 -0
  110. data/vendor/gentombow/bounddvi.sty +30 -7
  111. data/vendor/gentombow/bounddvi.tex +1 -0
  112. data/vendor/gentombow/create_archive.sh +1 -0
  113. data/vendor/gentombow/gentombow-ja.pdf +0 -0
  114. data/vendor/gentombow/gentombow-ja.tex +9 -0
  115. data/vendor/gentombow/gentombow.pdf +0 -0
  116. data/vendor/gentombow/gentombow.sty +32 -10
  117. data/vendor/gentombow/gentombow.tex +8 -0
  118. data/vendor/gentombow/tests/gentombow-01-pdfx.tex +8 -0
  119. data/vendor/gentombow/tests/gentombow-02-pdfx.tex +8 -0
  120. data/vendor/jsclasses/Makefile +3 -2
  121. data/vendor/jsclasses/create_archive.sh +5 -5
  122. data/vendor/jsclasses/jis/Makefile +3 -2
  123. data/vendor/jsclasses/jis/jsarticle.cls +22 -18
  124. data/vendor/jsclasses/jis/jsbook.cls +22 -18
  125. data/vendor/jsclasses/jis/jsclasses.dtx +94 -13
  126. data/vendor/jsclasses/jis/jsclasses.ins +15 -5
  127. data/vendor/jsclasses/jis/jslogo.ins +9 -0
  128. data/vendor/jsclasses/jis/jslogo.sty +1 -13
  129. data/vendor/jsclasses/jis/jspf.cls +22 -18
  130. data/vendor/jsclasses/jis/jsreport.cls +22 -18
  131. data/vendor/jsclasses/jis/jsverb.ins +9 -0
  132. data/vendor/jsclasses/jis/jsverb.sty +1 -13
  133. data/vendor/jsclasses/jis/kiyou.cls +22 -18
  134. data/vendor/jsclasses/jis/minijs.sty +65 -22
  135. data/vendor/jsclasses/jis/okumacro.ins +9 -0
  136. data/vendor/jsclasses/jis/okumacro.sty +1 -13
  137. data/vendor/jsclasses/jis/okuverb.ins +9 -0
  138. data/vendor/jsclasses/jis/okuverb.sty +1 -13
  139. data/vendor/jsclasses/jis/winjis.sty +23 -19
  140. data/vendor/jsclasses/jsarticle.cls +22 -18
  141. data/vendor/jsclasses/jsbook.cls +22 -18
  142. data/vendor/jsclasses/jsclasses.dtx +94 -13
  143. data/vendor/jsclasses/jsclasses.ins +15 -5
  144. data/vendor/jsclasses/jsclasses.pdf +0 -0
  145. data/vendor/jsclasses/jslogo.ins +9 -0
  146. data/vendor/jsclasses/jslogo.pdf +0 -0
  147. data/vendor/jsclasses/jslogo.sty +1 -13
  148. data/vendor/jsclasses/jspf.cls +22 -18
  149. data/vendor/jsclasses/jsreport.cls +22 -18
  150. data/vendor/jsclasses/jsverb.ins +9 -0
  151. data/vendor/jsclasses/jsverb.pdf +0 -0
  152. data/vendor/jsclasses/jsverb.sty +1 -13
  153. data/vendor/jsclasses/kiyou.cls +22 -18
  154. data/vendor/jsclasses/minijs.sty +68 -22
  155. data/vendor/jsclasses/okumacro.ins +9 -0
  156. data/vendor/jsclasses/okumacro.pdf +0 -0
  157. data/vendor/jsclasses/okumacro.sty +1 -13
  158. data/vendor/jsclasses/okuverb.ins +9 -0
  159. data/vendor/jsclasses/okuverb.pdf +0 -0
  160. data/vendor/jsclasses/okuverb.sty +1 -13
  161. data/vendor/jsclasses/tests/relfont.tex +10 -0
  162. data/vendor/jsclasses/winjis.sty +23 -19
  163. metadata +14 -6
  164. data/.rubocop_todo.yml +0 -7
  165. data/lib/review/book/compilable.rb +0 -174
@@ -11,7 +11,8 @@ class ReviewExtTest < Test::Unit::TestCase
11
11
  module ReVIEW
12
12
  class HTMLBuilder
13
13
  attr_reader :builder_init_test
14
- def builder_init
14
+ def initialize(strict = false)
15
+ super
15
16
  @builder_init_test = "test"
16
17
  end
17
18
  end
@@ -1,7 +1,7 @@
1
1
  require 'test_helper'
2
2
  require 'review/compiler'
3
3
  require 'review/book'
4
- require 'review/topbuilder'
4
+ require 'review/rstbuilder'
5
5
  require 'review/i18n'
6
6
 
7
7
  class RSTBuidlerTest < Test::Unit::TestCase
@@ -327,13 +327,16 @@ EOS
327
327
  .. note::
328
328
 
329
329
  A
330
+
330
331
  B
331
332
 
333
+
332
334
  .. note::
333
335
 
334
336
  caption
335
337
  A
336
338
 
339
+
337
340
  EOS
338
341
  assert_equal expected, actual
339
342
 
@@ -342,13 +345,16 @@ EOS
342
345
  .. memo::
343
346
 
344
347
  A
348
+
345
349
  B
346
350
 
351
+
347
352
  .. memo::
348
353
 
349
354
  caption
350
355
  A
351
356
 
357
+
352
358
  EOS
353
359
  assert_equal expected, actual
354
360
 
@@ -357,13 +363,16 @@ EOS
357
363
  .. info::
358
364
 
359
365
  A
366
+
360
367
  B
361
368
 
369
+
362
370
  .. info::
363
371
 
364
372
  caption
365
373
  A
366
374
 
375
+
367
376
  EOS
368
377
  assert_equal expected, actual
369
378
 
@@ -372,13 +381,16 @@ EOS
372
381
  .. important::
373
382
 
374
383
  A
384
+
375
385
  B
376
386
 
387
+
377
388
  .. important::
378
389
 
379
390
  caption
380
391
  A
381
392
 
393
+
382
394
  EOS
383
395
  assert_equal expected, actual
384
396
 
@@ -387,13 +399,16 @@ EOS
387
399
  .. caution::
388
400
 
389
401
  A
402
+
390
403
  B
391
404
 
405
+
392
406
  .. caution::
393
407
 
394
408
  caption
395
409
  A
396
410
 
411
+
397
412
  EOS
398
413
  assert_equal expected, actual
399
414
 
@@ -402,13 +417,16 @@ EOS
402
417
  .. notice::
403
418
 
404
419
  A
420
+
405
421
  B
406
422
 
423
+
407
424
  .. notice::
408
425
 
409
426
  caption
410
427
  A
411
428
 
429
+
412
430
  EOS
413
431
  assert_equal expected, actual
414
432
 
@@ -417,13 +435,16 @@ EOS
417
435
  .. warning::
418
436
 
419
437
  A
438
+
420
439
  B
421
440
 
441
+
422
442
  .. warning::
423
443
 
424
444
  caption
425
445
  A
426
446
 
447
+
427
448
  EOS
428
449
  assert_equal expected, actual
429
450
 
@@ -432,13 +453,16 @@ EOS
432
453
  .. tip::
433
454
 
434
455
  A
456
+
435
457
  B
436
458
 
459
+
437
460
  .. tip::
438
461
 
439
462
  caption
440
463
  A
441
464
 
465
+
442
466
  EOS
443
467
  assert_equal expected, actual
444
468
  end
@@ -0,0 +1,156 @@
1
+ require 'test_helper'
2
+ require 'book_test_helper'
3
+ require 'review/sec_counter'
4
+
5
+ class SecCounterTest < Test::Unit::TestCase
6
+ include ReVIEW
7
+
8
+ def setup
9
+ @book = Book::Base.new
10
+ @io = StringIO.new("= sample\n\n")
11
+ @chapter = Book::Chapter.new(@book, 1, 'foo', '-', @io)
12
+ @part = Book::Part.new(@book, 1, [], 'name')
13
+ I18n.setup
14
+ end
15
+
16
+ def test_initialize
17
+ @sec_counter = SecCounter.new(5, @chapter)
18
+ assert_equal('1', @sec_counter.anchor(0))
19
+ assert_equal('1', @sec_counter.anchor(1))
20
+ assert_equal('1-0', @sec_counter.anchor(2))
21
+ assert_equal('1-0-0', @sec_counter.anchor(3))
22
+ end
23
+
24
+ def test_anchor1
25
+ @sec_counter = SecCounter.new(5, @chapter)
26
+ @sec_counter.inc(3)
27
+ assert_equal('1', @sec_counter.anchor(0))
28
+ assert_equal('1', @sec_counter.anchor(1))
29
+ assert_equal('1-0', @sec_counter.anchor(2))
30
+ assert_equal('1-0-1', @sec_counter.anchor(3))
31
+ end
32
+
33
+ def test_anchor2
34
+ @sec_counter = SecCounter.new(5, @chapter)
35
+ @sec_counter.inc(2)
36
+ @sec_counter.inc(3)
37
+ @sec_counter.inc(3)
38
+ @sec_counter.inc(4)
39
+ assert_equal('1', @sec_counter.anchor(0))
40
+ assert_equal('1', @sec_counter.anchor(1))
41
+ assert_equal('1-1', @sec_counter.anchor(2))
42
+ assert_equal('1-1-2', @sec_counter.anchor(3))
43
+ assert_equal('1-1-2-1', @sec_counter.anchor(4))
44
+ end
45
+
46
+ def test_anchor3
47
+ @sec_counter = SecCounter.new(5, @chapter)
48
+ @sec_counter.inc(2)
49
+ @sec_counter.inc(3)
50
+ @sec_counter.inc(3)
51
+ @sec_counter.inc(4)
52
+ @sec_counter.inc(3)
53
+ assert_equal('1', @sec_counter.anchor(0))
54
+ assert_equal('1', @sec_counter.anchor(1))
55
+ assert_equal('1-1', @sec_counter.anchor(2))
56
+ assert_equal('1-1-3', @sec_counter.anchor(3))
57
+ assert_equal('1-1-3-0', @sec_counter.anchor(4))
58
+ end
59
+
60
+ def test_anchor4
61
+ @sec_counter = SecCounter.new(5, @chapter)
62
+ @sec_counter.inc(2)
63
+ @sec_counter.inc(2)
64
+ @sec_counter.inc(2)
65
+ @sec_counter.inc(3)
66
+ @sec_counter.inc(3)
67
+ assert_equal('1', @sec_counter.anchor(0))
68
+ assert_equal('1', @sec_counter.anchor(1))
69
+ assert_equal('1-3', @sec_counter.anchor(2))
70
+ assert_equal('1-3-2', @sec_counter.anchor(3))
71
+ assert_equal('1-3-2-0', @sec_counter.anchor(4))
72
+ end
73
+
74
+ def test_anchor_part1
75
+ @sec_counter = SecCounter.new(5, @part)
76
+ @sec_counter.inc(3)
77
+ assert_equal('1', @sec_counter.anchor(0))
78
+ assert_equal('1', @sec_counter.anchor(1))
79
+ assert_equal('1-0', @sec_counter.anchor(2))
80
+ assert_equal('1-0-1', @sec_counter.anchor(3))
81
+ end
82
+
83
+ def test_anchor_part3
84
+ @sec_counter = SecCounter.new(5, @part)
85
+ @sec_counter.inc(2)
86
+ @sec_counter.inc(3)
87
+ @sec_counter.inc(3)
88
+ @sec_counter.inc(4)
89
+ @sec_counter.inc(3)
90
+ assert_equal('1', @sec_counter.anchor(0))
91
+ assert_equal('1', @sec_counter.anchor(1))
92
+ assert_equal('1-1', @sec_counter.anchor(2))
93
+ assert_equal('1-1-3', @sec_counter.anchor(3))
94
+ assert_equal('1-1-3-0', @sec_counter.anchor(4))
95
+ end
96
+
97
+ def test_prefix1
98
+ @sec_counter = SecCounter.new(5, @chapter)
99
+ @sec_counter.inc(2)
100
+ assert_equal('1.1 ', @sec_counter.prefix(2, 3))
101
+ assert_equal('1.1.0 ', @sec_counter.prefix(3, 3))
102
+ assert_equal('1.1.0 ', @sec_counter.prefix(3, 5))
103
+ end
104
+
105
+ def test_prefix2
106
+ @sec_counter = SecCounter.new(5, @chapter)
107
+ @sec_counter.inc(2)
108
+ @sec_counter.inc(3)
109
+ @sec_counter.inc(3)
110
+ @sec_counter.inc(4)
111
+ assert_equal('1.1 ', @sec_counter.prefix(2, 5))
112
+ assert_equal('1.1 ', @sec_counter.prefix(2, 5))
113
+ assert_equal(nil, @sec_counter.prefix(2, 1))
114
+ assert_equal('1.1.2 ', @sec_counter.prefix(3, 5))
115
+ assert_equal('1.1.2 ', @sec_counter.prefix(3, 3))
116
+ assert_equal(nil, @sec_counter.prefix(3, 2))
117
+ end
118
+
119
+ def test_prefix3
120
+ @sec_counter = SecCounter.new(5, @chapter)
121
+ @sec_counter.inc(2)
122
+ @sec_counter.inc(3)
123
+ @sec_counter.inc(3)
124
+ @sec_counter.inc(4)
125
+ @sec_counter.inc(3)
126
+ assert_equal('1.1 ', @sec_counter.prefix(2, 5))
127
+ assert_equal('1.1 ', @sec_counter.prefix(2, 5))
128
+ assert_equal(nil, @sec_counter.prefix(2, 1))
129
+ assert_equal('1.1.3 ', @sec_counter.prefix(3, 5))
130
+ assert_equal('1.1.3 ', @sec_counter.prefix(3, 3))
131
+ assert_equal(nil, @sec_counter.prefix(3, 2))
132
+ assert_equal('1.1.3.0 ', @sec_counter.prefix(4, 5))
133
+ end
134
+
135
+ def test_prefix_part1
136
+ @sec_counter = SecCounter.new(5, @part)
137
+ @sec_counter.inc(2)
138
+ assert_equal('I.1 ', @sec_counter.prefix(2, 3))
139
+ assert_equal('I.1.0 ', @sec_counter.prefix(3, 3))
140
+ assert_equal('I.1.0 ', @sec_counter.prefix(3, 5))
141
+ end
142
+
143
+ def test_prefix_part2
144
+ @sec_counter = SecCounter.new(5, @part)
145
+ @sec_counter.inc(2)
146
+ @sec_counter.inc(3)
147
+ @sec_counter.inc(3)
148
+ @sec_counter.inc(4)
149
+ assert_equal('I.1 ', @sec_counter.prefix(2, 5))
150
+ assert_equal('I.1 ', @sec_counter.prefix(2, 5))
151
+ assert_equal(nil, @sec_counter.prefix(2, 1))
152
+ assert_equal('I.1.2 ', @sec_counter.prefix(3, 5))
153
+ assert_equal('I.1.2 ', @sec_counter.prefix(3, 3))
154
+ assert_equal(nil, @sec_counter.prefix(3, 2))
155
+ end
156
+ end
@@ -29,7 +29,7 @@ class TEXTMakerCmdTest < Test::Unit::TestCase
29
29
  ruby_cmd = File.join(RbConfig::CONFIG['bindir'], RbConfig::CONFIG['ruby_install_name']) + RbConfig::CONFIG['EXEEXT']
30
30
  Dir.chdir(@tmpdir1) do
31
31
  _o, e, s = Open3.capture3("#{ruby_cmd} -S #{REVIEW_TEXTMAKER} #{option} #{configfile}")
32
- STDERR.puts e unless e.empty?
32
+ assert_equal '', e
33
33
  assert s.success?
34
34
  end
35
35
  assert File.exist?(File.join(@tmpdir1, targetfile))
@@ -175,11 +175,11 @@ EOS
175
175
  end
176
176
 
177
177
  def test_dt_inline
178
- fn = Book::FootnoteIndex.parse(['//footnote[bar][bar]'])
179
- @chapter.instance_eval { @footnote_index = fn }
180
- actual = compile_block(" : foo@<fn>{bar}[]<>&@<m>$\\alpha[]$\n")
178
+ actual = compile_block("//footnote[bar][bar]\n\n : foo@<fn>{bar}[]<>&@<m>$\\alpha[]$\n")
181
179
 
182
180
  expected = <<-EOS
181
+ 【注1】bar
182
+
183
183
  ★foo【注1】[]<>&◆→TeX式ここから←◆\\alpha[]◆→TeX式ここまで←◆☆
184
184
 
185
185
 
@@ -533,10 +533,10 @@ EOS
533
533
  end
534
534
 
535
535
  def test_empty_table
536
- e = assert_raises(ReVIEW::ApplicationError) { compile_block "//table{\n//}\n" }
536
+ e = assert_raises(ReVIEW::ApplicationError) { compile_block("//table{\n//}\n") }
537
537
  assert_equal ':2: error: no rows in the table', e.message
538
538
 
539
- e = assert_raises(ReVIEW::ApplicationError) { compile_block "//table{\n------------\n//}\n" }
539
+ e = assert_raises(ReVIEW::ApplicationError) { compile_block("//table{\n------------\n//}\n") }
540
540
  assert_equal ':3: error: no rows in the table', e.message
541
541
  end
542
542
 
@@ -735,6 +735,183 @@ EOS
735
735
  assert_equal expected, actual
736
736
  end
737
737
 
738
+ def test_minicolumn_blocks
739
+ titles = {
740
+ 'note' => 'ノート',
741
+ 'memo' => 'メモ',
742
+ 'important' => '重要',
743
+ 'info' => '情報',
744
+ 'notice' => '注意',
745
+ 'caution' => '警告',
746
+ 'warning' => '危険',
747
+ 'tip' => 'TIP'
748
+ }
749
+
750
+ %w[note memo tip info warning important caution notice].each do |type|
751
+ @builder.doc_status.clear
752
+ src = <<-EOS
753
+ //#{type}[#{type}1]{
754
+
755
+ //}
756
+
757
+ //#{type}[#{type}2]{
758
+ //}
759
+ EOS
760
+
761
+ expected = <<-EOS
762
+ ◆→開始:#{titles[type]}←◆
763
+ ■#{type}1
764
+ ◆→終了:#{titles[type]}←◆
765
+
766
+ ◆→開始:#{titles[type]}←◆
767
+ ■#{type}2
768
+ ◆→終了:#{titles[type]}←◆
769
+
770
+ EOS
771
+ assert_equal expected, compile_block(src)
772
+
773
+ src = <<-EOS
774
+ //#{type}[#{type}2]{
775
+
776
+ //}
777
+
778
+ //#{type}[#{type}3]{
779
+
780
+ //}
781
+
782
+ //#{type}[#{type}4]{
783
+
784
+ //}
785
+
786
+ //#{type}[#{type}5]{
787
+
788
+ //}
789
+
790
+ //#{type}[#{type}6]{
791
+
792
+ //}
793
+ EOS
794
+
795
+ expected = <<-EOS
796
+ ◆→開始:#{titles[type]}←◆
797
+ ■#{type}2
798
+ ◆→終了:#{titles[type]}←◆
799
+
800
+ ◆→開始:#{titles[type]}←◆
801
+ ■#{type}3
802
+ ◆→終了:#{titles[type]}←◆
803
+
804
+ ◆→開始:#{titles[type]}←◆
805
+ ■#{type}4
806
+ ◆→終了:#{titles[type]}←◆
807
+
808
+ ◆→開始:#{titles[type]}←◆
809
+ ■#{type}5
810
+ ◆→終了:#{titles[type]}←◆
811
+
812
+ ◆→開始:#{titles[type]}←◆
813
+ ■#{type}6
814
+ ◆→終了:#{titles[type]}←◆
815
+
816
+ EOS
817
+ assert_equal expected, compile_block(src)
818
+
819
+ src = <<-EOS
820
+ //#{type}{
821
+
822
+ * A
823
+
824
+ 1. B
825
+
826
+ //}
827
+
828
+ //#{type}[OMITEND1]{
829
+
830
+ //emlist{
831
+ LIST
832
+ //}
833
+
834
+ //}
835
+ //#{type}[OMITEND2]{
836
+ //}
837
+ EOS
838
+
839
+ expected = <<-EOS
840
+ ◆→開始:#{titles[type]}←◆
841
+
842
+ ● A
843
+
844
+ 1 B
845
+
846
+ ◆→終了:#{titles[type]}←◆
847
+
848
+ ◆→開始:#{titles[type]}←◆
849
+ ■OMITEND1
850
+
851
+ ◆→開始:インラインリスト←◆
852
+ LIST
853
+ ◆→終了:インラインリスト←◆
854
+
855
+ ◆→終了:#{titles[type]}←◆
856
+
857
+ ◆→開始:#{titles[type]}←◆
858
+ ■OMITEND2
859
+ ◆→終了:#{titles[type]}←◆
860
+
861
+ EOS
862
+ assert_equal expected, compile_block(src)
863
+ end
864
+ end
865
+
866
+ def test_minicolumn_blocks_nest_error1
867
+ %w[note memo tip info warning important caution notice].each do |type|
868
+ @builder.doc_status.clear
869
+ src = <<-EOS
870
+ //#{type}{
871
+
872
+ //#{type}{
873
+ //}
874
+
875
+ //}
876
+ EOS
877
+ e = assert_raises(ReVIEW::ApplicationError) { compile_block(src) }
878
+ assert_match(/minicolumn cannot be nested:/, e.message)
879
+ end
880
+ end
881
+
882
+ def test_minicolumn_blocks_nest_error2
883
+ %w[note memo tip info warning important caution notice].each do |type|
884
+ @builder.doc_status.clear
885
+ src = <<-EOS
886
+ //#{type}{
887
+
888
+ //#{type}{
889
+
890
+ //}
891
+
892
+ //}
893
+ EOS
894
+ e = assert_raises(ReVIEW::ApplicationError) { compile_block(src) }
895
+ assert_match(/minicolumn cannot be nested:/, e.message)
896
+ end
897
+ end
898
+
899
+ def test_minicolumn_blocks_nest_error3
900
+ %w[memo tip info warning important caution notice].each do |type|
901
+ @builder.doc_status.clear
902
+ src = <<-EOS
903
+ //#{type}{
904
+
905
+ //note{
906
+ //}
907
+
908
+ //}
909
+ EOS
910
+ e = assert_raises(ReVIEW::ApplicationError) { compile_block(src) }
911
+ assert_match(/minicolumn cannot be nested:/, e.message)
912
+ end
913
+ end
914
+
738
915
  def test_image
739
916
  def @chapter.image(_id)
740
917
  item = Book::Index::Item.new('sampleimg', 1)
@@ -816,18 +993,18 @@ EOB
816
993
  end
817
994
 
818
995
  def test_inline_unknown
819
- e = assert_raises(ReVIEW::ApplicationError) { compile_block "@<img>{n}\n" }
996
+ e = assert_raises(ReVIEW::ApplicationError) { compile_block("@<img>{n}\n") }
820
997
  assert_equal ':1: error: unknown image: n', e.message
821
- e = assert_raises(ReVIEW::ApplicationError) { compile_block "@<fn>{n}\n" }
998
+ e = assert_raises(ReVIEW::ApplicationError) { compile_block("@<fn>{n}\n") }
822
999
  assert_equal ':1: error: unknown footnote: n', e.message
823
- e = assert_raises(ReVIEW::ApplicationError) { compile_block "@<hd>{n}\n" }
1000
+ e = assert_raises(ReVIEW::ApplicationError) { compile_block("@<hd>{n}\n") }
824
1001
  assert_equal ':1: error: unknown headline: n', e.message
825
1002
  %w[list table column].each do |name|
826
- e = assert_raises(ReVIEW::ApplicationError) { compile_block "@<#{name}>{n}\n" }
1003
+ e = assert_raises(ReVIEW::ApplicationError) { compile_block("@<#{name}>{n}\n") }
827
1004
  assert_equal ":1: error: unknown #{name}: n", e.message
828
1005
  end
829
1006
  %w[chap chapref title].each do |name|
830
- e = assert_raises(ReVIEW::ApplicationError) { compile_block "@<#{name}>{n}\n" }
1007
+ e = assert_raises(ReVIEW::ApplicationError) { compile_block("@<#{name}>{n}\n") }
831
1008
  assert_equal ':1: error: key not found: "n"', e.message
832
1009
  end
833
1010
  end