review 4.2.0 → 5.0.0

Sign up to get free protection for your applications and to get access to all the features.
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