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
@@ -229,6 +229,10 @@ EOS
229
229
 
230
230
  @config['secnolevel'] = 3
231
231
  actual = compile_inline('test @<hd>{chap1|test} test2')
232
+ assert_equal 'test \reviewsecref{「1.1.1 te\\textunderscore{}st」}{sec:1-1-1} test2', actual
233
+
234
+ @config['chapterlink'] = nil
235
+ actual = compile_inline('test @<hd>{chap1|test} test2')
232
236
  assert_equal 'test 「1.1.1 te\\textunderscore{}st」 test2', actual
233
237
  end
234
238
 
@@ -662,9 +666,11 @@ EOS
662
666
  expected = <<-EOS
663
667
  \\begin{reviewminicolumn}
664
668
  \\reviewminicolumntitle{this is \\textbf{test}\\textless{}\\&\\textgreater{}\\textunderscore{}}
669
+
665
670
  test1
666
671
 
667
672
  test\\textit{2}
673
+
668
674
  \\end{reviewminicolumn}
669
675
  EOS
670
676
  assert_equal expected, actual
@@ -1285,13 +1291,17 @@ EOS
1285
1291
  actual = compile_block("//note{\nA\n\nB\n//}\n//note[caption]{\nA\n//}")
1286
1292
  expected = <<-EOS
1287
1293
  \\begin{reviewminicolumn}
1294
+
1288
1295
  A
1289
1296
 
1290
1297
  B
1298
+
1291
1299
  \\end{reviewminicolumn}
1292
1300
  \\begin{reviewminicolumn}
1293
1301
  \\reviewminicolumntitle{caption}
1302
+
1294
1303
  A
1304
+
1295
1305
  \\end{reviewminicolumn}
1296
1306
  EOS
1297
1307
  assert_equal expected, actual
@@ -1299,13 +1309,17 @@ EOS
1299
1309
  actual = compile_block("//memo{\nA\n\nB\n//}\n//memo[caption]{\nA\n//}")
1300
1310
  expected = <<-EOS
1301
1311
  \\begin{reviewminicolumn}
1312
+
1302
1313
  A
1303
1314
 
1304
1315
  B
1316
+
1305
1317
  \\end{reviewminicolumn}
1306
1318
  \\begin{reviewminicolumn}
1307
1319
  \\reviewminicolumntitle{caption}
1320
+
1308
1321
  A
1322
+
1309
1323
  \\end{reviewminicolumn}
1310
1324
  EOS
1311
1325
  assert_equal expected, actual
@@ -1313,13 +1327,17 @@ EOS
1313
1327
  actual = compile_block("//info{\nA\n\nB\n//}\n//info[caption]{\nA\n//}")
1314
1328
  expected = <<-EOS
1315
1329
  \\begin{reviewminicolumn}
1330
+
1316
1331
  A
1317
1332
 
1318
1333
  B
1334
+
1319
1335
  \\end{reviewminicolumn}
1320
1336
  \\begin{reviewminicolumn}
1321
1337
  \\reviewminicolumntitle{caption}
1338
+
1322
1339
  A
1340
+
1323
1341
  \\end{reviewminicolumn}
1324
1342
  EOS
1325
1343
  assert_equal expected, actual
@@ -1327,13 +1345,17 @@ EOS
1327
1345
  actual = compile_block("//important{\nA\n\nB\n//}\n//important[caption]{\nA\n//}")
1328
1346
  expected = <<-EOS
1329
1347
  \\begin{reviewminicolumn}
1348
+
1330
1349
  A
1331
1350
 
1332
1351
  B
1352
+
1333
1353
  \\end{reviewminicolumn}
1334
1354
  \\begin{reviewminicolumn}
1335
1355
  \\reviewminicolumntitle{caption}
1356
+
1336
1357
  A
1358
+
1337
1359
  \\end{reviewminicolumn}
1338
1360
  EOS
1339
1361
  assert_equal expected, actual
