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
data/test/test_update.rb CHANGED
@@ -14,13 +14,13 @@ 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
21
21
  File.write(File.join(@tmpdir, 'test.yml'), "invalid: [,]\n")
22
22
  io = StringIO.new
23
- @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
23
+ @u.instance_eval { @logger = ReVIEW::Logger.new(io) }
24
24
  @u.parse_ymls(@tmpdir)
25
25
  assert_match(/test\.yml is broken\. Ignored\./, io.string)
26
26
  end
@@ -62,9 +62,9 @@ EOT
62
62
  File.write(File.join(@tmpdir, fname), '')
63
63
 
64
64
  io = StringIO.new
65
- @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
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
@@ -75,7 +75,7 @@ EOT
75
75
  File.write(File.join(@tmpdir, 'layouts/layout.tex.erb'), '')
76
76
 
77
77
  io = StringIO.new
78
- @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
78
+ @u.instance_eval { @logger = ReVIEW::Logger.new(io) }
79
79
  assert_raise(ApplicationError) { @u.check_own_files(@tmpdir) }
80
80
  assert_match(%r{There is custom layouts/layout\.tex\.erb file}, io.string)
81
81
  end
@@ -84,47 +84,56 @@ EOT
84
84
  File.write(File.join(@tmpdir, 'review-ext.rb'), '')
85
85
 
86
86
  io = StringIO.new
87
- @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
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
93
93
  File.write(File.join(@tmpdir, 'config.yml'), "review_version: 2.0\n")
94
94
 
95
95
  io = StringIO.new
96
- @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
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
- @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
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
115
124
  File.write(File.join(@tmpdir, 'config.yml'), "review_version: 99.0\n")
116
125
 
117
126
  io = StringIO.new
118
- @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
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
 
125
134
  def test_update_rakefile
126
135
  io = StringIO.new
127
- @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
136
+ @u.instance_eval { @logger = ReVIEW::Logger.new(io) }
128
137
  @u.update_rakefile(@tmpdir)
129
138
  assert_equal '', io.string
130
139
  assert_equal true, File.exist?(File.join(@tmpdir, 'Rakefile'))
@@ -133,7 +142,7 @@ EOT
133
142
 
134
143
  def test_update_rakefile_same
135
144
  io = StringIO.new
136
- @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
145
+ @u.instance_eval { @logger = ReVIEW::Logger.new(io) }
137
146
  @u.update_rakefile(@tmpdir)
138
147
  @u.update_rakefile(@tmpdir)
139
148
  assert_equal '', io.string
@@ -143,10 +152,10 @@ 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
- @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
158
+ @u.instance_eval { @logger = ReVIEW::Logger.new(io) }
150
159
  @u.update_rakefile(@tmpdir)
151
160
  assert_match(/Rakefile will be overridden with/, io.string)
152
161
  assert_match(%r{lib/tasks/review\.rake will be overridden}, io.string)
@@ -157,7 +166,7 @@ EOT
157
166
  def test_update_epub_version_older
158
167
  File.write(File.join(@tmpdir, 'config.yml'), "epubversion: 2\nhtmlversion: 4\n")
159
168
  io = StringIO.new
160
- @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
169
+ @u.instance_eval { @logger = ReVIEW::Logger.new(io) }
161
170
  @u.parse_ymls(@tmpdir)
162
171
  @u.update_epub_version
163
172
  assert_match(/Update 'epubversion'/, io.string)
@@ -172,7 +181,7 @@ EOT
172
181
  def test_update_epub_version_current
173
182
  File.write(File.join(@tmpdir, 'config.yml'), "epubversion: 3\nhtmlversion: 5\n")
174
183
  io = StringIO.new
175
- @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
184
+ @u.instance_eval { @logger = ReVIEW::Logger.new(io) }
176
185
  @u.parse_ymls(@tmpdir)
177
186
  @u.update_epub_version
178
187
  assert_equal '', io.string
