review 3.1.0 → 5.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (225) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby-win.yml +45 -0
  3. data/.github/workflows/ruby.yml +27 -0
  4. data/.rubocop.yml +161 -34
  5. data/.travis.yml +16 -15
  6. data/Dockerfile +21 -5
  7. data/NEWS.ja.md +394 -0
  8. data/NEWS.md +395 -1
  9. data/README.md +10 -7
  10. data/appveyor.yml +1 -3
  11. data/bin/review-catalog-converter +5 -5
  12. data/bin/review-check +10 -12
  13. data/bin/review-checkdep +2 -2
  14. data/bin/review-compile +17 -23
  15. data/bin/review-epubmaker +3 -35
  16. data/bin/review-idgxmlmaker +16 -0
  17. data/bin/review-index +2 -89
  18. data/bin/review-preproc +13 -13
  19. data/bin/review-validate +4 -4
  20. data/bin/review-vol +4 -78
  21. data/doc/config.yml.sample +47 -12
  22. data/doc/config.yml.sample-simple +3 -2
  23. data/doc/format.ja.md +120 -17
  24. data/doc/format.md +119 -27
  25. data/doc/makeindex.ja.md +2 -2
  26. data/doc/pdfmaker.ja.md +43 -1
  27. data/doc/pdfmaker.md +42 -1
  28. data/doc/quickstart.ja.md +45 -25
  29. data/doc/quickstart.md +37 -16
  30. data/lib/epubmaker/content.rb +3 -2
  31. data/lib/epubmaker/epubcommon.rb +34 -27
  32. data/lib/epubmaker/epubv2.rb +5 -6
  33. data/lib/epubmaker/epubv3.rb +21 -18
  34. data/lib/epubmaker/producer.rb +2 -1
  35. data/lib/review/book.rb +2 -2
  36. data/lib/review/book/base.rb +91 -96
  37. data/lib/review/book/bib.rb +21 -0
  38. data/lib/review/book/book_unit.rb +155 -0
  39. data/lib/review/book/chapter.rb +48 -29
  40. data/lib/review/book/index.rb +46 -240
  41. data/lib/review/book/index/item.rb +46 -0
  42. data/lib/review/book/page_metric.rb +7 -7
  43. data/lib/review/book/part.rb +45 -10
  44. data/lib/review/book/volume.rb +4 -5
  45. data/lib/review/builder.rb +172 -56
  46. data/lib/review/catalog.rb +14 -17
  47. data/lib/review/compiler.rb +219 -121
  48. data/lib/review/configure.rb +39 -7
  49. data/lib/review/converter.rb +1 -1
  50. data/lib/review/epub2html.rb +43 -5
  51. data/lib/review/epubmaker.rb +69 -27
  52. data/lib/review/extentions/string.rb +0 -4
  53. data/lib/review/htmlbuilder.rb +112 -101
  54. data/lib/review/htmlutils.rb +9 -13
  55. data/lib/review/i18n.rb +3 -3
  56. data/lib/review/idgxmlbuilder.rb +202 -78
  57. data/lib/review/idgxmlmaker.rb +186 -0
  58. data/lib/review/index_builder.rb +653 -0
  59. data/lib/review/init-web/finish.html +10 -0
  60. data/lib/review/init-web/index.html +190 -0
  61. data/lib/review/init-web/review-layout-design.js +691 -0
  62. data/lib/review/init.rb +129 -46
  63. data/lib/review/latexbuilder.rb +255 -92
  64. data/lib/review/lineinput.rb +1 -1
  65. data/lib/review/location.rb +32 -0
  66. data/lib/review/logger.rb +4 -8
  67. data/lib/review/makerhelper.rb +35 -5
  68. data/lib/review/markdownbuilder.rb +50 -38
  69. data/lib/review/md2inaobuilder.rb +3 -5
  70. data/lib/review/pdfmaker.rb +60 -57
  71. data/lib/review/plaintextbuilder.rb +154 -87
  72. data/lib/review/preprocessor.rb +20 -42
  73. data/lib/review/rstbuilder.rb +57 -38
  74. data/lib/review/sec_counter.rb +13 -0
  75. data/lib/review/textmaker.rb +23 -15
  76. data/lib/review/textutils.rb +76 -2
  77. data/lib/review/tocprinter.rb +230 -102
  78. data/lib/review/topbuilder.rb +139 -60
  79. data/lib/review/update.rb +24 -24
  80. data/lib/review/version.rb +1 -1
  81. data/lib/review/volumeprinter.rb +98 -0
  82. data/lib/review/webmaker.rb +20 -24
  83. data/lib/review/webtocprinter.rb +38 -35
  84. data/lib/review/yamlloader.rb +26 -16
  85. data/review.gemspec +6 -4
  86. data/samples/sample-book/README.md +7 -2
  87. data/samples/sample-book/src/.gitignore +154 -0
  88. data/samples/sample-book/src/config-ebook.yml +4 -0
  89. data/samples/sample-book/src/config-jlreq-ebook.yml +4 -0
  90. data/samples/sample-book/src/config-jlreq.yml +6 -0
  91. data/samples/sample-book/src/config.yml +2 -2
  92. data/samples/sample-book/src/lib/tasks/review.rake +29 -14
  93. data/samples/sample-book/src/lib/tasks/z01_copy_sty.rake +14 -8
  94. data/samples/syntax-book/Gemfile +1 -1
  95. data/samples/syntax-book/ch01.re +4 -2
  96. data/samples/syntax-book/ch02.re +8 -16
  97. data/samples/syntax-book/ch03.re +3 -6
  98. data/samples/syntax-book/config-jlreq-lualatex.yml +4 -0
  99. data/samples/syntax-book/config-jlreq.yml +5 -0
  100. data/samples/syntax-book/config-print.yml +3 -0
  101. data/samples/syntax-book/config.yml +1 -1
  102. data/samples/syntax-book/lib/tasks/review.rake +30 -15
  103. data/samples/syntax-book/lib/tasks/z01_copy_sty.rake +14 -8
  104. data/templates/latex/config.erb +39 -25
  105. data/templates/latex/layout.tex.erb +1 -0
  106. data/templates/latex/review-jlreq/README.md +3 -1
  107. data/templates/latex/review-jlreq/review-base.sty +161 -50
  108. data/templates/latex/review-jlreq/review-jlreq.cls +21 -22
  109. data/templates/latex/review-jlreq/review-style.sty +4 -1
  110. data/templates/latex/review-jsbook/README.md +46 -5
  111. data/templates/latex/review-jsbook/review-base.sty +123 -35
  112. data/templates/latex/review-jsbook/review-jsbook.cls +10 -4
  113. data/templates/latex/review-jsbook/review-style.sty +5 -2
  114. data/templates/opf/epubv3.opf.erb +1 -0
  115. data/templates/web/html/layout-html5.html.erb +3 -3
  116. data/test/assets/test_template.tex +19 -7
  117. data/test/assets/test_template_backmatter.tex +19 -7
  118. data/test/book_test_helper.rb +11 -5
  119. data/test/test_book.rb +124 -79
  120. data/test/test_book_chapter.rb +97 -54
  121. data/test/test_book_part.rb +3 -3
  122. data/test/test_builder.rb +38 -13
  123. data/test/test_catalog.rb +24 -42
  124. data/test/test_catalog_converter_cmd.rb +1 -1
  125. data/test/test_converter.rb +1 -0
  126. data/test/test_epub3maker.rb +2 -2
  127. data/test/test_epubmaker.rb +8 -0
  128. data/test/test_epubmaker_cmd.rb +14 -7
  129. data/test/test_helper.rb +18 -7
  130. data/test/test_htmlbuilder.rb +1491 -205
  131. data/test/test_htmlutils.rb +0 -12
  132. data/test/test_i18n.rb +37 -37
  133. data/test/test_idgxmlbuilder.rb +744 -42
  134. data/test/test_idgxmlmaker_cmd.rb +46 -0
  135. data/test/test_image_finder.rb +52 -70
  136. data/test/test_index.rb +94 -44
  137. data/test/test_indexbuilder.rb +52 -0
  138. data/test/test_latexbuilder.rb +1784 -161
  139. data/test/test_latexbuilder_v2.rb +671 -102
  140. data/test/test_logger.rb +17 -4
  141. data/test/test_makerhelper.rb +2 -14
  142. data/test/test_markdownbuilder.rb +137 -16
  143. data/test/test_md2inaobuilder.rb +32 -9
  144. data/test/test_pdfmaker.rb +30 -12
  145. data/test/test_pdfmaker_cmd.rb +100 -6
  146. data/test/test_plaintextbuilder.rb +791 -30
  147. data/test/test_preprocessor.rb +2 -16
  148. data/test/test_review_ext.rb +2 -1
  149. data/test/test_rstbuilder.rb +274 -27
  150. data/test/test_sec_counter.rb +156 -0
  151. data/test/test_textmaker_cmd.rb +54 -0
  152. data/test/test_textutils.rb +109 -2
  153. data/test/test_topbuilder.rb +724 -34
  154. data/test/test_update.rb +20 -11
  155. data/test/test_webtocprinter.rb +75 -43
  156. data/test/test_yamlloader.rb +13 -0
  157. data/vendor/gentombow/LICENSE +1 -1
  158. data/vendor/gentombow/Makefile +0 -1
  159. data/vendor/gentombow/bounddvi-en.pdf +0 -0
  160. data/vendor/gentombow/bounddvi-en.tex +1 -0
  161. data/vendor/gentombow/bounddvi.pdf +0 -0
  162. data/vendor/gentombow/bounddvi.sty +30 -7
  163. data/vendor/gentombow/bounddvi.tex +1 -0
  164. data/vendor/gentombow/create_archive.sh +1 -0
  165. data/vendor/gentombow/gentombow-ja.pdf +0 -0
  166. data/vendor/gentombow/gentombow-ja.tex +9 -0
  167. data/vendor/gentombow/gentombow.pdf +0 -0
  168. data/vendor/gentombow/gentombow.sty +32 -10
  169. data/vendor/gentombow/gentombow.tex +8 -0
  170. data/vendor/gentombow/tests/gentombow-01-pdfx.tex +8 -0
  171. data/vendor/gentombow/tests/gentombow-02-pdfx.tex +8 -0
  172. data/vendor/jsclasses/LICENSE +1 -1
  173. data/vendor/jsclasses/Makefile +3 -2
  174. data/vendor/jsclasses/create_archive.sh +5 -5
  175. data/vendor/jsclasses/jis/Makefile +3 -2
  176. data/vendor/jsclasses/jis/jsarticle.cls +74 -31
  177. data/vendor/jsclasses/jis/jsbook.cls +74 -31
  178. data/vendor/jsclasses/jis/jsclasses.dtx +176 -36
  179. data/vendor/jsclasses/jis/jsclasses.ins +15 -5
  180. data/vendor/jsclasses/jis/jslogo.dtx +4 -4
  181. data/vendor/jsclasses/jis/jslogo.ins +9 -0
  182. data/vendor/jsclasses/jis/jslogo.sty +4 -16
  183. data/vendor/jsclasses/jis/jspf.cls +73 -30
  184. data/vendor/jsclasses/jis/jsreport.cls +74 -31
  185. data/vendor/jsclasses/jis/jsverb.ins +9 -0
  186. data/vendor/jsclasses/jis/jsverb.sty +1 -13
  187. data/vendor/jsclasses/jis/kiyou.cls +74 -31
  188. data/vendor/jsclasses/jis/minijs.sty +65 -22
  189. data/vendor/jsclasses/jis/okumacro.dtx +4 -5
  190. data/vendor/jsclasses/jis/okumacro.ins +9 -0
  191. data/vendor/jsclasses/jis/okumacro.sty +4 -17
  192. data/vendor/jsclasses/jis/okuverb.ins +9 -0
  193. data/vendor/jsclasses/jis/okuverb.sty +1 -13
  194. data/vendor/jsclasses/jis/winjis.sty +23 -19
  195. data/vendor/jsclasses/jsarticle.cls +74 -31
  196. data/vendor/jsclasses/jsbook.cls +74 -31
  197. data/vendor/jsclasses/jsclasses.dtx +176 -36
  198. data/vendor/jsclasses/jsclasses.ins +15 -5
  199. data/vendor/jsclasses/jsclasses.pdf +0 -0
  200. data/vendor/jsclasses/jslogo.dtx +4 -4
  201. data/vendor/jsclasses/jslogo.ins +9 -0
  202. data/vendor/jsclasses/jslogo.pdf +0 -0
  203. data/vendor/jsclasses/jslogo.sty +4 -16
  204. data/vendor/jsclasses/jspf.cls +73 -30
  205. data/vendor/jsclasses/jsreport.cls +74 -31
  206. data/vendor/jsclasses/jsverb.ins +9 -0
  207. data/vendor/jsclasses/jsverb.pdf +0 -0
  208. data/vendor/jsclasses/jsverb.sty +1 -13
  209. data/vendor/jsclasses/kiyou.cls +74 -31
  210. data/vendor/jsclasses/minijs.sty +68 -22
  211. data/vendor/jsclasses/okumacro.dtx +4 -5
  212. data/vendor/jsclasses/okumacro.ins +9 -0
  213. data/vendor/jsclasses/okumacro.pdf +0 -0
  214. data/vendor/jsclasses/okumacro.sty +4 -17
  215. data/vendor/jsclasses/okuverb.ins +9 -0
  216. data/vendor/jsclasses/okuverb.pdf +0 -0
  217. data/vendor/jsclasses/okuverb.sty +1 -13
  218. data/vendor/jsclasses/tests/relfont.tex +10 -0
  219. data/vendor/jsclasses/winjis.sty +23 -19
  220. metadata +65 -12
  221. data/.rubocop_todo.yml +0 -7
  222. data/lib/review/book/compilable.rb +0 -173
  223. data/lib/review/tocparser.rb +0 -271
  224. data/samples/syntax-book/review-ext.rb +0 -14
  225. data/test/test_tocparser.rb +0 -25