@@ -1341,13 +1363,17 @@ EOS
1341
1363
  actual = compile_block("//caution{\nA\n\nB\n//}\n//caution[caption]{\nA\n//}")
1342
1364
  expected = <<-EOS
1343
1365
  \\begin{reviewminicolumn}
1366
+
1344
1367
  A
1345
1368
 
1346
1369
  B
1370
+
1347
1371
  \\end{reviewminicolumn}
1348
1372
  \\begin{reviewminicolumn}
1349
1373
  \\reviewminicolumntitle{caption}
1374
+
1350
1375
  A
1376
+
1351
1377
  \\end{reviewminicolumn}
1352
1378
  EOS
1353
1379
  assert_equal expected, actual
@@ -1355,13 +1381,17 @@ EOS
1355
1381
  actual = compile_block("//notice{\nA\n\nB\n//}\n//notice[caption]{\nA\n//}")
1356
1382
  expected = <<-EOS
1357
1383
  \\begin{reviewminicolumn}
1384
+
1358
1385
  A
1359
1386
 
1360
1387
  B
1388
+
1361
1389
  \\end{reviewminicolumn}
1362
1390
  \\begin{reviewminicolumn}
1363
1391
  \\reviewminicolumntitle{caption}
1392
+
1364
1393
  A
1394
+
1365
1395
  \\end{reviewminicolumn}
1366
1396
  EOS
1367
1397
  assert_equal expected, actual
@@ -1369,13 +1399,17 @@ EOS
1369
1399
  actual = compile_block("//warning{\nA\n\nB\n//}\n//warning[caption]{\nA\n//}")
1370
1400
  expected = <<-EOS
1371
1401
  \\begin{reviewminicolumn}
1402
+
1372
1403
  A
1373
1404
 
1374
1405
  B
1406
+
1375
1407
  \\end{reviewminicolumn}
1376
1408
  \\begin{reviewminicolumn}
1377
1409
  \\reviewminicolumntitle{caption}
1410
+
1378
1411
  A
1412
+
1379
1413
  \\end{reviewminicolumn}
1380
1414
  EOS
1381
1415
  assert_equal expected, actual
@@ -1383,13 +1417,17 @@ EOS
1383
1417
  actual = compile_block("//tip{\nA\n\nB\n//}\n//tip[caption]{\nA\n//}")
1384
1418
  expected = <<-EOS
1385
1419
  \\begin{reviewminicolumn}
1420
+
1386
1421
  A
1387
1422
 
1388
1423
  B
1424
+
1389
1425
  \\end{reviewminicolumn}
1390
1426
  \\begin{reviewminicolumn}
1391
1427
  \\reviewminicolumntitle{caption}
1428
+
1392
1429
  A
1430
+
1393
1431
  \\end{reviewminicolumn}
1394
1432
  EOS
1395
1433
  assert_equal expected, actual
@@ -1506,18 +1544,18 @@ EOS
1506
1544
  end
1507
1545
 
1508
1546
  def test_inline_unknown
1509
- e = assert_raises(ReVIEW::ApplicationError) { compile_block "@<img>{n}\n" }
1547
+ e = assert_raises(ReVIEW::ApplicationError) { compile_block("@<img>{n}\n") }
1510
1548
  assert_equal ':1: error: unknown image: n', e.message
1511
- e = assert_raises(ReVIEW::ApplicationError) { compile_block "@<fn>{n}\n" }
1549
+ e = assert_raises(ReVIEW::ApplicationError) { compile_block("@<fn>{n}\n") }
1512
1550
  assert_equal ':1: error: unknown footnote: n', e.message
1513
- e = assert_raises(ReVIEW::ApplicationError) { compile_block "@<hd>{n}\n" }
1551
+ e = assert_raises(ReVIEW::ApplicationError) { compile_block("@<hd>{n}\n") }
1514
1552
  assert_equal ':1: error: unknown headline: n', e.message
1515
1553
  %w[list table column].each do |name|