@@ -186,7 +195,7 @@ EOT
186
195
  def test_update_epub_version_newer
187
196
  File.write(File.join(@tmpdir, 'config.yml'), "epubversion: 99\nhtmlversion: 99\n")
188
197
  io = StringIO.new
189
- @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
198
+ @u.instance_eval { @logger = ReVIEW::Logger.new(io) }
190
199
  @u.parse_ymls(@tmpdir)
191
200
  @u.update_epub_version
192
201
  assert_equal '', io.string
@@ -200,7 +209,7 @@ EOT
200
209
  def test_update_locale_older
201
210
  File.write(File.join(@tmpdir, 'locale.yml'), %Q(locale: en\nchapter_quote: "'%s'"\n))
202
211
  io = StringIO.new
203
- @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
212
+ @u.instance_eval { @logger = ReVIEW::Logger.new(io) }
204
213
  @u.parse_ymls(@tmpdir)
205
214
  @u.update_locale
206
215
  assert_match(/'chapter_quote' now takes 2 values/, io.string)
@@ -214,7 +223,7 @@ EOT
214
223
  def test_update_locale_current
215
224
  File.write(File.join(@tmpdir, 'locale.yml'), %Q(locale: en\nchapter_quote: "'%s...%s'"\n))
216
225
  io = StringIO.new
217
- @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
226
+ @u.instance_eval { @logger = ReVIEW::Logger.new(io) }
218
227
  @u.parse_ymls(@tmpdir)
219
228
  @u.update_locale
220
229
  assert_equal '', io.string
@@ -228,7 +237,7 @@ EOT
228
237
  def test_update_tex_parameters_jsbook_to_review_jsbook
229
238
  File.write(File.join(@tmpdir, 'config.yml'), %Q(texdocumentclass: ["jsbook", "a5j,11pt,landscape,oneside,twoside,vartwoside,onecolumn,twocolumn,titlepage,notitlepage,openright,openany,leqno,fleqn,disablejfam,draft,final,mingoth,winjis,jis,papersize,english,report,jslogo,nojslogo,uplatex,nomag,usemag,nomag*,tombow,tombo,mentuke,autodetect-engine"]\n))
230
239
  io = StringIO.new
231
- @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
240
+ @u.instance_eval { @logger = ReVIEW::Logger.new(io) }
232
241
  @u.parse_ymls(@tmpdir)
233
242
  @u.update_tex_parameters
234
243
  assert_match(/By default it is migrated to/, io.string)
@@ -242,7 +251,7 @@ EOT
242
251
  def test_update_tex_parameters_jsbook_to_review_jsbook_invalid
243
252
  File.write(File.join(@tmpdir, 'config.yml'), %Q(texdocumentclass: ["jsbook", "a5paper,invalid"]\n))
244
253
  io = StringIO.new
245
- @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
254
+ @u.instance_eval { @logger = ReVIEW::Logger.new(io) }
246
255
  @u.parse_ymls(@tmpdir)
247
256
  @u.update_tex_parameters