@@ -14,7 +14,7 @@ class UpdateTest < Test::Unit::TestCase
14
14
  end
15
15
 
16
16
  def teardown
17
- FileUtils.rm_rf @tmpdir
17
+ FileUtils.rm_rf(@tmpdir)
18
18
  end
19
19
 
20
20
  def test_broken_yml
@@ -64,7 +64,7 @@ EOT
64
64
  io = StringIO.new
65
65
  @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
66
66
  assert_raise(ApplicationError) { @u.check_old_catalogs(@tmpdir) }
67
- assert_match(/review\-catalog\-converter/, io.string)
67
+ assert_match(/review-catalog-converter/, io.string)
68
68
 
69
69
  File.unlink(File.join(@tmpdir, fname))
70
70
  end
@@ -86,7 +86,7 @@ EOT
86
86
  io = StringIO.new
87
87
  @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
88
88
  @u.check_own_files(@tmpdir)
89
- assert_match(/There is review\-ext\.rb file/, io.string)
89
+ assert_match(/There is review-ext\.rb file/, io.string)
90
90
  end
91
91
 
92
92
  def test_update_version_older
@@ -96,19 +96,28 @@ EOT
96
96
  @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
97
97
  @u.parse_ymls(@tmpdir)
98
98
  @u.update_version