1516
- e = assert_raises(ReVIEW::ApplicationError) { compile_block "@<#{name}>{n}\n" }
1554
+ e = assert_raises(ReVIEW::ApplicationError) { compile_block("@<#{name}>{n}\n") }
1517
1555
  assert_equal ":1: error: unknown #{name}: n", e.message
1518
1556
  end
1519
1557
  %w[chap chapref title].each do |name|
1520
- e = assert_raises(ReVIEW::ApplicationError) { compile_block "@<#{name}>{n}\n" }
1558
+ e = assert_raises(ReVIEW::ApplicationError) { compile_block("@<#{name}>{n}\n") }
1521
1559
  assert_equal ':1: error: key not found: "n"', e.message
1522
1560
  end
1523
1561
  end
@@ -6,26 +6,26 @@ class LoggerTest < Test::Unit::TestCase
6
6
  end
7
7
 
8
8
  def test_logging
9
- old_stderr = STDERR.dup
9
+ old_stderr = $stderr.dup
10
10
  IO.pipe do |r, w|
11
- STDERR.reopen(w)
11
+ $stderr.reopen(w)
12
12
  @logger = ReVIEW::Logger.new
13
13
  @logger.warn('test')
14
14
  msg = r.readline
15
- STDERR.reopen(old_stderr)
15
+ $stderr.reopen(old_stderr)
16
16
 
17
17
  assert_equal "WARN --: test\n", msg
18
18
  end
19
19
  end
20
20
 
21
21
  def test_logging_with_progname
22
- old_stderr = STDERR.dup
22
+ old_stderr = $stderr.dup
23
23
  IO.pipe do |r, w|
24
- STDERR.reopen(w)
25
- @logger = ReVIEW::Logger.new(STDERR, progname: 'review-dummy-cmd')
24
+ $stderr.reopen(w)
25
+ @logger = ReVIEW::Logger.new($stderr, progname: 'review-dummy-cmd')
26
26
  @logger.warn('test')
27
27
  msg = r.readline
28
- STDERR.reopen(old_stderr)
28
+ $stderr.reopen(old_stderr)
29
29
 
30
30
  assert_equal "WARN review-dummy-cmd: test\n", msg
31
31
  end
@@ -32,18 +32,6 @@ class MakerHelperTest < Test::Unit::TestCase
32
32
  assert image_files.include?(File.join(@tmpdir1, 'subdir/foo.png'))
33
33
  end
34
34
 
35
- def test_copy_images_to_dir_convert
36
- if /mswin|mingw|cygwin/ !~ RUBY_PLATFORM && (`convert -version` rescue nil) && (`gs --version` rescue nil)
37
- FileUtils.cp(File.join(assets_dir, 'black.eps'), File.join(@tmpdir1, 'foo.eps'))
38
-
39
- image_files = MakerHelper.copy_images_to_dir(@tmpdir1, @tmpdir2,
40
- convert: { eps: :png })
41
-
42
- assert File.exist?(File.join(@tmpdir2, 'foo.eps.png')), 'EPS to PNG conversion failed'
43
- assert image_files.include?(File.join(@tmpdir1, 'foo.eps.png'))
44
- end
45
- end
46
-
47
35
  def test_copy_images_to_dir_with_exts
48
36
  types = %w[png gif jpg jpeg svg pdf eps]
49
37
  types4epub = %w[png gif jpg jpeg svg]
@@ -16,6 +16,7 @@ class MARKDOWNBuilderTest < Test::Unit::TestCase
16
16
  @chapter = Book::Chapter.new(@book, 1, '-', nil, StringIO.new)
17
17
  location = Location.new(nil, nil)
18
18
  @builder.bind(@compiler, @chapter, location)
19
+ I18n.setup(@config['language'])
19
20
  end
20
21
 
21
22
  def test_quote
@@ -47,7 +48,9 @@ EOS
47
48
  <div class="memo">
48
49
  <p class="caption">this is **test**<&>_</p>
49
50
  test1
51
+
50
52
  test*2*
53
+
51
54
  </div>
52
55
  EOS
