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
@@ -13,13 +13,19 @@ module BookTestHelper
13
13
  Dir.mktmpdir do |tmpdir|
14
14
  Dir.chdir(tmpdir) do
15
15
  dir = '.'
16
- files.each_pair do |basename, content|
17
- path = File.join(dir, basename)
16
+ files.each_pair do |filename, content|
17
+ path = File.join(dir, filename)
18
+ FileUtils.mkdir_p(File.dirname(path))
18
19
  File.open(path, 'w') { |o| o.print content }
19
- created_files[basename] = path
20
+ created_files[filename] = path
20
21
  end
21
- book = Book::Base.load(dir)
22
- book.config = ReVIEW::Configure.values
22
+ conf_path = File.expand_path('config.yml', dir)
23
+ if File.exist?(conf_path)
24
+ config = ReVIEW::Configure.create(yamlfile: conf_path)
25
+ else
26
+ config = ReVIEW::Configure.values
27
+ end
28
+ book = Book::Base.new(dir, config: config)
23
29
  yield(dir, book, created_files)
24
30
  end
25
31
  end
@@ -1,8 +1,16 @@
1
1
  require 'book_test_helper'
2
+ require 'fileutils'
2
3
 
3
4
  class BookTest < Test::Unit::TestCase
4
5
  include BookTestHelper
5
6
 
7
+ def setup
8
+ if ENV['GITHUB_WORKSPACE']
9
+ ENV['TMPDIR'] = File.join(ENV['GITHUB_WORKSPACE'], 'tmp_review')
10
+ FileUtils.mkdir_p(ENV['TMPDIR'])
11
+ end
12
+ end
13
+
6
14
  def assert_same_path(expected, result, *options)
7
15
  require 'pathname'
8
16
  ex_path = Pathname(expected).realpath
@@ -15,8 +23,8 @@ class BookTest < Test::Unit::TestCase
15
23
  test_const = "ReVIEW__BOOK__TEST__#{num}"
16
24
  begin
17
25
  Dir.mktmpdir do |dir|
18
- File.open(File.join(dir, 'review-ext.rb'), 'w') { |o| o.puts "#{test_const} = #{num}" }
19
- Book::Base.load(dir)
26
+ File.write(File.join(dir, 'review-ext.rb'), "#{test_const} = #{num}")
27
+ Book::Base.new(dir)
20
28
  assert_equal num, (Object.class_eval { const_get(test_const) })
21
29
  end
22
30
  ensure
@@ -32,7 +40,7 @@ class BookTest < Test::Unit::TestCase
32
40
  def test_read_chaps
33
41
  Dir.mktmpdir do |dir|
34
42
  book = Book::Base.new(dir)
35
- assert_equal '', book.read_chaps
43
+ assert_equal [], book.read_chaps
36
44
 
37
45
  chaps_path = File.join(dir, 'CHAPS')
38
46
  re1_path = File.join(dir, "123#{book.ext}")
@@ -42,16 +50,16 @@ class BookTest < Test::Unit::TestCase
42
50
  File.open(re1_path, 'w') { |o| o.print "123\n" }
43
51
  File.open(re2_path, 'w') { |o| o.print "456\n" }
44
52
 
45
- assert_equal "abc\n", book.read_chaps
53
+ assert_equal ['abc'], book.read_chaps
46
54
 
47
55
  File.unlink(chaps_path)
48
- assert_equal "#{re1_path}\n#{re2_path}", book.read_chaps
56
+ assert_equal [re1_path, re2_path], book.read_chaps
49
57
 
50
58
  File.unlink(re1_path)
51
- assert_equal re2_path, book.read_chaps
59
+ assert_equal [re2_path], book.read_chaps
52
60
 
53
61
  File.unlink(re2_path)
54
- assert_equal '', book.read_chaps
62
+ assert_equal [], book.read_chaps
55
63
  end
56
64
  end
57
65
 
@@ -68,17 +76,18 @@ class BookTest < Test::Unit::TestCase
68
76
  File.open(chaps_path, 'w') { |o| o.print chaps_content }
69
77
 
70
78
  assert book.part_exist?
71
- assert_equal chaps_content, book.read_part
79
+ assert_equal %w[abc], book.read_part
72
80
 