99
- assert_match(/Update 'review_version' to '3.0'/, io.string)
100
- assert_equal 'review_version: 3.0', File.read(File.join(@tmpdir, 'config.yml')).match(/review_version:.*$/).to_s
99
+ assert_match(/Update 'review_version' to '5.0'/, io.string)
100
+ assert_equal 'review_version: 5.0', File.read(File.join(@tmpdir, 'config.yml')).match(/review_version:.*$/).to_s
101
+
102
+ File.write(File.join(@tmpdir, 'config.yml'), "review_version: 3.0\n")
103
+
104
+ io = StringIO.new
105
+ @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
106
+ @u.parse_ymls(@tmpdir)
107
+ @u.update_version
108
+ assert_match(/Update 'review_version' to '5.0'/, io.string)
109
+ assert_equal 'review_version: 5.0', File.read(File.join(@tmpdir, 'config.yml')).match(/review_version:.*$/).to_s
101
110
  end
102
111
 
103
112
  def test_update_version_current
104
- File.write(File.join(@tmpdir, 'config.yml'), "review_version: 3.0\n")
113
+ File.write(File.join(@tmpdir, 'config.yml'), "review_version: 5.0\n")
105
114
 
106
115
  io = StringIO.new
107
116
  @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
108
117
  @u.parse_ymls(@tmpdir)
109
118
  @u.update_version