53
56
  assert_equal expected, actual
@@ -10,9 +10,10 @@ class PDFMakerTest < Test::Unit::TestCase
10
10
  @config.merge!(
11
11
  'bookname' => 'sample',
12
12
  'title' => 'Sample Book',
13
- 'review_version' => 3,
13
+ 'aut' => 'anonymous',
14
+ 'review_version' => 4,
14
15
  'urnid' => 'http://example.jp/',
15
- 'date' => '2011-01-01',
16
+ 'date' => '2020-07-11',
16
17
  'language' => 'ja',
17
18
  'texcommand' => 'uplatex'
18
19
  )
@@ -75,7 +76,7 @@ class PDFMakerTest < Test::Unit::TestCase
75
76
  Dir.mktmpdir do |dir|
76
77
  coverfile = 'cover.html'
77
78
  content = '<html><body>test</body></html>'
78
- File.open(File.join(dir, 'cover.tex'), 'w') { |f| f.write(content) }
79
+ File.write(File.join(dir, 'cover.tex'), content)
79
80
  page = @maker.make_custom_page(File.join(dir, coverfile))
80
81
  assert_equal(content, page)
81
82
  end
@@ -144,7 +145,7 @@ class PDFMakerTest < Test::Unit::TestCase
144
145
  @maker.erb_config
145
146
  tmpl = @maker.template_content
146
147
  expect = File.read(File.join(assets_dir, 'test_template.tex'))
147
- expect.gsub!(/\\def\\review@reviewversion{[^\}]+}/, "\\def\\review@reviewversion{#{ReVIEW::VERSION}}")
148
+ expect.gsub!(/\\def\\review@reviewversion{[^}]+}/, "\\def\\review@reviewversion{#{ReVIEW::VERSION}}")
148
149
  assert_equal(expect, tmpl)
149
150
  end
150
151
  end
@@ -159,7 +160,7 @@ class PDFMakerTest < Test::Unit::TestCase
159
160
  @maker.erb_config
160
161
  tmpl = @maker.template_content
161
162
  expect = File.read(File.join(assets_dir, 'test_template.tex'))
162
- expect.gsub!(/\\def\\review@reviewversion{[^\}]+}/, "\\def\\review@reviewversion{#{ReVIEW::VERSION}}")
163
+ expect.gsub!(/\\def\\review@reviewversion{[^}]+}/, "\\def\\review@reviewversion{#{ReVIEW::VERSION}}")
163
164
  expect.sub!("\\makeatother\n", '\&' + "%% BEGIN: config-local.tex.erb\n\\def\\customvalue{\\#\\textunderscore{}TEST\\textunderscore{}}\n%% END: config-local.tex.erb\n")
164
165
  assert_equal(expect, tmpl)
165
166
  end
@@ -175,13 +176,13 @@ class PDFMakerTest < Test::Unit::TestCase
175
176
  Dir.mktmpdir do |dir|
176
177
  Dir.chdir(dir) do
177
178
  profile = "\\thispagestyle{empty}\\chapter*{Profile}\nsome profile\n"
178
- File.open(File.join(dir, 'profile.tex'), 'w') { |f| f.write(profile) }
179
+ File.write(File.join(dir, 'profile.tex'), profile)
179
180
  advfile = "\\thispagestyle{empty}\\chapter*{Ad}\nsome ad content\n"
180
- File.open(File.join(dir, 'advfile.tex'), 'w') { |f| f.write(advfile) }
181
+ File.write(File.join(dir, 'advfile.tex'), advfile)
181
182
  backcover = "\\clearpage\n\\thispagestyle{empty}\\AddToShipoutPictureBG{%\n\\AtPageLowerLeft{\\includegraphics[width=\\paperwidth,height=\\paperheight]{images/backcover.png}}\n}\n\\null"
182
- File.open(File.join(dir, 'backcover.tex'), 'w') { |f| f.write(backcover) }
183
+ File.write(File.join(dir, 'backcover.tex'), backcover)
183
184
  expect = File.read(File.join(assets_dir, 'test_template_backmatter.tex'))