81
+ ## do not cache PART data
73
82
  File.open(chaps_path, 'w') { |o| o.print "XYZ\n" }
74
- assert_equal chaps_content, book.read_part
83
+ assert_equal %w[XYZ], book.read_part
75
84
  end
76
85
  end
77
86
 
78
87
  def test_read_appendix
79
88
  Dir.mktmpdir do |dir|
80
89
  book = Book::Base.new(dir)
81
- assert_equal '', book.read_appendix
90
+ assert_equal [], book.read_appendix
82
91
 
83
92
  post_path = File.join(dir, 'POSTDEF')
84
93
  re1_path = File.join(dir, "123#{book.ext}")
@@ -88,23 +97,23 @@ class BookTest < Test::Unit::TestCase
88
97
  File.open(re1_path, 'w') { |o| o.print "123\n" }
89
98
  File.open(re2_path, 'w') { |o| o.print "456\n" }
90
99
 
91
- assert_equal "abc\n", book.read_appendix
100
+ assert_equal ['abc'], book.read_appendix
92
101
 
93
102
  File.unlink(post_path)
94
- assert_equal "#{re1_path}\n#{re2_path}", book.read_appendix
103
+ assert_equal [re1_path, re2_path], book.read_appendix
95
104
 
96
105
  File.unlink(re1_path)
97
- assert_equal re2_path, book.read_appendix
106
+ assert_equal [re2_path], book.read_appendix
98
107
 
99
108
  File.unlink(re2_path)
100
- assert_equal '', book.read_appendix
109
+ assert_equal [], book.read_appendix
101
110
  end
102
111
  end
103
112
 
104
113
  def test_read_postdef
105
114
  Dir.mktmpdir do |dir|
106
115
  book = Book::Base.new(dir)
107
- assert_equal '', book.read_postdef
116
+ assert_equal [], book.read_postdef
108
117
 
109
118
  post_path = File.join(dir, 'POSTDEF')
110
119
  re1_path = File.join(dir, "123#{book.ext}")
@@ -114,10 +123,10 @@ class BookTest < Test::Unit::TestCase
114
123
  File.open(re1_path, 'w') { |o| o.print "123\n" }
115
124
  File.open(re2_path, 'w') { |o| o.print "456\n" }
116
125
 
117
- assert_equal '', book.read_postdef
126
+ assert_equal [], book.read_postdef
118
127
 
119
128
  File.unlink(post_path)
120
- assert_equal '', book.read_postdef
129
+ assert_equal [], book.read_postdef
121
130
  end
122
131
  end
123
132
 
@@ -150,12 +159,12 @@ class BookTest < Test::Unit::TestCase
150
159
  end
151
160
 
152
161
  def test_parse_chapters
153
- mktmpbookdir 'CHAPS' => '' do |_dir, book, _files|
162
+ mktmpbookdir('CHAPS' => '') do |_dir, book, _files|
154
163
  parts = book.instance_eval { parse_chapters }
155
164
  assert_equal 0, parts.size
156
165
  end
157
166
 
158
- mktmpbookdir 'CHAPS' => "chapter1.re\nchapter2\n" do |dir, book, _files|
167
+ mktmpbookdir('CHAPS' => "chapter1.re\nchapter2\n") do |dir, book, _files|
159
168
  parts = book.instance_eval { parse_chapters }
160
169
  assert_equal 1, parts.size
161
170
 
@@ -169,7 +178,7 @@ class BookTest < Test::Unit::TestCase
169
178
  assert_equal expect, chaps
170
179
  end
171
180
 
172
- mktmpbookdir 'CHAPS' => <<EOC do |dir, book, _files|
181
+ mktmpbookdir('CHAPS' => <<EOC) do |dir, book, _files|
173
182
  part1_chapter1.re
174
183
  part1_chapter2.re
175
184
 
@@ -237,7 +246,7 @@ EOC
237
246
  "part1_chapter1.re\n",
238
247
  '',
239
248
  [
240
- '', # XXX: OK?
249
+ '' # XXX: OK?
241
250
  ]
242
251
  ],
243
252
  [
@@ -248,15 +257,15 @@ EOC
248
257
  ''
249
258
  ]
250
259
  ]
