review 3.2.0 → 5.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (282) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby-tex.yml +31 -0
  3. data/.github/workflows/ruby-win.yml +45 -0
  4. data/.github/workflows/ruby.yml +27 -0
  5. data/.rubocop.yml +167 -42
  6. data/.travis.yml +1 -1
  7. data/Dockerfile +21 -5
  8. data/NEWS.ja.md +428 -1
  9. data/NEWS.md +429 -2
  10. data/README.md +11 -7
  11. data/Rakefile +7 -2
  12. data/appveyor.yml +0 -20
  13. data/bin/review +2 -4
  14. data/bin/review-catalog-converter +5 -5
  15. data/bin/review-check +13 -17
  16. data/bin/review-checkdep +3 -6
  17. data/bin/review-compile +13 -22
  18. data/bin/review-epub2html +1 -4
  19. data/bin/review-epubmaker +3 -4
  20. data/bin/review-idgxmlmaker +14 -0
  21. data/bin/review-index +5 -86
  22. data/bin/review-init +1 -4
  23. data/bin/review-pdfmaker +1 -3
  24. data/bin/review-preproc +11 -13
  25. data/bin/review-textmaker +1 -3
  26. data/bin/review-update +1 -4
  27. data/bin/review-validate +7 -7
  28. data/bin/review-vol +5 -82
  29. data/bin/review-webmaker +1 -3
  30. data/doc/config.yml.sample +67 -16
  31. data/doc/config.yml.sample-simple +4 -3
  32. data/doc/format.ja.md +133 -21
  33. data/doc/format.md +135 -34
  34. data/doc/makeindex.ja.md +2 -2
  35. data/doc/pdfmaker.ja.md +43 -1
  36. data/doc/pdfmaker.md +42 -1
  37. data/doc/quickstart.ja.md +55 -25
  38. data/doc/quickstart.md +47 -17
  39. data/lib/review.rb +1 -1
  40. data/lib/review/book.rb +2 -2
  41. data/lib/review/book/base.rb +89 -90
  42. data/lib/review/book/bib.rb +21 -0
  43. data/lib/review/book/book_unit.rb +158 -0
  44. data/lib/review/book/chapter.rb +51 -29
  45. data/lib/review/book/index.rb +42 -248
  46. data/lib/review/book/index/item.rb +46 -0
  47. data/lib/review/book/page_metric.rb +7 -7
  48. data/lib/review/book/part.rb +45 -10
  49. data/lib/review/book/volume.rb +5 -5
  50. data/lib/review/builder.rb +171 -54
  51. data/lib/review/call_hook.rb +20 -0
  52. data/lib/review/catalog.rb +15 -17
  53. data/lib/review/compiler.rb +240 -102
  54. data/lib/review/configure.rb +101 -12
  55. data/lib/review/converter.rb +1 -1
  56. data/lib/review/epub2html.rb +6 -1
  57. data/lib/review/epubmaker.rb +120 -118
  58. data/lib/review/epubmaker/content.rb +113 -0
  59. data/lib/review/epubmaker/epubcommon.rb +372 -0
  60. data/lib/review/epubmaker/epubv2.rb +178 -0
  61. data/lib/review/epubmaker/epubv3.rb +231 -0
  62. data/lib/review/epubmaker/producer.rb +168 -0
  63. data/lib/review/epubmaker/reviewheaderlistener.rb +12 -2
  64. data/lib/review/epubmaker/zip_exporter.rb +84 -0
  65. data/lib/review/exception.rb +6 -0
  66. data/lib/review/extentions/string.rb +0 -4
  67. data/lib/review/htmlbuilder.rb +147 -149
  68. data/lib/review/htmlutils.rb +10 -14
  69. data/lib/review/i18n.rb +4 -3
  70. data/lib/review/idgxmlbuilder.rb +229 -103
  71. data/lib/review/idgxmlmaker.rb +188 -0
  72. data/lib/review/img_math.rb +245 -0
  73. data/lib/review/index_builder.rb +654 -0
  74. data/lib/review/init-web/finish.html +10 -0
  75. data/lib/review/init-web/index.html +190 -0
  76. data/lib/review/init-web/review-layout-design.js +691 -0
  77. data/lib/review/init.rb +124 -41
  78. data/lib/review/latexbox.rb +58 -0
  79. data/lib/review/latexbuilder.rb +249 -97
  80. data/lib/review/latexutils.rb +9 -1
  81. data/lib/review/lineinput.rb +113 -3
  82. data/lib/review/logger.rb +43 -8
  83. data/lib/review/makerhelper.rb +13 -186
  84. data/lib/review/markdownbuilder.rb +75 -39
  85. data/lib/review/md2inaobuilder.rb +3 -5
  86. data/lib/review/pdfmaker.rb +88 -83
  87. data/lib/review/plaintextbuilder.rb +158 -83
  88. data/lib/review/preprocessor.rb +30 -24
  89. data/lib/review/rstbuilder.rb +58 -39
  90. data/lib/review/sec_counter.rb +14 -0
  91. data/lib/review/template.rb +6 -0
  92. data/lib/review/textmaker.rb +29 -17
  93. data/lib/review/textutils.rb +68 -2
  94. data/lib/review/tocprinter.rb +242 -97
  95. data/lib/review/topbuilder.rb +147 -61
  96. data/lib/review/update.rb +27 -28
  97. data/lib/review/version.rb +1 -1
  98. data/lib/review/volumeprinter.rb +97 -0
  99. data/lib/review/webmaker.rb +36 -35
  100. data/lib/review/webtocprinter.rb +39 -35
  101. data/lib/review/yamlloader.rb +4 -0
  102. data/review.gemspec +8 -5
  103. data/samples/sample-book/README.md +7 -2
  104. data/samples/sample-book/src/.gitignore +154 -0
  105. data/samples/sample-book/src/config-ebook.yml +4 -0
  106. data/samples/sample-book/src/config-epub2.yml +1 -1
  107. data/samples/sample-book/src/config-jlreq-ebook.yml +4 -0
  108. data/samples/sample-book/src/config-jlreq.yml +6 -0
  109. data/samples/sample-book/src/config.yml +3 -3
  110. data/samples/sample-book/src/lib/tasks/review.rake +45 -14
  111. data/samples/sample-book/src/lib/tasks/z01_copy_sty.rake +14 -8
  112. data/samples/syntax-book/Gemfile +1 -1
  113. data/samples/syntax-book/ch01.re +3 -1
  114. data/samples/syntax-book/ch02.re +28 -21
  115. data/samples/syntax-book/ch03.re +4 -7
  116. data/samples/syntax-book/config-jlreq-lualatex.yml +4 -0
  117. data/samples/syntax-book/config-jlreq.yml +5 -0
  118. data/samples/syntax-book/config-print.yml +3 -0
  119. data/samples/syntax-book/config.yml +1 -1
  120. data/samples/syntax-book/images/img3-2.png +0 -0
  121. data/samples/syntax-book/lib/tasks/review.rake +30 -15
  122. data/samples/syntax-book/lib/tasks/z01_copy_sty.rake +14 -8
  123. data/templates/html/_colophon.html.erb +23 -0
  124. data/templates/html/_colophon_history.html.erb +9 -0
  125. data/templates/html/_cover.html.erb +10 -0
  126. data/templates/html/_part_body.html.erb +6 -0
  127. data/templates/html/_titlepage.html.erb +20 -0
  128. data/templates/html/layout-html5.html.erb +6 -0
  129. data/templates/html/layout-xhtml1.html.erb +6 -0
  130. data/templates/latex/config.erb +45 -27
  131. data/templates/latex/layout.tex.erb +1 -0
  132. data/templates/latex/review-jlreq/README.md +3 -1
  133. data/templates/latex/review-jlreq/review-base.sty +124 -37
  134. data/templates/latex/review-jlreq/review-jlreq.cls +29 -22
  135. data/templates/latex/review-jlreq/review-style.sty +9 -1
  136. data/templates/latex/review-jlreq/review-tcbox.sty +348 -0
  137. data/templates/latex/review-jlreq/reviewmacro.sty +5 -0
  138. data/templates/latex/review-jsbook/README.md +46 -5
  139. data/templates/latex/review-jsbook/review-base.sty +111 -30
  140. data/templates/latex/review-jsbook/review-jsbook.cls +16 -2
  141. data/templates/latex/review-jsbook/review-style.sty +10 -2
  142. data/templates/latex/review-jsbook/review-tcbox.sty +348 -0
  143. data/templates/latex/review-jsbook/reviewmacro.sty +5 -0
  144. data/templates/opf/epubv2.opf.erb +7 -7
  145. data/templates/opf/epubv3.opf.erb +7 -7
  146. data/templates/opf/opf_manifest_epubv2.opf.erb +10 -0
  147. data/templates/opf/opf_manifest_epubv3.opf.erb +10 -0
  148. data/templates/opf/opf_metainfo_epubv2.opf.erb +17 -0
  149. data/templates/opf/opf_metainfo_epubv3.opf.erb +49 -0
  150. data/templates/opf/opf_tocx_epubv2.opf.erb +9 -0
  151. data/templates/opf/opf_tocx_epubv3.opf.erb +17 -0
  152. data/templates/web/html/layout-html5.html.erb +9 -8
  153. data/templates/web/html/layout-xhtml1.html.erb +6 -0
  154. data/test/assets/header_listener.html +35 -0
  155. data/test/assets/img_math/img1.png +0 -0
  156. data/test/assets/img_math/img2.png +0 -0
  157. data/test/assets/img_math/img3.png +0 -0
  158. data/test/assets/syntax_book_index_detail.txt +58 -0
  159. data/test/assets/test_template.tex +20 -9
  160. data/test/assets/test_template_backmatter.tex +20 -9
  161. data/test/book_test_helper.rb +11 -5
  162. data/test/run_test.rb +1 -1
  163. data/test/test_book.rb +123 -78
  164. data/test/test_book_chapter.rb +99 -56
  165. data/test/test_book_part.rb +3 -3
  166. data/test/test_builder.rb +24 -15
  167. data/test/test_catalog.rb +19 -42
  168. data/test/test_catalog_converter_cmd.rb +1 -1
  169. data/test/test_converter.rb +1 -0
  170. data/test/test_epub3maker.rb +170 -126
  171. data/test/test_epubmaker.rb +249 -129
  172. data/test/test_epubmaker_cmd.rb +16 -9
  173. data/test/test_helper.rb +23 -11
  174. data/test/test_htmlbuilder.rb +1083 -114
  175. data/test/test_htmlutils.rb +0 -12
  176. data/test/test_i18n.rb +37 -37
  177. data/test/test_idgxmlbuilder.rb +627 -27
  178. data/test/test_idgxmlmaker_cmd.rb +50 -0
  179. data/test/test_image_finder.rb +52 -70
  180. data/test/test_img_math.rb +111 -0
  181. data/test/test_index.rb +62 -52
  182. data/test/test_indexbuilder.rb +52 -0
  183. data/test/test_latexbuilder.rb +1189 -59
  184. data/test/test_latexbuilder_v2.rb +74 -34
  185. data/test/test_lineinput.rb +20 -93
  186. data/test/test_logger.rb +17 -4
  187. data/test/test_makerhelper.rb +2 -14
  188. data/test/test_markdownbuilder.rb +77 -4
  189. data/test/test_md2inaobuilder.rb +12 -2
  190. data/test/test_pdfmaker.rb +101 -12
  191. data/test/test_pdfmaker_cmd.rb +102 -8
  192. data/test/test_plaintextbuilder.rb +562 -31
  193. data/test/test_review_ext.rb +2 -1
  194. data/test/test_reviewheaderlistener.rb +49 -0
  195. data/test/test_rstbuilder.rb +58 -5
  196. data/test/test_sec_counter.rb +156 -0
  197. data/test/test_template.rb +12 -2
  198. data/test/test_textmaker_cmd.rb +58 -0
  199. data/test/test_textutils.rb +109 -2
  200. data/test/test_tocprinter.rb +46 -0
  201. data/test/test_topbuilder.rb +400 -17
  202. data/test/test_update.rb +53 -44
  203. data/test/test_webtocprinter.rb +75 -43
  204. data/test/test_yamlloader.rb +13 -0
  205. data/test/test_zip_exporter.rb +5 -6
  206. data/vendor/gentombow/LICENSE +1 -1
  207. data/vendor/gentombow/Makefile +0 -1
  208. data/vendor/gentombow/bounddvi-en.pdf +0 -0
  209. data/vendor/gentombow/bounddvi-en.tex +1 -0
  210. data/vendor/gentombow/bounddvi.pdf +0 -0
  211. data/vendor/gentombow/bounddvi.sty +30 -7
  212. data/vendor/gentombow/bounddvi.tex +1 -0
  213. data/vendor/gentombow/create_archive.sh +1 -0
  214. data/vendor/gentombow/gentombow-ja.pdf +0 -0
  215. data/vendor/gentombow/gentombow-ja.tex +9 -0
  216. data/vendor/gentombow/gentombow.pdf +0 -0
  217. data/vendor/gentombow/gentombow.sty +32 -10
  218. data/vendor/gentombow/gentombow.tex +8 -0
  219. data/vendor/gentombow/tests/gentombow-01-pdfx.tex +8 -0
  220. data/vendor/gentombow/tests/gentombow-02-pdfx.tex +8 -0
  221. data/vendor/jsclasses/LICENSE +1 -1
  222. data/vendor/jsclasses/Makefile +3 -2
  223. data/vendor/jsclasses/create_archive.sh +5 -5
  224. data/vendor/jsclasses/jis/Makefile +3 -2
  225. data/vendor/jsclasses/jis/jsarticle.cls +74 -31
  226. data/vendor/jsclasses/jis/jsbook.cls +74 -31
  227. data/vendor/jsclasses/jis/jsclasses.dtx +176 -36
  228. data/vendor/jsclasses/jis/jsclasses.ins +15 -5
  229. data/vendor/jsclasses/jis/jslogo.dtx +4 -4
  230. data/vendor/jsclasses/jis/jslogo.ins +9 -0
  231. data/vendor/jsclasses/jis/jslogo.sty +4 -16
  232. data/vendor/jsclasses/jis/jspf.cls +73 -30
  233. data/vendor/jsclasses/jis/jsreport.cls +74 -31
  234. data/vendor/jsclasses/jis/jsverb.ins +9 -0
  235. data/vendor/jsclasses/jis/jsverb.sty +1 -13
  236. data/vendor/jsclasses/jis/kiyou.cls +74 -31
  237. data/vendor/jsclasses/jis/minijs.sty +65 -22
  238. data/vendor/jsclasses/jis/okumacro.dtx +4 -5
  239. data/vendor/jsclasses/jis/okumacro.ins +9 -0
  240. data/vendor/jsclasses/jis/okumacro.sty +4 -17
  241. data/vendor/jsclasses/jis/okuverb.ins +9 -0
  242. data/vendor/jsclasses/jis/okuverb.sty +1 -13
  243. data/vendor/jsclasses/jis/winjis.sty +23 -19
  244. data/vendor/jsclasses/jsarticle.cls +74 -31
  245. data/vendor/jsclasses/jsbook.cls +74 -31
  246. data/vendor/jsclasses/jsclasses.dtx +176 -36
  247. data/vendor/jsclasses/jsclasses.ins +15 -5
  248. data/vendor/jsclasses/jsclasses.pdf +0 -0
  249. data/vendor/jsclasses/jslogo.dtx +4 -4
  250. data/vendor/jsclasses/jslogo.ins +9 -0
  251. data/vendor/jsclasses/jslogo.pdf +0 -0
  252. data/vendor/jsclasses/jslogo.sty +4 -16
  253. data/vendor/jsclasses/jspf.cls +73 -30
  254. data/vendor/jsclasses/jsreport.cls +74 -31
  255. data/vendor/jsclasses/jsverb.ins +9 -0
  256. data/vendor/jsclasses/jsverb.pdf +0 -0
  257. data/vendor/jsclasses/jsverb.sty +1 -13
  258. data/vendor/jsclasses/kiyou.cls +74 -31
  259. data/vendor/jsclasses/minijs.sty +68 -22
  260. data/vendor/jsclasses/okumacro.dtx +4 -5
  261. data/vendor/jsclasses/okumacro.ins +9 -0
  262. data/vendor/jsclasses/okumacro.pdf +0 -0
  263. data/vendor/jsclasses/okumacro.sty +4 -17
  264. data/vendor/jsclasses/okuverb.ins +9 -0
  265. data/vendor/jsclasses/okuverb.pdf +0 -0
  266. data/vendor/jsclasses/okuverb.sty +1 -13
  267. data/vendor/jsclasses/tests/relfont.tex +10 -0
  268. data/vendor/jsclasses/winjis.sty +23 -19
  269. metadata +136 -23
  270. data/.rubocop_todo.yml +0 -7
  271. data/lib/epubmaker.rb +0 -23
  272. data/lib/epubmaker/content.rb +0 -110
  273. data/lib/epubmaker/epubcommon.rb +0 -441
  274. data/lib/epubmaker/epubv2.rb +0 -143
  275. data/lib/epubmaker/epubv3.rb +0 -233
  276. data/lib/epubmaker/producer.rb +0 -375
  277. data/lib/epubmaker/zip_exporter.rb +0 -81
  278. data/lib/lineinput.rb +0 -155
  279. data/lib/review/book/compilable.rb +0 -173
  280. data/lib/review/tocparser.rb +0 -271
  281. data/samples/syntax-book/review-ext.rb +0 -14
  282. 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
data/test/run_test.rb CHANGED
@@ -1,4 +1,4 @@
1
- base_dir = File.expand_path(File.join(File.dirname(__FILE__), '..'))
1
+ base_dir = File.expand_path('..', __dir__)
2
2
  lib_dir = File.join(base_dir, 'lib')
3
3
  test_dir = File.join(base_dir, 'test')
4
4
 
data/test/test_book.rb CHANGED
@@ -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
 
@@ -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