110
119
  assert_equal '', io.string
111
- assert_equal 'review_version: 3.0', File.read(File.join(@tmpdir, 'config.yml')).match(/review_version:.*$/).to_s
120
+ assert_equal 'review_version: 5.0', File.read(File.join(@tmpdir, 'config.yml')).match(/review_version:.*$/).to_s
112
121
  end
113
122
 
114
123
  def test_update_version_newer
@@ -118,7 +127,7 @@ EOT
118
127
  @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
119
128
  @u.parse_ymls(@tmpdir)
120
129
  @u.update_version
121
- assert_match(/Update 'review_version' to '3.0'/, io.string)
130
+ assert_match(/Update 'review_version' to '5.0'/, io.string)
122
131
  assert_equal 'review_version: 99.0', File.read(File.join(@tmpdir, 'config.yml')).match(/review_version:.*$/).to_s
123
132
  end
124
133
 
@@ -143,7 +152,7 @@ EOT
143
152
 
144
153
  def test_update_rakefile_different
145
154
  File.write(File.join(@tmpdir, 'Rakefile'), '')
146
- FileUtils.mkdir_p File.join(@tmpdir, 'lib/tasks')
155
+ FileUtils.mkdir_p(File.join(@tmpdir, 'lib/tasks'))
147
156
  File.write(File.join(@tmpdir, 'lib/tasks/review.rake'), '')
148
157
  io = StringIO.new
149
158
  @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
@@ -376,7 +385,7 @@ EOT
376
385
 
377
386
  File.write(File.join(@tmpdir, 'sty/review-base.sty'), "% MODIFIED\n")
378
387
  @u.update_tex_stys('review-jsbook', @tmpdir)
379
- assert_match(/review\-base\.sty will be overridden/, io.string)
388
+ assert_match(/review-base\.sty will be overridden/, io.string)
380
389
  assert_equal cont, File.read(File.join(@tmpdir, 'sty/review-base.sty'))
381
390
  end
382
391
 
@@ -389,7 +398,7 @@ EOT
389
398
  assert_match(/has options/, io.string)
390
399
  cont = <<EOT
391
400
  texcommand: "/Program Files/up-latex"
392
- texoptions: "-interaction=nonstopmode -file-line-error --shell-escape -v"
401
+ texoptions: "-interaction=nonstopmode -file-line-error -halt-on-error --shell-escape -v"
393
402
  EOT
394
403
  assert_equal cont, File.read(File.join(@tmpdir, 'config.yml'))
395
404
  end
@@ -11,7 +11,7 @@ class WEBTOCPrinterTest < Test::Unit::TestCase
11
11
  end
12
12
 
13
13
  def test_webtocprinter_null
14
- dummy_book = ReVIEW::Book::Base.load
14
+ dummy_book = ReVIEW::Book::Base.new
15
15
  # chap = ReVIEW::Book::Chapter.new(dummy_book, 1, '-', nil, StringIO.new)
16
16
  str = WEBTOCPrinter.book_to_string(dummy_book)
17
17
  expect = <<-EOB
@@ -28,15 +28,15 @@ CHAPS:
28
28
  - ch1.re
29
29
  - ch2.re
30
30
  EOB
31
- mktmpbookdir 'catalog.yml' => catalog_yml,
31
+ mktmpbookdir('catalog.yml' => catalog_yml,
32
32
  'ch1.re' => "= ch. 1\n\n111\n",
33
- 'ch2.re' => "= ch. 2\n\n222\n" do |_dir, book, _files|
33
+ 'ch2.re' => "= ch. 2\n\n222\n") do |_dir, book, _files|
34
34
  str = WEBTOCPrinter.book_to_string(book)
35
35
  expect = <<-EOB
36
36
  <ul class="book-toc">
37
37
  <li><a href="index.html">TOP</a></li>
38
- <li><a href="ch1.html">1 ch. 1</a></li>
39
- <li><a href="ch2.html">2 ch. 2</a></li>
38
+ <li><a href="ch1.html">第1章 ch. 1</a></li>
39
+ <li><a href="ch2.html">第2章 ch. 2</a></li>
40
40
  </ul>
41
41
  EOB
42
42
  assert_equal expect, str
@@ -51,23 +51,19 @@ CHAPS:
51
51
  - part2:
52
52
  - ch2.re
53
53
  EOB
54
- mktmpbookdir 'catalog.yml' => catalog_yml,
54
+ mktmpbookdir('catalog.yml' => catalog_yml,
55
55
  'ch1.re' => "= ch. 1\n\n111\n",
56
- 'ch2.re' => "= ch. 2\n\n222\n" do |_dir, book, _files|
56
+ 'ch2.re' => "= ch. 2\n\n222\n") do |_dir, book, _files|
57
57
  str = WEBTOCPrinter.book_to_string(book)
58
58
  expect = <<-EOB
59
59
  <ul class="book-toc">
60
60
  <li><a href="index.html">TOP</a></li>
61
- <li>I part1
62
- <ul>
63
- <li><a href="ch1.html">1 ch. 1</a></li>
64
- </ul>
65
- </li>
66
- <li>II part2
67
- <ul>
68
- <li><a href="ch2.html">2 ch. 2</a></li>
69
- </ul>
70
- </li>
61
+ <li>第I部 part1
62
+ <ul><li><a href="ch1.html">第1章 ch. 1</a></li>
63
+ </ul></li>
64
+ <li>第II部 part2
65
+ <ul><li><a href="ch2.html">第2章 ch. 2</a></li>
66
+ </ul></li>
71
67
  </ul>
72
68
  EOB
73
69
  assert_equal expect, str