251
- ].each do |n_parts, chaps_text, parts_text, part_names|
260
+ ].each do |n_parts, chaps, parts, part_names|
252
261
  n_test += 1
253
262
  Dir.mktmpdir do |dir|
254
263
  book = Book::Base.new(dir)
255
264
  chaps_path = File.join(dir, 'CHAPS')
256
- File.open(chaps_path, 'w') { |o| o.print chaps_text }
257
- if parts_text
265
+ File.open(chaps_path, 'w') { |o| o.print chaps }
266
+ if parts
258
267
  parts_path = File.join(dir, 'PART')
259
- File.open(parts_path, 'w') { |o| o.print parts_text }
268
+ File.open(parts_path, 'w') { |o| o.print parts }
260
269
  end
261
270
 
262
271
  parts = book.instance_eval { parse_chapters }
@@ -271,22 +280,22 @@ EOC
271
280
  assert_equal nil, book.prefaces
272
281
  end
273
282
 
274
- mktmpbookdir 'PREDEF' => '' do |_dir, book, _files|
283
+ mktmpbookdir('PREDEF' => '') do |_dir, book, _files|
275
284
  assert_equal nil, book.prefaces # XXX: OK?
276
285
  end
277
286
 
278
- mktmpbookdir 'PREDEF' => 'chapter1',
279
- 'chapter1.re' => '' do |_dir, book, files|
280
- assert_kind_of Book::Part, book.prefaces
287
+ mktmpbookdir('PREDEF' => 'chapter1',
288
+ 'chapter1.re' => '') do |_dir, book, files|
289
+ assert_kind_of(Book::Part, book.prefaces)
281
290
  assert_equal '', book.prefaces.name
282
291
  assert_equal 1, book.prefaces.chapters.size
283
292
  assert_equal 'chapter1', book.prefaces.chapters.first.name
284
293
  assert_equal files['chapter1.re'], book.prefaces.chapters.first.path
285
294
  end
286
295
 
287
- mktmpbookdir 'PREDEF' => "chapter1\n\nchapter2",
288
- 'chapter1.re' => '', 'chapter2.re' => '' do |_dir, book, files|
289
- assert_kind_of Book::Part, book.prefaces
296
+ mktmpbookdir('PREDEF' => "chapter1\n\nchapter2",
297
+ 'chapter1.re' => '', 'chapter2.re' => '') do |_dir, book, files|
298
+ assert_kind_of(Book::Part, book.prefaces)
290
299
  assert_equal '', book.prefaces.name
291
300
  assert_equal 2, book.prefaces.chapters.size
292
301
  assert_equal 'chapter1', book.prefaces.chapters.first.name
@@ -295,29 +304,29 @@ EOC
295
304
  assert_equal files['chapter2.re'], book.prefaces.chapters.last.path
296
305
  end
297
306
 
298
- mktmpbookdir 'PREDEF' => 'chapter1 chapter2',
299
- 'chapter1.re' => '', 'chapter2.re' => '' do |_dir, book, _files|
300
- assert_kind_of Book::Part, book.prefaces
307
+ mktmpbookdir('PREDEF' => 'chapter1 chapter2',
308
+ 'chapter1.re' => '', 'chapter2.re' => '') do |_dir, book, _files|
309
+ assert_kind_of(Book::Part, book.prefaces)
301
310
  assert_equal '', book.prefaces.name
302
311
  assert_equal 2, book.prefaces.chapters.size # XXX: OK?
303
312
  end
304
313
 
305
- mktmpbookdir 'PREDEF' => 'not_exist' do |_dir, book, _files|
314
+ mktmpbookdir('PREDEF' => 'not_exist') do |_dir, book, _files|
306
315
  assert_raises FileNotFound do
307
316
  assert_equal nil, book.prefaces
308
317
  end
309
318
  end
310
319
 
311
- mktmpbookdir 'PREDEF' => 'chapter1.re',
312
- 'chapter1.re' => '' do |_dir, book, _files|
313
- assert_kind_of Book::Part, book.prefaces
320
+ mktmpbookdir('PREDEF' => 'chapter1.re',
321
+ 'chapter1.re' => '') do |_dir, book, _files|
322
+ assert_kind_of(Book::Part, book.prefaces)
314
323
  assert_equal '', book.prefaces.name