184
- expect.gsub!(/\\def\\review@reviewversion{[^\}]+}/, "\\def\\review@reviewversion{#{ReVIEW::VERSION}}")
185
+ expect.gsub!(/\\def\\review@reviewversion{[^}]+}/, "\\def\\review@reviewversion{#{ReVIEW::VERSION}}")
185
186
  @maker.basedir = Dir.pwd
186
187
  @maker.erb_config
187
188
  tmpl = @maker.template_content
@@ -196,7 +197,7 @@ class PDFMakerTest < Test::Unit::TestCase
196
197
  @config['pht'] = ['Mrs.Smith']
197
198
  @config['language'] = 'ja'
198
199
  history = @maker.make_history_list
199
- expect = ['201111日 発行']
200
+ expect = ['2020711日 発行']
200
201
  assert_equal expect, history
201
202
  end
202
203
 
@@ -207,9 +208,9 @@ class PDFMakerTest < Test::Unit::TestCase
207
208
  @config['language'] = 'ja'
208
209
  @config['history'] =
209
210
  [['2011-08-03 v1.0.0版発行',
210
- '2012-02-15 v1.1.0版発行']]
211
+ '2020-07-11 v1.2.0版発行']]
211
212
  history = @maker.make_history_list
212
- expect = ['2011年8月3日 v1.0.0版発行', '2012215日 v1.1.0版発行']
213
+ expect = ['2011年8月3日 v1.0.0版発行', '2020711日 v1.2.0版発行']
213
214
  assert_equal expect, history
214
215
  end
215
216
 
@@ -30,7 +30,7 @@ class PDFMakerCmdTest < Test::Unit::TestCase
30
30
  Dir.chdir(@tmpdir1) do
31
31
  _o, e, s = Open3.capture3("#{ruby_cmd} -S #{REVIEW_PDFMAKER} #{option} #{configfile}")
32
32
  if !e.empty? && !s.success?
33
- STDERR.puts e
33
+ $stderr.puts e
34
34
  end
35
35
  assert s.success?
36
36
  end
@@ -476,10 +476,10 @@ EOS
476
476
  end
477
477
 
478
478
  def test_empty_table
479
- e = assert_raises(ReVIEW::ApplicationError) { compile_block "//table{\n//}\n" }
479
+ e = assert_raises(ReVIEW::ApplicationError) { compile_block("//table{\n//}\n") }
480
480
  assert_equal ':2: error: no rows in the table', e.message
481
481
 
482
- e = assert_raises(ReVIEW::ApplicationError) { compile_block "//table{\n------------\n//}\n" }
482
+ e = assert_raises(ReVIEW::ApplicationError) { compile_block("//table{\n------------\n//}\n") }
483
483
  assert_equal ':3: error: no rows in the table', e.message
484
484
  end
485
485
 
@@ -596,6 +596,147 @@ EOS
596
596
  assert_equal expected, actual
597
597
  end
598
598
 