@@ -82,25 +78,21 @@ CHAPS:
82
78
  - p2.re:
83
79
  - ch2.re
84
80
  EOB
85
- mktmpbookdir 'catalog.yml' => catalog_yml,
81
+ mktmpbookdir('catalog.yml' => catalog_yml,
86
82
  'p1.re' => "= This is PART1\n\np111\n",
87
83
  'p2.re' => "= This is PART2\n\np111\n",
88
84
  'ch1.re' => "= ch. 1\n\n111\n",
89
- 'ch2.re' => "= ch. 2\n\n222\n" do |_dir, book, _files|
85
+ 'ch2.re' => "= ch. 2\n\n222\n") do |_dir, book, _files|
90
86
  str = WEBTOCPrinter.book_to_string(book)
91
87
  expect = <<-EOB
92
88
  <ul class="book-toc">
93
89
  <li><a href="index.html">TOP</a></li>
94
- <li><a href="p1.html">I This is PART1</a>
95
- <ul>
96
- <li><a href="ch1.html">1 ch. 1</a></li>
97
- </ul>
98
- </li>
99
- <li><a href="p2.html">II This is PART2</a>
100
- <ul>
101
- <li><a href="ch2.html">2 ch. 2</a></li>
102
- </ul>
103
- </li>
90
+ <li><a href="p1.html">第I部 This is PART1</a>
91
+ <ul><li><a href="ch1.html">第1章 ch. 1</a></li>
92
+ </ul></li>
93
+ <li><a href="p2.html">第II部 This is PART2</a>
94
+ <ul><li><a href="ch2.html">第2章 ch. 2</a></li>
95
+ </ul></li>
104
96
  </ul>
105
97
  EOB
106
98
  assert_equal expect, str
@@ -124,7 +116,7 @@ POSTDEF:
124
116
  - post1.re
125
117
  - post2.re
126
118
  EOB
127
- mktmpbookdir 'catalog.yml' => catalog_yml,
119
+ mktmpbookdir('catalog.yml' => catalog_yml,
128
120
  'pre1.re' => "= PRE1\n\npre111\n",
129
121
  'pre2.re' => "= PRE2\n\npre222\n",
130
122
  'app1.re' => "= APP1\n\napp111\n",
@@ -134,28 +126,68 @@ EOB
134
126
  'post1.re' => "= POST1\n\npo111\n",
135
127
  'post2.re' => "= POST2\n\npo222\n",
136
128
  'ch1.re' => "= ch. 1\n\n111\n",
137
- 'ch2.re' => "= ch. 2\n\n222\n" do |_dir, book, _files|
129
+ 'ch2.re' => "= ch. 2\n\n222\n") do |_dir, book, _files|
138
130
  str = WEBTOCPrinter.book_to_string(book)
139
131
  expect = <<-EOB
140
132
  <ul class="book-toc">
141
133
  <li><a href="index.html">TOP</a></li>
142
134
  <li><a href="pre1.html">PRE1</a></li>
143
135
  <li><a href="pre2.html">PRE2</a></li>
144
- <li><a href="part1.html">I PART1</a>
145
- <ul>
146
- <li><a href="ch1.html">1 ch. 1</a></li>
147
- </ul>
148
- </li>
149
- <li><a href="part2.html">II PART2</a>
150
- <ul>
151
- <li><a href="ch2.html">2 ch. 2</a></li>
152
- </ul>
153
- </li>
154
- <li><a href="app1.html">APP1</a></li>
155
- <li><a href="app2.html">APP2</a></li>
136
+ <li><a href="part1.html">第I部 PART1</a>
137
+ <ul><li><a href="ch1.html">第1章 ch. 1</a></li>
138
+ </ul></li>
139
+ <li><a href="part2.html">第II部 PART2</a>
140
+ <ul><li><a href="ch2.html">第2章 ch. 2</a></li>
141
+ </ul></li>
142
+ <li><a href="app1.html">付録A APP1</a></li>
143
+ <li><a href="app2.html">付録B APP2</a></li>
156
144
  <li><a href="post1.html">POST1</a></li>
157
145
  <li><a href="post2.html">POST2</a></li>
158
146
  </ul>
147
+ EOB
148
+ assert_equal expect, str
149
+ end
150
+ end
151
+
152
+ def test_webtocprinter_nochapter
153
+ catalog_yml = <<-EOB
154
+ CHAPS:
155
+ EOB
156
+ mktmpbookdir('catalog.yml' => catalog_yml) do |_dir, book, _files|
157
+ str = WEBTOCPrinter.book_to_string(book)
158
+ expect = <<-EOB
159
+ <ul class="book-toc">
160
+ <li><a href="index.html">TOP</a></li>
161
+ </ul>
162
+ EOB
163
+ assert_equal expect, str
164
+ end
165
+ end
166
+
167
+ def test_webtocprinter_noheadline
168
+ catalog_yml = <<-EOB
169
+ CHAPS:
170
+ - ch1.re
171
+ - ch2.re
172
+ - ch3.re
173
+ - ch4.re
174
+ EOB
175
+ mktmpbookdir('catalog.yml' => catalog_yml,
176
+ 'ch1.re' => "A\n",
177
+ 'ch2.re' => "B\n\n= C\n== D\n",
178
+ 'ch3.re' => "//emlist{\nLIST\n//}\n",
179
+ 'ch4.re' => "==[column] E\n\n= F") do |_dir, book, _files|
180
+ str = WEBTOCPrinter.book_to_string(book)
181
+ expect = <<-EOB
182
+ <ul class="book-toc">
183
+ <li><a href="index.html">TOP</a></li>
184
+ <li><a href="ch1.html">-</a></li>
185
+ <li><a href="ch2.html">-</a></li>
186
+ <li><a href="ch2.html">第2章 C</a></li>
187
+ <li><a href="ch3.html">-</a></li>
188
+ <li><a href="ch4.html">-</a></li>
189
+ <li><a href="ch4.html">第4章 F</a></li>
190
+ </ul>
159
191
  EOB