315
324
  assert_equal 1, book.prefaces.chapters.size
316
325
  end
317
326
 
318
- mktmpbookdir 'PREDEF' => 'chapter1.txt',
319
- 'chapter1.txt' => '' do |_dir, book, _files|
320
- assert_kind_of Book::Part, book.prefaces
327
+ mktmpbookdir('PREDEF' => 'chapter1.txt',
328
+ 'chapter1.txt' => '') do |_dir, book, _files|
329
+ assert_kind_of(Book::Part, book.prefaces)
321
330
  assert_equal '', book.prefaces.name
322
331
  assert_equal 1, book.prefaces.chapters.size
323
332
  end
@@ -328,13 +337,13 @@ EOC
328
337
  assert_equal nil, book.appendix
329
338
  end
330
339
 
331
- mktmpbookdir 'POSTDEF' => '' do |_dir, book, _files|
340
+ mktmpbookdir('POSTDEF' => '') do |_dir, book, _files|
332
341
  assert_equal nil, book.appendix
333
342
  end
334
343
 
335
- mktmpbookdir 'POSTDEF' => 'chapter1',
336
- 'chapter1.re' => '' do |_dir, book, files|
337
- assert_kind_of Book::Part, book.appendix
344
+ mktmpbookdir('POSTDEF' => 'chapter1',
345
+ 'chapter1.re' => '') do |_dir, book, files|
346
+ assert_kind_of(Book::Part, book.appendix)
338
347
  assert_equal '', book.appendix.name
339
348
  assert_equal 1, book.appendix.chapters.size
340
349
  assert_equal 'chapter1', book.appendix.chapters.first.name
@@ -342,9 +351,9 @@ EOC
342
351
  assert_equal 1, book.appendix.chapters.first.number
343
352
  end
344
353
 
345
- mktmpbookdir 'POSTDEF' => "chapter1\n\nchapter2",
346
- 'chapter1.re' => '', 'chapter2.re' => '' do |_dir, book, files|
347
- assert_kind_of Book::Part, book.appendix
354
+ mktmpbookdir('POSTDEF' => "chapter1\n\nchapter2",
355
+ 'chapter1.re' => '', 'chapter2.re' => '') do |_dir, book, files|
356
+ assert_kind_of(Book::Part, book.appendix)
348
357
  assert_equal '', book.appendix.name
349
358
  assert_equal 2, book.appendix.chapters.size
350
359
  assert_equal 'chapter1', book.appendix.chapters.first.name
@@ -355,32 +364,32 @@ EOC
355
364
  assert_equal 2, book.appendix.chapters.last.number
356
365
  end
357
366
 
358
- mktmpbookdir 'POSTDEF' => 'chapter1 chapter2',
359
- 'chapter1.re' => '', 'chapter2.re' => '' do |_dir, book, _files|
360
- assert_kind_of Book::Part, book.appendix
367
+ mktmpbookdir('POSTDEF' => 'chapter1 chapter2',
368
+ 'chapter1.re' => '', 'chapter2.re' => '') do |_dir, book, _files|
369
+ assert_kind_of(Book::Part, book.appendix)
361
370
  assert_equal '', book.appendix.name
362
371
  assert_equal 2, book.appendix.chapters.size # XXX: OK?
363
372
  assert_equal 1, book.appendix.chapters.first.number
364
373
  assert_equal 2, book.appendix.chapters.last.number
365
374
  end
366
375
 
367
- mktmpbookdir 'POSTDEF' => 'not_exist' do |_dir, book, _files|
376
+ mktmpbookdir('POSTDEF' => 'not_exist') do |_dir, book, _files|
368
377
  assert_raises FileNotFound do
369
378
  assert_equal nil, book.appendix
370
379
  end
371
380
  end
372
381
 
373
- mktmpbookdir 'catalog.yml' => "APPENDIX:\n - p01.re",
374
- 'p01.re' => '= appendix' do |_dir, book, _files|
382
+ mktmpbookdir('catalog.yml' => "APPENDIX:\n - p01.re",
383
+ 'p01.re' => '= appendix') do |_dir, book, _files|
375
384
  assert_equal 'appendix', book.appendix.chapters.first.title