599
+ def test_minicolumn_blocks
600
+ %w[note memo tip info warning important caution notice].each do |type|
601
+ @builder.doc_status.clear
602
+ src = <<-EOS
603
+ //#{type}[#{type}1]{
604
+
605
+ //}
606
+
607
+ //#{type}[#{type}2]{
608
+ //}
609
+ EOS
610
+
611
+ expected = <<-EOS
612
+ #{type}1
613
+
614
+ #{type}2
615
+
616
+ EOS
617
+ assert_equal expected, compile_block(src)
618
+
619
+ src = <<-EOS
620
+ //#{type}[#{type}2]{
621
+
622
+ //}
623
+
624
+ //#{type}[#{type}3]{
625
+
626
+ //}
627
+
628
+ //#{type}[#{type}4]{
629
+
630
+ //}
631
+
632
+ //#{type}[#{type}5]{
633
+
634
+ //}
635
+
636
+ //#{type}[#{type}6]{
637
+
638
+ //}
639
+ EOS
640
+
641
+ expected = <<-EOS
642
+ #{type}2
643
+
644
+ #{type}3
645
+
646
+ #{type}4
647
+
648
+ #{type}5
649
+
650
+ #{type}6
651
+
652
+ EOS
653
+ assert_equal expected, compile_block(src)
654
+
655
+ src = <<-EOS
656
+ //#{type}{
657
+
658
+ * A
659
+
660
+ 1. B
661
+
662
+ //}
663
+
664
+ //#{type}[OMITEND1]{
665
+
666
+ //emlist{
667
+ LIST
668
+ //}
669
+
670
+ //}
671
+ //#{type}[OMITEND2]{
672
+ //}
673
+ EOS
674
+
675
+ expected = <<-EOS
676
+ A
677
+
678
+ 1 B
679
+
680
+ OMITEND1
681
+
682
+ LIST
683
+
684
+ OMITEND2
685
+
686
+ EOS
687
+ assert_equal expected, compile_block(src)
688
+ end
689
+ end
690
+
691
+ def test_minicolumn_blocks_nest_error1
692
+ %w[note memo tip info warning important caution notice].each do |type|
693
+ @builder.doc_status.clear
694
+ src = <<-EOS
695
+ //#{type}{
696
+
697
+ //#{type}{
698
+ //}
699
+
700
+ //}
701
+ EOS
702
+ e = assert_raises(ReVIEW::ApplicationError) { compile_block(src) }
703
+ assert_match(/minicolumn cannot be nested:/, e.message)
704
+ end
705
+ end
706
+
707
+ def test_minicolumn_blocks_nest_error2
708
+ %w[note memo tip info warning important caution notice].each do |type|
709
+ @builder.doc_status.clear
710
+ src = <<-EOS
711
+ //#{type}{
712
+
713
+ //#{type}{
714
+
715
+ //}
716
+
717
+ //}
718
+ EOS
719
+ e = assert_raises(ReVIEW::ApplicationError) { compile_block(src) }
720
+ assert_match(/minicolumn cannot be nested:/, e.message)
721
+ end
722
+ end
723
+
724
+ def test_minicolumn_blocks_nest_error3
725
+ %w[memo tip info warning important caution notice].each do |type|
726
+ @builder.doc_status.clear
727
+ src = <<-EOS
728
+ //#{type}{
729
+
730
+ //note{
731
+ //}
732
+
733
+ //}
734
+ EOS
735
+ e = assert_raises(ReVIEW::ApplicationError) { compile_block(src) }
736
+ assert_match(/minicolumn cannot be nested:/, e.message)
737
+ end
738
+ end
739
+
599
740
  def test_image
600
741
  def @chapter.image(_id)
601
742
  item = Book::Index::Item.new('sampleimg', 1)
@@ -628,18 +769,18 @@ EOS
628
769
  end
629
770
 
630
771
  def test_inline_unknown
631
- e = assert_raises(ReVIEW::ApplicationError) { compile_block "@<img>{n}\n" }
772
+ e = assert_raises(ReVIEW::ApplicationError) { compile_block("@<img>{n}\n") }
632
773
  assert_equal ':1: error: unknown image: n', e.message
633
- e = assert_raises(ReVIEW::ApplicationError) { compile_block "@<fn>{n}\n" }
774
+ e = assert_raises(ReVIEW::ApplicationError) { compile_block("@<fn>{n}\n") }
634
775
  assert_equal ':1: error: unknown footnote: n', e.message
635
- e = assert_raises(ReVIEW::ApplicationError) { compile_block "@<hd>{n}\n" }
776
+ e = assert_raises(ReVIEW::ApplicationError) { compile_block("@<hd>{n}\n") }
636
777
  assert_equal ':1: error: unknown headline: n', e.message
637
778
  %w[list table column].each do |name|