160
192
  assert_equal expect, str
161
193
  end
@@ -184,4 +184,17 @@ EOB
184
184
  yaml)
185
185
  end
186
186
  end
187
+
188
+ def test_empty_file
189
+ Dir.mktmpdir do |dir|
190
+ yaml_file = File.join(dir, 'test.yml')
191
+ File.open(yaml_file, 'w') do |f|
192
+ f.write <<EOB
193
+ #
194
+ EOB
195
+ end
196
+ e = assert_raise(RuntimeError) { @loader.load_file(yaml_file) }
197
+ assert_match('test.yml is malformed.', e.message)
198
+ end
199
+ end
187
200
  end
@@ -1,4 +1,4 @@
1
- Copyright (c) 2016-2018 Hironobu Yamashita
1
+ Copyright (c) 2016-2020 Hironobu Yamashita
2
2
  All rights reserved.
3
3
 
4
4
  Redistribution and use in source and binary forms, with or without
@@ -25,7 +25,6 @@ gentombow.pdf: gentombow.tex
25
25
  .PHONY: install clean
26
26
  install:
27
27
  mkdir -p ${TEXMF}/doc/latex/gentombow
28
- cp ./Makefile ${TEXMF}/doc/latex/gentombow/
29
28
  cp ./LICENSE ${TEXMF}/doc/latex/gentombow/
30
29
  cp ./README.md ${TEXMF}/doc/latex/gentombow/