376
385
  assert_equal 1, book.appendix.chapters.first.number
377
386
  end
378
387
  end
379
388
 
380
389
  def test_postscripts
381
- mktmpbookdir 'catalog.yml' => "POSTDEF:\n - b01.re",
382
- 'b01.re' => '= back' do |_dir, book, _files|
383
- assert_kind_of Book::Part, book.postscripts
390
+ mktmpbookdir('catalog.yml' => "POSTDEF:\n - b01.re",
391
+ 'b01.re' => '= back') do |_dir, book, _files|
392
+ assert_kind_of(Book::Part, book.postscripts)
384
393
  assert_equal 1, book.postscripts.chapters.size
385
394
  assert_equal 'back', book.postscripts.chapters.first.title
386
395
  assert_equal nil, book.postscripts.chapters.first.number
@@ -398,7 +407,7 @@ EOC
398
407
  assert tmp.empty?
399
408
  end
400
409
 
401
- mktmpbookdir 'CHAPS' => "ch1\nch2\n\nch3", 'PART' => "foo\nbar\n" do |_dir, book, _files|
410
+ mktmpbookdir('CHAPS' => "ch1\nch2\n\nch3", 'PART' => "foo\nbar\n") do |_dir, book, _files|
402
411
  parts = book.parts
403
412
  assert_equal 2, parts.size
404
413
  assert !book.part(0)
@@ -412,8 +421,53 @@ EOC
412
421
  end
413
422
  end
414
423
 
424
+ def test_parts_in_file
425
+ mktmpbookdir do |_dir, book, _files|
426
+ assert book.parts_in_file.empty?
427
+ assert !book.part(0)
428
+ assert !book.part(1)
429
+
430
+ tmp = []
431
+ book.each_part { tmp << true }
432
+ assert tmp.empty?
433
+ end
434
+
435
+ mktmpbookdir('CHAPS' => "ch1.re\nch2.re\n\nch3.re\n",
436
+ 'PART' => "foo\nbar\n",
437
+ 'ch1.re' => "= ch1\n\n", 'ch2.re' => "= ch2\n\n",
438
+ 'ch3.re' => "= ch3\n\n") do |_dir, book, _files|
439
+ parts = book.parts_in_file
440
+ assert_equal 0, parts.size
441
+ assert !book.part(0)
442
+ assert_equal 'foo', book.part(1).name
443
+ assert_equal 'bar', book.part(2).name
444
+ assert !book.part(3)
445
+
446
+ tmp = []
447
+ book.each_part { |p| tmp << p.number }
448
+ assert_equal [1, 2], tmp
449
+ end
450
+
451
+ mktmpbookdir('CHAPS' => "ch1.re\nch2.re\n\nch3.re\n",
452
+ 'PART' => "foo.re\nbar.re\n",
453
+ 'foo.re' => "= part1\n\n", 'bar.re' => "= part2\n\n",
454
+ 'ch1.re' => "= ch1\n\n", 'ch2.re' => "= ch2\n\n",
455
+ 'ch3.re' => "= ch3\n\n") do |_dir, book, _files|
456
+ parts = book.parts_in_file
457
+ assert_equal 2, parts.size
458
+ assert !book.part(0)
459
+ assert_equal 'foo', book.part(1).name
460
+ assert_equal 'bar', book.part(2).name
461
+ assert !book.part(3)
462
+
463
+ tmp = []
464
+ book.each_part { |p| tmp << p.number }
465
+ assert_equal [1, 2], tmp
466
+ end
467
+ end
468
+
415
469
  def test_chapters
416
- mktmpbookdir 'CHAPS' => "ch1\nch2\n\nch3" do |_dir, book, _files|
470
+ mktmpbookdir('CHAPS' => "ch1\nch2\n\nch3") do |_dir, book, _files|
417
471
  chapters = book.chapters
418
472
  assert_equal 3, chapters.size
419
473
 
@@ -432,7 +486,7 @@ EOC
432
486
  end
433
487
  end
434
488
 
435
- mktmpbookdir 'CHAPS' => "ch1.txt\nch2.txt\n\nch3.txt" do |_dir, book, _files|
489
+ mktmpbookdir('CHAPS' => "ch1.txt\nch2.txt\n\nch3.txt") do |_dir, book, _files|
436
490
  chapters = book.chapters