638
- e = assert_raises(ReVIEW::ApplicationError) { compile_block "@<#{name}>{n}\n" }
779
+ e = assert_raises(ReVIEW::ApplicationError) { compile_block("@<#{name}>{n}\n") }
639
780
  assert_equal ":1: error: unknown #{name}: n", e.message
640
781
  end
641
782
  %w[chap chapref title].each do |name|
642
- e = assert_raises(ReVIEW::ApplicationError) { compile_block "@<#{name}>{n}\n" }
783
+ e = assert_raises(ReVIEW::ApplicationError) { compile_block("@<#{name}>{n}\n") }
643
784
  assert_equal ':1: error: key not found: "n"', e.message
644
785
  end
645
786
  end
@@ -752,4 +893,278 @@ EOS
752
893
  actual = compile_block(src)
753
894
  assert_equal expected, actual
754
895
  end
896
+
897
+ def test_nest_error_open
898
+ src = <<-EOS
899
+ //endchild
900
+ EOS
901
+ e = assert_raises(ReVIEW::ApplicationError) { compile_block(src) }
902
+ assert_equal ":1: error: //endchild is shown, but any opened //beginchild doesn't exist", e.message
903
+ end
904
+
905
+ def test_nest_error_close1
906
+ src = <<-EOS
907
+ //beginchild
908
+ EOS
909
+ e = assert_raises(ReVIEW::ApplicationError) { compile_block(src) }
910
+ assert_equal ":1: error: //beginchild is shown, but previous element isn't ul, ol, or dl", e.message
911
+ end
912
+
913
+ def test_nest_error_close2
914
+ src = <<-EOS
915
+ * foo
916
+
917
+ //beginchild
918
+
919
+ 1. foo
920
+
921
+ //beginchild
922
+
923
+ : foo
924
+
925
+ //beginchild
926
+ EOS
927
+ e = assert_raises(ReVIEW::ApplicationError) { compile_block(src) }
928
+ assert_equal ':12: error: //beginchild of dl,ol,ul misses //endchild', e.message
929
+ end
930
+
931
+ def test_nest_error_close3
932
+ src = <<-EOS
933
+ * foo
934
+
935
+ //beginchild
936
+
937
+ 1. foo
938
+
939
+ //beginchild
940
+
941
+ : foo
942
+
943
+ //beginchild
944
+
945
+ //endchild
946
+ EOS
947
+ e = assert_raises(ReVIEW::ApplicationError) { compile_block(src) }
948
+ assert_equal ':14: error: //beginchild of ol,ul misses //endchild', e.message
949
+ end
950
+
951
+ def test_nest_ul
952
+ src = <<-EOS
953
+ * UL1
954
+
955
+ //beginchild
956
+
957
+ 1. UL1-OL1
958
+ 2. UL1-OL2
959
+
960
+ * UL1-UL1
961
+ * UL1-UL2
962
+
963
+ : UL1-DL1
964
+ UL1-DD1
965
+ : UL1-DL2
966
+ UL1-DD2
967
+
968
+ //endchild
969
+
970
+ * UL2
971
+
972
+ //beginchild
973
+
974
+ UL2-PARA
975
+
976
+ //endchild
977
+ EOS
978
+
979
+ expected = <<-EOS
980
+ UL1
981
+
982
+ 1 UL1-OL1
983
+ 2 UL1-OL2
984
+
985
+ UL1-UL1
986
+ UL1-UL2
987
+
988
+ UL1-DL1
989
+ UL1-DD1
990
+ UL1-DL2
991
+ UL1-DD2
992
+
993
+ UL2
994
+ UL2-PARA
995
+ EOS
996
+
997
+ actual = compile_block(src)
998
+ assert_equal expected, actual
999
+ end
1000
+
1001
+ def test_nest_ol
1002
+ src = <<-EOS
1003
+ 1. OL1
1004
+
1005
+ //beginchild
1006
+
1007
+ 1. OL1-OL1
1008
+ 2. OL1-OL2
1009
+
1010
+ * OL1-UL1
1011
+ * OL1-UL2
1012
+
1013
+ : OL1-DL1
1014
+ OL1-DD1
1015
+ : OL1-DL2
1016
+ OL1-DD2
1017
+
1018
+ //endchild
1019
+
1020
+ 2. OL2
1021
+
1022
+ //beginchild
1023
+
1024
+ OL2-PARA
1025
+
1026
+ //endchild
1027
+ EOS
1028
+
1029
+ expected = <<-EOS
1030
+ 1 OL1
1031
+
1032
+ 1 OL1-OL1
1033
+ 2 OL1-OL2
1034
+
1035
+ OL1-UL1
1036
+ OL1-UL2
1037
+
1038
+ OL1-DL1
1039
+ OL1-DD1
1040
+ OL1-DL2
1041
+ OL1-DD2
1042
+
1043
+ 2 OL2
1044
+ OL2-PARA
1045
+ EOS
1046
+
1047
+ actual = compile_block(src)
1048
+ assert_equal expected, actual
1049
+ end
1050
+
1051
+ def test_nest_dl
1052
+ src = <<-EOS
1053
+ : DL1
1054
+
1055
+ //beginchild
1056
+
1057
+ 1. DL1-OL1
1058
+ 2. DL1-OL2
1059
+
1060
+ * DL1-UL1
1061
+ * DL1-UL2
1062
+
1063
+ : DL1-DL1
1064
+ DL1-DD1
1065
+ : DL1-DL2
1066
+ DL1-DD2
1067
+
1068
+ //endchild
1069
+
1070
+ : DL2
1071
+ DD2
1072
+
1073
+ //beginchild
1074
+
1075
+ * DD2-UL1
1076
+ * DD2-UL2
1077
+
1078
+ DD2-PARA
1079
+
1080
+ //endchild
1081
+ EOS
1082
+
1083
+ expected = <<-EOS
1084
+ DL1
1085
+
1086
+ 1 DL1-OL1
1087
+ 2 DL1-OL2
1088
+
1089
+ DL1-UL1
1090
+ DL1-UL2
1091
+
1092
+ DL1-DL1
1093
+ DL1-DD1
1094
+ DL1-DL2
1095
+ DL1-DD2
1096
+
1097
+ DL2
1098
+ DD2
1099
+
1100
+ DD2-UL1
1101
+ DD2-UL2
1102
+
1103
+ DD2-PARA
1104
+ EOS
1105
+
1106
+ actual = compile_block(src)
1107
+ assert_equal expected, actual
1108
+ end
1109
+
1110
+ def test_nest_multi
1111
+ src = <<-EOS
1112
+ 1. OL1
1113
+
1114
+ //beginchild
1115
+
1116
+ 1. OL1-OL1
1117
+
1118
+ //beginchild
1119
+
1120
+ * OL1-OL1-UL1
1121
+
1122
+ OL1-OL1-PARA
1123
+
1124
+ //endchild
1125
+
1126
+ 2. OL1-OL2
1127
+
1128
+ * OL1-UL1
1129
+
1130
+ //beginchild
1131
+
1132
+ : OL1-UL1-DL1
1133
+ OL1-UL1-DD1
1134
+
1135
+ OL1-UL1-PARA
1136
+
1137
+ //endchild
1138
+
1139
+ * OL1-UL2
1140
+
1141
+ //endchild
1142
+ EOS
1143
+ expected = <<-EOS
1144
+ 1 OL1
1145
+
1146
+ 1 OL1-OL1
1147
+
1148
+
1149
+ OL1-OL1-UL1
1150
+
1151
+ OL1-OL1-PARA
1152
+
1153
+ 2 OL1-OL2
1154
+
1155
+ OL1-UL1
1156
+
1157
+
1158
+ OL1-UL1-DL1
1159
+ OL1-UL1-DD1
1160
+
1161
+ OL1-UL1-PARA
1162
+
1163
+ OL1-UL2
1164
+
1165
+ EOS
1166
+
1167
+ actual = compile_block(src)
1168
+ assert_equal expected, actual
1169
+ end
755
1170
  end