31
30
  cp ./*.pdf ${TEXMF}/doc/latex/gentombow/
@@ -130,6 +130,7 @@ using \textsf{bounddvi} package.
130
130
  \item 2016/10/25 v7.1 (HY) Support for p\LaTeXe\ tombow option,
131
131
  compatibility with \textsf{graphics}/\textsf{color} packages
132
132
  \item 2016/12/28 v7.2 (HY) Documentation for the new \texttt{dvips} behavior
133
+ \item 2020/09/25 v8.0 (HY) Support for \LaTeXe/p\LaTeXe~2020-10-01
133
134
  \end{itemize}
134
135
 
135
136
  \end{document}
@@ -1,7 +1,7 @@
1
1
  %
2
2
  % bounddvi.sty
3
- % 2016/12/28 v7.2-v7.0 h.y.acetaminophen@gmail.com
4
- % 2004/12/15 v6.0-v1.0 inoue@ma.ns.tcu.ac.jp
3
+ % 2020/09/25 v8.0-v7.0 h.y.acetaminophen [at] gmail.com
4
+ % 2004/12/15 v6.0-v1.0 inoue [at] ma.ns.tcu.ac.jp
5
5
  %
6
6
  % This package, originally written by Koichi Inoue
7
7
  % and modified by Hironobu Yamashita, is distributed
@@ -10,7 +10,7 @@
10
10
  %
11
11
 
12
12
  \NeedsTeXFormat{LaTeX2e}
13
- \ProvidesPackage{bounddvi}[2016/12/28 v7.2 bounddvi]
13
+ \ProvidesPackage{bounddvi}[2020/09/25 v8.0 bounddvi]
14
14
 
15
15
  % catcode trick to hide \iftombow ... \else ... \fi
16
16
  % since \iftombow is defined only in pLaTeX.
@@ -50,6 +50,33 @@ Q \fi
50
50
  % reset catcode trick
51
51
  \catcode`\Q=11\relax
52
52
 
53
+ %% Since LaTeX2e 2020-10-01, \@begindocumenthook is deprecated
54
+ %% and \UseHook{begindocument} etc. are used.
55
+ %% This code appends papersize special to the _end_ of the hook.
56
+ %% (Note: support for old dvips is removed.)
57
+ \ifx\AddToHook\@undefined\else
58
+ \AtBeginDocument{\AtBeginDvi{%
59
+ \begingroup
60
+ % if \stockwidth/\stockheight are defined & have effective
61
+ % values, copy them to \paperwidth/\paperheight
62
+ % for current group
63
+ \ifx\stockwidth\@undefined\else \ifdim\stockwidth>\z@
64
+ \paperwidth\stockwidth
65
+ \fi\fi
66
+ \ifx\stockheight\@undefined\else \ifdim\stockheight>\z@
67
+ \paperheight\stockheight
68
+ \fi\fi
69
+ % adjust for \mag and emit papersize special
70
+ \divide\paperwidth\@m\multiply\paperwidth\mag
71
+ \divide\paperheight\@m\multiply\paperheight\mag
72
+ \special{papersize=\the\paperwidth,\the\paperheight}%
73
+ \endgroup}}
74
+ \expandafter\endinput
75
+ \fi
76
+
77
+ %% The rest of this package is meant for
78
+ %% LaTeX2e 2020-02-02 PL5 or older.
79
+
53
80
  % following code is almost equivalent to
54
81
  % \AtBeginDocument{\AtBeginDvi{...}}
55
82
  % however, we append the specification to the _beginning_ of
@@ -59,16 +86,12 @@ Q \fi
59
86
  \def\@prependto@begindocumenthook{\global\setbox\@begindvibox
60
87
  \vbox{\csname yoko\endcsname\unvbox\@begindvibox
61
88
  \begingroup
62
- % if \stockwidth/\stockheight are defined & have effective
63
- % values, copy them to \paperwidth/\paperheight
64
- % for current group
65
89
  \ifx\stockwidth\@undefined\else \ifdim\stockwidth>\z@
66
90
  \paperwidth\stockwidth
67
91
  \fi\fi
68
92
  \ifx\stockheight\@undefined\else \ifdim\stockheight>\z@
69
93
  \paperheight\stockheight
70
94
  \fi\fi
71
- % adjust for \mag and emit papersize special
72
95
  \divide\paperwidth\@m\multiply\paperwidth\mag
73
96
  \divide\paperheight\@m\multiply\paperheight\mag
74
97
  \special{papersize=\the\paperwidth,\the\paperheight}%
@@ -143,6 +143,7 @@ DVIファイルは用紙サイズ情報を含みませんが、PostScriptやPDF
143
143
  \item 2016/10/25 v7.1 (HY) p\LaTeXe{}のトンボサポート、
144
144
  2016年の新しい\textsf{graphics}/\textsf{color}に対応
145
145
  \item 2016/12/28 v7.2 (HY) 新仕様の\texttt{dvips}をドキュメント化
146
+ \item 2020/09/25 v8.0 (HY) \LaTeXe/p\LaTeXe~2020-10-01(予定)への対応
146
147
  \end{itemize}
147
148
 
148
149
  \end{document}
@@ -14,6 +14,7 @@ echo " * Create $PROJECT.zip ($RELEASEDATE)"
14
14
  git archive --format=tar --prefix=$PROJECT/ HEAD | (cd $TMP && tar xf -)
15
15
  rm $TMP/$PROJECT/.gitignore
16
16
  rm $TMP/$PROJECT/create_archive.sh
17
+ rm $TMP/$PROJECT/Makefile
17
18
  rm -rf $TMP/$PROJECT/tests
18
19
  perl -pi.bak -e "s/\\\$RELEASEDATE/$RELEASEDATE/g" $TMP/$PROJECT/README.md
19
20
  rm -f $TMP/$PROJECT/README.md.bak
@@ -291,6 +291,9 @@ CMYKの版ごとにトンボを作成する場合や、特色のトンボが必
291
291
  \item \verb+/BleedBox+: 裁ち落とし領域を含んだサイズ。
292
292
  \item \verb+/CropBox+, \verb+/ArtBox+: 明示しない。
293
293
  \end{itemize}
294
+ 注意:\textsf{pdfx}パッケージがPDF/Xモードで読み込まれていれば、
295
+ このオプション機能は自動的に有効化されます。
296
+ また、\verb+/CropBox+も明示します。
294
297
 
295
298
  \section{その他の注意点}
296
299
 
@@ -390,6 +393,11 @@ $30\,\mathrm{mm}$にしたいとき\footnote{ここでは「本文の領域以
390
393
  \end{verbatim}
391
394
  \end{dangerous}
392
395
 
396
+ なお、\textsf{geometry}パッケージは用紙サイズ
397
+ (\verb+\paperwidth+, \verb+\paperheight+)を変更する場合もあります。
398
+ こうした場合に備え、\textsf{gentombow}パッケージは
399
+ \textsf{geometry}パッケージよりも後に読み込むようにしてください。
400
+
393
401
  \section*{雑記}
394
402
 
395
403
  発端はこの話です。
@@ -444,6 +452,7 @@ $30\,\mathrm{mm}$にしたいとき\footnote{ここでは「本文の領域以
444
452
  \verb+pdfbox+オプションが正常動作するように改良、
445
453
  \verb+\settombowbleed+が\verb+/TrimBox+に反映されな
446
454
  かったバグの修正
455
+ \item 2019/07/21 v0.9k \textsf{pdfx}パッケージとの整合性をとる改良
447
456
  \end{itemize}
448
457
 
449
458
  \end{document}
@@ -8,7 +8,7 @@
8
8
 
9
9
  \NeedsTeXFormat{LaTeX2e}
10
10
  \ProvidesPackage{gentombow}
11
- [2018/08/30 v0.9j Generate crop mark 'tombow']
11
+ [2019/07/21 v0.9k Generate crop mark 'tombow']
12
12
  \def\pxgtmb@pkgname{gentombow}
13
13
  \@namedef{ver@pxgentombow.sty}{}% fake
14
14
 
@@ -290,6 +290,7 @@
290
290
  %% prepare flag
291
291
  \newif\ifpxgtmb@switch \pxgtmb@switchfalse
292
292
  \newif\ifpxgtmb@landscape \pxgtmb@landscapefalse
293
+ \newif\ifpxgtmb@pdfx@x \pxgtmb@pdfx@xfalse
293
294
 
294
295
  %% passed from class options
295
296
  %% should be declared first inside this package (least priority)
@@ -507,7 +508,7 @@
507
508
  %% pdf "digital tombo" (driver-dependent)
508
509
  % the box size calculation is delayed until \AtBeginDocument
509
510
  % to allow users to change \@tombowbleed in the preamble
510
- \if 1\pxgtmb@pdfbox@status
511
+
511
512
  % convert pt -> bp
512
513
  \def\pxgtmb@PDF@setbp#1#2{%
513
514
  \@tempdima=.996264#2\relax % 0.996264 = 72/72.27 (cf. 1in = 72.27pt = 72bp)
@@ -521,8 +522,8 @@
521
522
  \def\pxgtmb@magscale{1}%
522
523
  \fi
523
524
  % set pdf boxes in bp unit
524
- %\pxgtmb@PDF@setbp\pxgtmb@PDF@crop@ur@x\stockwidth
525
- %\pxgtmb@PDF@setbp\pxgtmb@PDF@crop@ur@y\stockheight
525
+ \pxgtmb@PDF@setbp\pxgtmb@PDF@crop@ur@x\stockwidth
526
+ \pxgtmb@PDF@setbp\pxgtmb@PDF@crop@ur@y\stockheight
526
527
  \pxgtmb@PDF@setbp\pxgtmb@PDF@trim@ll@x{\dimexpr(\stockwidth-\paperwidth)/2}%
527
528
  \pxgtmb@PDF@setbp\pxgtmb@PDF@trim@ll@y{\dimexpr(\stockheight-\paperheight)/2}%
528
529
  \pxgtmb@PDF@setbp\pxgtmb@PDF@trim@ur@x{\dimexpr(\stockwidth+\paperwidth)/2}%
@@ -532,8 +533,14 @@
532
533
  \pxgtmb@PDF@setbp\pxgtmb@PDF@bleed@ur@x{\dimexpr(\stockwidth+\paperwidth)/2+\@tombowbleed}%
533
534
  \pxgtmb@PDF@setbp\pxgtmb@PDF@bleed@ur@y{\dimexpr(\stockheight+\paperheight)/2+\@tombowbleed}%
534
535
  \xdef\pxgtmb@PDF@CTM{%
535
- %% CropBox: implicit (same as MediaBox, large paper size)
536
- %/CropBox [0 0 \pxgtmb@PDF@crop@ur@x\space \pxgtmb@PDF@crop@ur@y]
536
+ %% CropBox: normally implicit (same as MediaBox, large paper size)
537
+ %% however, pdfx.sty in PDF/X mode sets /CropBox explicitly, so I need to override it!
538
+ \ifpxgtmb@pdfx@x
539
+ \noexpand\pxgtmb@PDF@begin
540
+ /CropBox [0 0
541
+ \pxgtmb@PDF@crop@ur@x\space
542
+ \pxgtmb@PDF@crop@ur@y] \noexpand\pxgtmb@PDF@end
543
+ \fi
537
544
  %% BleedBox: explicit (final paper size + surrounding \@tombowbleed)
538
545
  \noexpand\pxgtmb@PDF@begin
539
546
  /BleedBox [\pxgtmb@PDF@bleed@ll@x\space
@@ -547,9 +554,20 @@
547
554
  \pxgtmb@PDF@trim@ur@x\space
548
555
  \pxgtmb@PDF@trim@ur@y] \noexpand\pxgtmb@PDF@end
549
556
  %% ArtBox: implicit
557
+ %% [Note] PDF/X requires /TrimBox or /ArtBox but not both!
550
558
  }%
551
559
  \endgroup
552
560
  }
561
+
562
+ % do it
563
+ \AtBeginDocument{\pxgtmb@PDF@emit}
564
+ \def\pxgtmb@PDF@emit{%
565
+ % handle compatibility with pdfx.sty here;
566
+ % if pdfx.sty with PDF/X mode detected, force [pdfbox] option!
567
+ \pxgtmb@handle@pdfx
568
+ \ifpxgtmb@pdfx@x\def\pxgtmb@pdfbox@status{1}\fi
569
+ % start actual procedure for [pdfbox] option
570
+ \if 1\pxgtmb@pdfbox@status
553
571
  %% supported drivers: dvips, dvipdfmx, XeTeX, pdfTeX, LuaTeX
554
572
  \ifnum0\ifx\pdfvariable\@undefined\else\the\outputmode\fi=0\relax
555
573
  \ifnum0\ifx\pdfpageattr\@undefined\else\the\pdfoutput\fi=0\relax
@@ -666,8 +684,7 @@
666
684
  \def\pxgtmb@PDF@begin{}\def\pxgtmb@PDF@end{}%
667
685
  \edef\pxgtmb@PDF@CTM{{\pxgtmb@PDF@CTM}}%
668
686
  \expandafter\pdfpageattr\pxgtmb@PDF@CTM}
669
- \fi
670
- \else
687
+ \fi\else
671
688
  %% for LuaTeX
672
689
  \def\pxgtmb@driver{l}
673
690
  % force paper size
@@ -679,7 +696,8 @@
679
696
  \edef\pxgtmb@PDF@CTM{pageattr{\pxgtmb@PDF@CTM}}%
680
697
  \expandafter\pdfvariable\pxgtmb@PDF@CTM}
681
698
  \fi
682
- \fi
699
+ \fi
700
+ }
683
701
 
684
702
  %% make visible tombow box according to the current status of
685
703
  %% \@bannerfont, \@bannertoken, \@tombowwidth & \@tombowbleed
@@ -713,7 +731,7 @@
713
731
  % because pdf boxes are calculated only inside \AtBeginDocument
714
732
  \@onlypreamble\settombowbleed
715
733
 
716
- %% patch internal for pdfpages to work with tombow
734
+ %% patch internal of pdfpages.sty to work with tombow
717
735
  %% (tested on pdfpages 2017/10/31 v0.5l)
718
736
  %% Note the code is the same as that of pxpdfpages.sty,
719
737
  %% but reserved here since gentombow.sty can be used on
@@ -744,4 +762,8 @@
744
762
  %% do it
745
763
  \AtBeginDocument{\@ifpackageloaded{pdfpages}{\pxgtmb@patch@pdfpages}{}}
746
764
 
765
+ %% patch pdfx.sty
766
+ %% (tested on pdfx 2019/02/27 v1.6.3)
767
+ \def\pxgtmb@handle@pdfx{\@ifpackageloaded{pdfx}{\let\ifpxgtmb@pdfx@x\ifpdfx@x}{}}
768
+
747
769
  \endinput