437
491
  assert_equal 3, chapters.size
438
492
 
@@ -453,7 +507,7 @@ EOC
453
507
  end
454
508
 
455
509
  def test_next_chapter
456
- mktmpbookdir 'CHAPS' => "ch1\nch2" do |_dir, book, _files|
510
+ mktmpbookdir('CHAPS' => "ch1\nch2") do |_dir, book, _files|
457
511
  chapter = book.chapter('ch1')
458
512
  assert_equal book.chapter('ch2'), book.next_chapter(chapter)
459
513
 
@@ -463,7 +517,7 @@ EOC
463
517
  end
464
518
 
465
519
  def test_prev_chapter
466
- mktmpbookdir 'CHAPS' => "ch1\nch2" do |_dir, book, _files|
520
+ mktmpbookdir('CHAPS' => "ch1\nch2") do |_dir, book, _files|
467
521
  chapter = book.chapter('ch2')
468
522
  assert_equal book.chapter('ch1'), book.prev_chapter(chapter)
469
523
 
@@ -480,14 +534,14 @@ EOC
480
534
  assert_equal 0, book.volume.lines
481
535
  end
482
536
 
483
- mktmpbookdir 'CHAPS' => 'chapter1.re', 'chapter1.re' => '12345' do |_dir, book, _files|
537
+ mktmpbookdir('CHAPS' => 'chapter1.re', 'chapter1.re' => '12345') do |_dir, book, _files|
484
538
  assert book.volume
485
539
  assert book.volume.bytes > 0
486
540
  assert book.volume.chars > 0
487
541
  assert book.volume.lines > 0
488
542
  end
489
543
 
490
- mktmpbookdir 'preface.re' => '12345' do |dir, _book, _files|
544
+ mktmpbookdir('preface.re' => '12345') do |dir, _book, _files|
491
545
  Dir.chdir(dir) do
492
546
  book2 = Book::Base.new('.')
493
547
  assert book2.volume
@@ -506,12 +560,9 @@ EOC
506
560
  end
507
561
 
508
562
  def test_contentdir
509
- mktmpbookdir('config.yml' => "contentdir: content\n", 'catalog.yml' => "CHAPS:\n - ch01.re\n") do |dir, _book, _files|
510
- Dir.mkdir('content')
511
- File.open('content/ch01.re', 'w') { |f| f.puts "foo\n" }
512
- book = Book::Base.new(dir)
513
- config_file = File.join(dir, 'config.yml')
514
- book.load_config(config_file)
563
+ mktmpbookdir('config.yml' => "contentdir: content\n",
564
+ 'catalog.yml' => "CHAPS:\n - ch01.re\n",
565
+ 'content/ch01.re' => "foo\n") do |_dir, book, _files|
515
566
  assert_equal "foo\n", book.chapters[0].content
516
567
  end
517
568
  end
@@ -524,19 +575,13 @@ EOC
524
575
  end
525
576
 
526
577
  def test_page_metric_config
527
- mktmpbookdir('config.yml' => "bookname: book\npage_metric: B5\n") do |dir, _book, _files|
528
- book = Book::Base.new(dir)
529
- config_file = File.join(dir, 'config.yml')
530
- book.load_config(config_file)
578
+ mktmpbookdir('config.yml' => "bookname: book\npage_metric: B5\n") do |_dir, book, _files|
531
579
  assert_equal ReVIEW::Book::PageMetric::B5, book.page_metric
532
580
  end
533
581
  end
534
582
 
535
583
  def test_page_metric_config_array
536
- mktmpbookdir('config.yml' => "bookname: book\npage_metric: [46, 80, 30, 74, 2]\n") do |dir, _book, _files|
537
- book = Book::Base.new(dir)
538
- config_file = File.join(dir, 'config.yml')
539
- book.load_config(config_file)
584
+ mktmpbookdir('config.yml' => "bookname: book\npage_metric: [50, 40, 36, 40, 1]\n") do |_dir, book, _files|
540
585
  assert_equal ReVIEW::Book::PageMetric::B5, book.page_metric
541
586
  end
542
587
  end