248
257
  assert_match(/couldn't be converted fully/, io.string)
@@ -256,7 +265,7 @@ EOT
256
265
  def test_update_tex_parameters_review_jsbook
257
266
  File.write(File.join(@tmpdir, 'config.yml'), %Q(texdocumentclass: ["review-jsbook", ""]\n))
258
267
  io = StringIO.new
259
- @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
268
+ @u.instance_eval { @logger = ReVIEW::Logger.new(io) }
260
269
  @u.parse_ymls(@tmpdir)
261
270
  @u.update_tex_parameters
262
271
  assert_equal '', io.string
@@ -269,7 +278,7 @@ EOT
269
278
  def test_update_tex_parameters_review_jsbook_obsoletekey
270
279
  File.write(File.join(@tmpdir, 'config.yml'), %Q(texdocumentclass: ["review-jsbook", "Q=13.5, H=20, W=40, L=34, head=20mm, gutter=20mm"]\n))
271
280
  io = StringIO.new
272
- @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
281
+ @u.instance_eval { @logger = ReVIEW::Logger.new(io) }
273
282
  @u.parse_ymls(@tmpdir)
274
283
  @u.update_tex_parameters
275
284
  cont = <<EOT
@@ -281,7 +290,7 @@ EOT
281
290
  def test_update_tex_parameters_review_jlreq
282
291
  File.write(File.join(@tmpdir, 'config.yml'), %Q(texdocumentclass: ["review-jlreq", ""]\n))
283
292
  io = StringIO.new
284
- @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
293
+ @u.instance_eval { @logger = ReVIEW::Logger.new(io) }
285
294
  @u.parse_ymls(@tmpdir)
286
295
  @u.update_tex_parameters
287
296
  assert_equal '', io.string
@@ -294,7 +303,7 @@ EOT
294
303
  def test_update_tex_parameters_review_jsbook_review_jlreq
295
304
  File.write(File.join(@tmpdir, 'config.yml'), %Q(texdocumentclass: ["review-jsbook", ""]\n))
296
305
  io = StringIO.new
297
- @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
306
+ @u.instance_eval { @logger = ReVIEW::Logger.new(io) }
298
307
  @u.parse_ymls(@tmpdir)
299
308
  @u.specified_template = 'review-jlreq'
300
309
  @u.update_tex_parameters
@@ -308,7 +317,7 @@ EOT
308
317
  def test_update_tex_parameters_unknownclass
309
318
  File.write(File.join(@tmpdir, 'config.yml'), %Q(texdocumentclass: ["unknown", ""]\n))
310
319
  io = StringIO.new
311
- @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
320
+ @u.instance_eval { @logger = ReVIEW::Logger.new(io) }
312
321
  @u.parse_ymls(@tmpdir)
313
322
  @u.update_tex_parameters
314
323
  assert_match(/unknown class/, io.string)
@@ -321,7 +330,7 @@ EOT
321
330
  def test_update_tex_parameters_jsbook_unknownclass
322
331
  File.write(File.join(@tmpdir, 'config.yml'), %Q(texdocumentclass: ["jsbook", ""]\n))
323
332
  io = StringIO.new
324
- @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
333
+ @u.instance_eval { @logger = ReVIEW::Logger.new(io) }
325
334
  @u.parse_ymls(@tmpdir)
326
335
  @u.specified_template = 'unknown'
327
336
  @u.update_tex_parameters
@@ -335,7 +344,7 @@ EOT
335
344
  def test_update_tex_parameters_jsbook_to_review_jlreq
336
345
  File.write(File.join(@tmpdir, 'config.yml'), %Q(texdocumentclass: ["jsbook", "a5j,11pt,landscape,oneside,twoside,onecolumn,twocolumn,titlepage,notitlepage,openright,openany,leqno,fleqn,draft,final,report,uplatex,nomag,usemag,nomag*,tombow,tombo,mentuke,autodetect-engine"]\n))
337
346
  io = StringIO.new
338
- @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
347
+ @u.instance_eval { @logger = ReVIEW::Logger.new(io) }
339
348
  @u.parse_ymls(@tmpdir)
340
349
  @u.specified_template = 'review-jlreq'
341
350
  @u.update_tex_parameters
@@ -349,7 +358,7 @@ EOT
349
358
 
350
359
  def test_update_stys_new
351
360
  io = StringIO.new
352
- @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
361
+ @u.instance_eval { @logger = ReVIEW::Logger.new(io) }
353
362
  @u.update_tex_stys('review-jsbook', @tmpdir)
354
363
  assert_equal '', io.string
355
364
  assert_equal true, File.exist?(File.join(@tmpdir, 'sty/review-base.sty'))
@@ -359,7 +368,7 @@ EOT
359
368
 
360
369
  def test_update_stys_new_custom
361
370
  io = StringIO.new
362
- @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
371
+ @u.instance_eval { @logger = ReVIEW::Logger.new(io) }
363
372
  @u.update_tex_stys('review-jsbook', @tmpdir)
364
373
  assert_equal '', io.string
365
374
  File.write(File.join(@tmpdir, 'sty/review-custom.sty'), "% MY CUSTOM\n")
@@ -370,26 +379,26 @@ EOT
370
379
 
371
380
  def test_update_stys_modified
372
381
  io = StringIO.new
373
- @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
382
+ @u.instance_eval { @logger = ReVIEW::Logger.new(io) }
374
383
  @u.update_tex_stys('review-jsbook', @tmpdir)
375
384
  cont = File.read(File.join(@tmpdir, 'sty/review-base.sty'))
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
 
383
392
  def test_update_tex_command
384
393
  File.write(File.join(@tmpdir, 'config.yml'), %Q(texcommand: "/Program Files/up-latex --shell-escape -v"\n))
385
394
  io = StringIO.new
386
- @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
395
+ @u.instance_eval { @logger = ReVIEW::Logger.new(io) }
387
396
  @u.parse_ymls(@tmpdir)
388
397
  @u.update_tex_command
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
@@ -397,7 +406,7 @@ EOT
397
406
  def test_update_tex_command_noopt
398
407
  File.write(File.join(@tmpdir, 'config.yml'), %Q(texcommand: "/Program Files/up-latex"\n))
399
408
  io = StringIO.new
400
- @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
409
+ @u.instance_eval { @logger = ReVIEW::Logger.new(io) }
401
410
  @u.parse_ymls(@tmpdir)
402
411
  @u.update_tex_command
403
412
  assert_equal '', io.string
@@ -410,7 +419,7 @@ EOT
410
419
  def test_update_tex_command_withopt
411
420
  File.write(File.join(@tmpdir, 'config.yml'), %Q(texcommand: "/Program Files/up-latex --shell-escape -v"\ntexoptions: "-myopt"\n))
412
421
  io = StringIO.new
413
- @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
422
+ @u.instance_eval { @logger = ReVIEW::Logger.new(io) }
414
423
  @u.parse_ymls(@tmpdir)
415
424
  @u.update_tex_command
416
425
  assert_match(/has options/, io.string)
@@ -424,7 +433,7 @@ EOT
424
433
  def test_update_dvi_command
425
434
  File.write(File.join(@tmpdir, 'config.yml'), %Q(dvicommand: "/Program Files/dvi-pdfmx -q --quiet"\n))
426
435
  io = StringIO.new
427
- @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
436
+ @u.instance_eval { @logger = ReVIEW::Logger.new(io) }
428
437
  @u.parse_ymls(@tmpdir)
429
438
  @u.update_dvi_command
430
439
  assert_match(/has options/, io.string)
@@ -438,7 +447,7 @@ EOT
438
447
  def test_update_dvi_command_noopt
439
448
  File.write(File.join(@tmpdir, 'config.yml'), %Q(dvicommand: "/Program Files/dvi-pdfmx"\n))
440
449
  io = StringIO.new
441
- @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
450
+ @u.instance_eval { @logger = ReVIEW::Logger.new(io) }
442
451
  @u.parse_ymls(@tmpdir)
443
452
  @u.update_dvi_command
444
453
  assert_equal '', io.string
@@ -451,7 +460,7 @@ EOT
451
460
  def test_update_dvi_command_withopt
452
461
  File.write(File.join(@tmpdir, 'config.yml'), %Q(dvicommand: "/Program Files/dvi-pdfmx -q --quiet"\ndvioptions: "-myopt"\n))
453
462
  io = StringIO.new
454
- @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
463
+ @u.instance_eval { @logger = ReVIEW::Logger.new(io) }
455
464
  @u.parse_ymls(@tmpdir)
456
465
  @u.update_dvi_command
457
466
  assert_match(/has options/, io.string)
@@ -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