review 4.0.0 → 5.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (268) 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 +141 -38
  6. data/Dockerfile +21 -5
  7. data/NEWS.ja.md +338 -1
  8. data/NEWS.md +339 -2
  9. data/README.md +11 -7
  10. data/Rakefile +7 -2
  11. data/appveyor.yml +0 -20
  12. data/bin/review +2 -4
  13. data/bin/review-catalog-converter +4 -4
  14. data/bin/review-check +8 -12
  15. data/bin/review-checkdep +2 -5
  16. data/bin/review-compile +11 -20
  17. data/bin/review-epub2html +1 -4
  18. data/bin/review-epubmaker +3 -4
  19. data/bin/review-idgxmlmaker +1 -3
  20. data/bin/review-index +5 -86
  21. data/bin/review-init +1 -4
  22. data/bin/review-pdfmaker +1 -3
  23. data/bin/review-preproc +3 -5
  24. data/bin/review-textmaker +1 -3
  25. data/bin/review-update +1 -4
  26. data/bin/review-validate +5 -5
  27. data/bin/review-vol +5 -82
  28. data/bin/review-webmaker +1 -3
  29. data/doc/config.yml.sample +55 -12
  30. data/doc/config.yml.sample-simple +4 -3
  31. data/doc/format.ja.md +119 -17
  32. data/doc/format.md +106 -17
  33. data/doc/makeindex.ja.md +2 -2
  34. data/doc/pdfmaker.ja.md +42 -0
  35. data/doc/pdfmaker.md +41 -0
  36. data/doc/quickstart.ja.md +55 -25
  37. data/doc/quickstart.md +47 -17
  38. data/lib/review.rb +1 -1
  39. data/lib/review/book.rb +2 -2
  40. data/lib/review/book/base.rb +69 -30
  41. data/lib/review/book/bib.rb +21 -0
  42. data/lib/review/book/book_unit.rb +158 -0
  43. data/lib/review/book/chapter.rb +33 -26
  44. data/lib/review/book/index.rb +39 -206
  45. data/lib/review/book/index/item.rb +8 -2
  46. data/lib/review/book/page_metric.rb +7 -7
  47. data/lib/review/book/part.rb +26 -11
  48. data/lib/review/book/volume.rb +5 -5
  49. data/lib/review/builder.rb +124 -27
  50. data/lib/review/call_hook.rb +20 -0
  51. data/lib/review/catalog.rb +3 -2
  52. data/lib/review/compiler.rb +197 -91
  53. data/lib/review/configure.rb +95 -9
  54. data/lib/review/converter.rb +1 -1
  55. data/lib/review/epub2html.rb +6 -1
  56. data/lib/review/epubmaker.rb +116 -117
  57. data/lib/review/epubmaker/content.rb +113 -0
  58. data/lib/review/epubmaker/epubcommon.rb +372 -0
  59. data/lib/review/epubmaker/epubv2.rb +178 -0
  60. data/lib/review/epubmaker/epubv3.rb +231 -0
  61. data/lib/review/epubmaker/producer.rb +168 -0
  62. data/lib/review/epubmaker/reviewheaderlistener.rb +12 -2
  63. data/lib/review/epubmaker/zip_exporter.rb +84 -0
  64. data/lib/review/exception.rb +6 -0
  65. data/lib/review/extentions/string.rb +0 -4
  66. data/lib/review/htmlbuilder.rb +132 -87
  67. data/lib/review/htmlutils.rb +8 -11
  68. data/lib/review/i18n.rb +2 -1
  69. data/lib/review/idgxmlbuilder.rb +156 -76
  70. data/lib/review/idgxmlmaker.rb +22 -18
  71. data/lib/review/img_math.rb +245 -0
  72. data/lib/review/index_builder.rb +654 -0
  73. data/lib/review/init.rb +17 -18
  74. data/lib/review/latexbox.rb +58 -0
  75. data/lib/review/latexbuilder.rb +173 -43
  76. data/lib/review/latexutils.rb +9 -1
  77. data/lib/review/lineinput.rb +112 -2
  78. data/lib/review/logger.rb +42 -3
  79. data/lib/review/makerhelper.rb +12 -187
  80. data/lib/review/markdownbuilder.rb +51 -2
  81. data/lib/review/pdfmaker.rb +78 -73
  82. data/lib/review/plaintextbuilder.rb +98 -14
  83. data/lib/review/preprocessor.rb +18 -12
  84. data/lib/review/rstbuilder.rb +28 -9
  85. data/lib/review/sec_counter.rb +14 -0
  86. data/lib/review/template.rb +6 -0
  87. data/lib/review/textmaker.rb +21 -19
  88. data/lib/review/textutils.rb +3 -12
  89. data/lib/review/tocprinter.rb +242 -97
  90. data/lib/review/topbuilder.rb +91 -24
  91. data/lib/review/update.rb +12 -13
  92. data/lib/review/version.rb +1 -1
  93. data/lib/review/volumeprinter.rb +97 -0
  94. data/lib/review/webmaker.rb +34 -33
  95. data/lib/review/webtocprinter.rb +39 -35
  96. data/lib/review/yamlloader.rb +2 -1
  97. data/review.gemspec +5 -3
  98. data/samples/sample-book/src/.gitignore +1 -0
  99. data/samples/sample-book/src/config-ebook.yml +4 -0
  100. data/samples/sample-book/src/config-epub2.yml +1 -1
  101. data/samples/sample-book/src/config-jlreq-ebook.yml +4 -0
  102. data/samples/sample-book/src/config.yml +3 -3
  103. data/samples/sample-book/src/lib/tasks/review.rake +26 -6
  104. data/samples/syntax-book/Gemfile +1 -1
  105. data/samples/syntax-book/ch01.re +3 -1
  106. data/samples/syntax-book/ch02.re +28 -21
  107. data/samples/syntax-book/ch03.re +1 -1
  108. data/samples/syntax-book/config-jlreq-lualatex.yml +4 -0
  109. data/samples/syntax-book/config-print.yml +3 -0
  110. data/samples/syntax-book/config.yml +1 -1
  111. data/samples/syntax-book/images/img3-2.png +0 -0
  112. data/samples/syntax-book/lib/tasks/review.rake +23 -8
  113. data/templates/html/_colophon.html.erb +23 -0
  114. data/templates/html/_colophon_history.html.erb +9 -0
  115. data/templates/html/_cover.html.erb +10 -0
  116. data/templates/html/_part_body.html.erb +6 -0
  117. data/templates/html/_titlepage.html.erb +20 -0
  118. data/templates/html/layout-html5.html.erb +6 -0
  119. data/templates/html/layout-xhtml1.html.erb +6 -0
  120. data/templates/latex/config.erb +41 -29
  121. data/templates/latex/review-jlreq/README.md +3 -1
  122. data/templates/latex/review-jlreq/review-base.sty +47 -22
  123. data/templates/latex/review-jlreq/review-jlreq.cls +25 -24
  124. data/templates/latex/review-jlreq/review-style.sty +6 -1
  125. data/templates/latex/review-jlreq/review-tcbox.sty +348 -0
  126. data/templates/latex/review-jlreq/reviewmacro.sty +5 -0
  127. data/templates/latex/review-jsbook/README.md +7 -5
  128. data/templates/latex/review-jsbook/review-base.sty +47 -21
  129. data/templates/latex/review-jsbook/review-jsbook.cls +12 -2
  130. data/templates/latex/review-jsbook/review-style.sty +6 -1
  131. data/templates/latex/review-jsbook/review-tcbox.sty +348 -0
  132. data/templates/latex/review-jsbook/reviewmacro.sty +5 -0
  133. data/templates/opf/epubv2.opf.erb +7 -7
  134. data/templates/opf/epubv3.opf.erb +7 -7
  135. data/templates/opf/opf_manifest_epubv2.opf.erb +10 -0
  136. data/templates/opf/opf_manifest_epubv3.opf.erb +10 -0
  137. data/templates/opf/opf_metainfo_epubv2.opf.erb +17 -0
  138. data/templates/opf/opf_metainfo_epubv3.opf.erb +49 -0
  139. data/templates/opf/opf_tocx_epubv2.opf.erb +9 -0
  140. data/templates/opf/opf_tocx_epubv3.opf.erb +17 -0
  141. data/templates/web/html/layout-html5.html.erb +9 -8
  142. data/templates/web/html/layout-xhtml1.html.erb +6 -0
  143. data/test/assets/header_listener.html +35 -0
  144. data/test/assets/img_math/img1.png +0 -0
  145. data/test/assets/img_math/img2.png +0 -0
  146. data/test/assets/img_math/img3.png +0 -0
  147. data/test/assets/syntax_book_index_detail.txt +58 -0
  148. data/test/assets/test_template.tex +12 -9
  149. data/test/assets/test_template_backmatter.tex +12 -9
  150. data/test/book_test_helper.rb +11 -5
  151. data/test/run_test.rb +1 -1
  152. data/test/test_book.rb +62 -63
  153. data/test/test_book_chapter.rb +99 -56
  154. data/test/test_book_part.rb +3 -3
  155. data/test/test_builder.rb +24 -15
  156. data/test/test_catalog.rb +1 -0
  157. data/test/test_catalog_converter_cmd.rb +1 -1
  158. data/test/test_converter.rb +1 -0
  159. data/test/test_epub3maker.rb +170 -126
  160. data/test/test_epubmaker.rb +249 -129
  161. data/test/test_epubmaker_cmd.rb +14 -7
  162. data/test/test_helper.rb +23 -11
  163. data/test/test_htmlbuilder.rb +956 -76
  164. data/test/test_htmlutils.rb +0 -12
  165. data/test/test_i18n.rb +33 -33
  166. data/test/test_idgxmlbuilder.rb +568 -10
  167. data/test/test_idgxmlmaker_cmd.rb +50 -0
  168. data/test/test_image_finder.rb +52 -70
  169. data/test/test_img_math.rb +111 -0
  170. data/test/test_index.rb +62 -52
  171. data/test/test_indexbuilder.rb +52 -0
  172. data/test/test_latexbuilder.rb +1056 -30
  173. data/test/test_latexbuilder_v2.rb +52 -12
  174. data/test/test_lineinput.rb +20 -93
  175. data/test/test_logger.rb +7 -7
  176. data/test/test_makerhelper.rb +0 -12
  177. data/test/test_markdownbuilder.rb +32 -0
  178. data/test/test_pdfmaker.rb +100 -11
  179. data/test/test_pdfmaker_cmd.rb +101 -7
  180. data/test/test_plaintextbuilder.rb +531 -25
  181. data/test/test_review_ext.rb +2 -1
  182. data/test/test_reviewheaderlistener.rb +49 -0
  183. data/test/test_rstbuilder.rb +25 -1
  184. data/test/test_sec_counter.rb +156 -0
  185. data/test/test_template.rb +12 -2
  186. data/test/test_textmaker_cmd.rb +58 -0
  187. data/test/test_tocprinter.rb +46 -0
  188. data/test/test_topbuilder.rb +365 -10
  189. data/test/test_update.rb +44 -44
  190. data/test/test_webtocprinter.rb +75 -43
  191. data/test/test_zip_exporter.rb +5 -6
  192. data/vendor/gentombow/LICENSE +1 -1
  193. data/vendor/gentombow/Makefile +0 -1
  194. data/vendor/gentombow/bounddvi-en.pdf +0 -0
  195. data/vendor/gentombow/bounddvi-en.tex +1 -0
  196. data/vendor/gentombow/bounddvi.pdf +0 -0
  197. data/vendor/gentombow/bounddvi.sty +30 -7
  198. data/vendor/gentombow/bounddvi.tex +1 -0
  199. data/vendor/gentombow/create_archive.sh +1 -0
  200. data/vendor/gentombow/gentombow-ja.pdf +0 -0
  201. data/vendor/gentombow/gentombow-ja.tex +9 -0
  202. data/vendor/gentombow/gentombow.pdf +0 -0
  203. data/vendor/gentombow/gentombow.sty +32 -10
  204. data/vendor/gentombow/gentombow.tex +8 -0
  205. data/vendor/gentombow/tests/gentombow-01-pdfx.tex +8 -0
  206. data/vendor/gentombow/tests/gentombow-02-pdfx.tex +8 -0
  207. data/vendor/jsclasses/LICENSE +1 -1
  208. data/vendor/jsclasses/Makefile +3 -2
  209. data/vendor/jsclasses/create_archive.sh +5 -5
  210. data/vendor/jsclasses/jis/Makefile +3 -2
  211. data/vendor/jsclasses/jis/jsarticle.cls +74 -31
  212. data/vendor/jsclasses/jis/jsbook.cls +74 -31
  213. data/vendor/jsclasses/jis/jsclasses.dtx +176 -36
  214. data/vendor/jsclasses/jis/jsclasses.ins +15 -5
  215. data/vendor/jsclasses/jis/jslogo.dtx +4 -4
  216. data/vendor/jsclasses/jis/jslogo.ins +9 -0
  217. data/vendor/jsclasses/jis/jslogo.sty +4 -16
  218. data/vendor/jsclasses/jis/jspf.cls +73 -30
  219. data/vendor/jsclasses/jis/jsreport.cls +74 -31
  220. data/vendor/jsclasses/jis/jsverb.ins +9 -0
  221. data/vendor/jsclasses/jis/jsverb.sty +1 -13
  222. data/vendor/jsclasses/jis/kiyou.cls +74 -31
  223. data/vendor/jsclasses/jis/minijs.sty +65 -22
  224. data/vendor/jsclasses/jis/okumacro.dtx +4 -5
  225. data/vendor/jsclasses/jis/okumacro.ins +9 -0
  226. data/vendor/jsclasses/jis/okumacro.sty +4 -17
  227. data/vendor/jsclasses/jis/okuverb.ins +9 -0
  228. data/vendor/jsclasses/jis/okuverb.sty +1 -13
  229. data/vendor/jsclasses/jis/winjis.sty +23 -19
  230. data/vendor/jsclasses/jsarticle.cls +74 -31
  231. data/vendor/jsclasses/jsbook.cls +74 -31
  232. data/vendor/jsclasses/jsclasses.dtx +176 -36
  233. data/vendor/jsclasses/jsclasses.ins +15 -5
  234. data/vendor/jsclasses/jsclasses.pdf +0 -0
  235. data/vendor/jsclasses/jslogo.dtx +4 -4
  236. data/vendor/jsclasses/jslogo.ins +9 -0
  237. data/vendor/jsclasses/jslogo.pdf +0 -0
  238. data/vendor/jsclasses/jslogo.sty +4 -16
  239. data/vendor/jsclasses/jspf.cls +73 -30
  240. data/vendor/jsclasses/jsreport.cls +74 -31
  241. data/vendor/jsclasses/jsverb.ins +9 -0
  242. data/vendor/jsclasses/jsverb.pdf +0 -0
  243. data/vendor/jsclasses/jsverb.sty +1 -13
  244. data/vendor/jsclasses/kiyou.cls +74 -31
  245. data/vendor/jsclasses/minijs.sty +68 -22
  246. data/vendor/jsclasses/okumacro.dtx +4 -5
  247. data/vendor/jsclasses/okumacro.ins +9 -0
  248. data/vendor/jsclasses/okumacro.pdf +0 -0
  249. data/vendor/jsclasses/okumacro.sty +4 -17
  250. data/vendor/jsclasses/okuverb.ins +9 -0
  251. data/vendor/jsclasses/okuverb.pdf +0 -0
  252. data/vendor/jsclasses/okuverb.sty +1 -13
  253. data/vendor/jsclasses/tests/relfont.tex +10 -0
  254. data/vendor/jsclasses/winjis.sty +23 -19
  255. metadata +109 -20
  256. data/.rubocop_todo.yml +0 -7
  257. data/lib/epubmaker.rb +0 -23
  258. data/lib/epubmaker/content.rb +0 -110
  259. data/lib/epubmaker/epubcommon.rb +0 -441
  260. data/lib/epubmaker/epubv2.rb +0 -143
  261. data/lib/epubmaker/epubv3.rb +0 -233
  262. data/lib/epubmaker/producer.rb +0 -375
  263. data/lib/epubmaker/zip_exporter.rb +0 -81
  264. data/lib/lineinput.rb +0 -155
  265. data/lib/review/book/compilable.rb +0 -178
  266. data/lib/review/tocparser.rb +0 -271
  267. data/samples/syntax-book/review-ext.rb +0 -14
  268. data/test/test_tocparser.rb +0 -25
data/test/test_update.rb CHANGED
@@ -20,7 +20,7 @@ class UpdateTest < Test::Unit::TestCase
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,56 +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 '4.0'/, io.string)
100
- assert_equal 'review_version: 4.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
101
 
102
102
  File.write(File.join(@tmpdir, 'config.yml'), "review_version: 3.0\n")
103
103
 
104
104
  io = StringIO.new
105
- @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
105
+ @u.instance_eval { @logger = ReVIEW::Logger.new(io) }
106
106
  @u.parse_ymls(@tmpdir)
107
107
  @u.update_version
108
- assert_match(/Update 'review_version' to '4.0'/, io.string)
109
- assert_equal 'review_version: 4.0', File.read(File.join(@tmpdir, 'config.yml')).match(/review_version:.*$/).to_s
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
110
110
  end
111
111
 
112
112
  def test_update_version_current
113
- File.write(File.join(@tmpdir, 'config.yml'), "review_version: 4.0\n")
113
+ File.write(File.join(@tmpdir, 'config.yml'), "review_version: 5.0\n")
114
114
 
115
115
  io = StringIO.new
116
- @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
116
+ @u.instance_eval { @logger = ReVIEW::Logger.new(io) }
117
117
  @u.parse_ymls(@tmpdir)
118
118
  @u.update_version
119
119
  assert_equal '', io.string
120
- assert_equal 'review_version: 4.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
121
121
  end
122
122
 
123
123
  def test_update_version_newer
124
124
  File.write(File.join(@tmpdir, 'config.yml'), "review_version: 99.0\n")
125
125
 
126
126
  io = StringIO.new
127
- @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
127
+ @u.instance_eval { @logger = ReVIEW::Logger.new(io) }
128
128
  @u.parse_ymls(@tmpdir)
129
129
  @u.update_version
130
- assert_match(/Update 'review_version' to '4.0'/, io.string)
130
+ assert_match(/Update 'review_version' to '5.0'/, io.string)
131
131
  assert_equal 'review_version: 99.0', File.read(File.join(@tmpdir, 'config.yml')).match(/review_version:.*$/).to_s
132
132
  end
133
133
 
134
134
  def test_update_rakefile
135
135
  io = StringIO.new
136
- @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
136
+ @u.instance_eval { @logger = ReVIEW::Logger.new(io) }
137
137
  @u.update_rakefile(@tmpdir)
138
138
  assert_equal '', io.string
139
139
  assert_equal true, File.exist?(File.join(@tmpdir, 'Rakefile'))
@@ -142,7 +142,7 @@ EOT
142
142
 
143
143
  def test_update_rakefile_same
144
144
  io = StringIO.new
145
- @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
145
+ @u.instance_eval { @logger = ReVIEW::Logger.new(io) }
146
146
  @u.update_rakefile(@tmpdir)
147
147
  @u.update_rakefile(@tmpdir)
148
148
  assert_equal '', io.string
@@ -155,7 +155,7 @@ EOT
155
155
  FileUtils.mkdir_p(File.join(@tmpdir, 'lib/tasks'))
156
156
  File.write(File.join(@tmpdir, 'lib/tasks/review.rake'), '')
157
157
  io = StringIO.new
158
- @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
158
+ @u.instance_eval { @logger = ReVIEW::Logger.new(io) }
159
159
  @u.update_rakefile(@tmpdir)
160
160
  assert_match(/Rakefile will be overridden with/, io.string)
161
161
  assert_match(%r{lib/tasks/review\.rake will be overridden}, io.string)
@@ -166,7 +166,7 @@ EOT
166
166
  def test_update_epub_version_older
167
167
  File.write(File.join(@tmpdir, 'config.yml'), "epubversion: 2\nhtmlversion: 4\n")
168
168
  io = StringIO.new
169
- @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
169
+ @u.instance_eval { @logger = ReVIEW::Logger.new(io) }
170
170
  @u.parse_ymls(@tmpdir)
171
171
  @u.update_epub_version
172
172
  assert_match(/Update 'epubversion'/, io.string)
@@ -181,7 +181,7 @@ EOT
181
181
  def test_update_epub_version_current
182
182
  File.write(File.join(@tmpdir, 'config.yml'), "epubversion: 3\nhtmlversion: 5\n")
183
183
  io = StringIO.new
184
- @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
184
+ @u.instance_eval { @logger = ReVIEW::Logger.new(io) }
185
185
  @u.parse_ymls(@tmpdir)
186
186
  @u.update_epub_version
187
187
  assert_equal '', io.string
@@ -195,7 +195,7 @@ EOT
195
195
  def test_update_epub_version_newer
196
196
  File.write(File.join(@tmpdir, 'config.yml'), "epubversion: 99\nhtmlversion: 99\n")
197
197
  io = StringIO.new
198
- @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
198
+ @u.instance_eval { @logger = ReVIEW::Logger.new(io) }
199
199
  @u.parse_ymls(@tmpdir)
200
200
  @u.update_epub_version
201
201
  assert_equal '', io.string
@@ -209,7 +209,7 @@ EOT
209
209
  def test_update_locale_older
210
210
  File.write(File.join(@tmpdir, 'locale.yml'), %Q(locale: en\nchapter_quote: "'%s'"\n))
211
211
  io = StringIO.new
212
- @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
212
+ @u.instance_eval { @logger = ReVIEW::Logger.new(io) }
213
213
  @u.parse_ymls(@tmpdir)
214
214
  @u.update_locale
215
215
  assert_match(/'chapter_quote' now takes 2 values/, io.string)
@@ -223,7 +223,7 @@ EOT
223
223
  def test_update_locale_current
224
224
  File.write(File.join(@tmpdir, 'locale.yml'), %Q(locale: en\nchapter_quote: "'%s...%s'"\n))
225
225
  io = StringIO.new
226
- @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
226
+ @u.instance_eval { @logger = ReVIEW::Logger.new(io) }
227
227
  @u.parse_ymls(@tmpdir)
228
228
  @u.update_locale
229
229
  assert_equal '', io.string
@@ -237,7 +237,7 @@ EOT
237
237
  def test_update_tex_parameters_jsbook_to_review_jsbook
238
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))
239
239
  io = StringIO.new
240
- @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
240
+ @u.instance_eval { @logger = ReVIEW::Logger.new(io) }
241
241
  @u.parse_ymls(@tmpdir)
242
242
  @u.update_tex_parameters
243
243
  assert_match(/By default it is migrated to/, io.string)
@@ -251,7 +251,7 @@ EOT
251
251
  def test_update_tex_parameters_jsbook_to_review_jsbook_invalid
252
252
  File.write(File.join(@tmpdir, 'config.yml'), %Q(texdocumentclass: ["jsbook", "a5paper,invalid"]\n))
253
253
  io = StringIO.new
254
- @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
254
+ @u.instance_eval { @logger = ReVIEW::Logger.new(io) }
255
255
  @u.parse_ymls(@tmpdir)
256
256
  @u.update_tex_parameters
257
257
  assert_match(/couldn't be converted fully/, io.string)
@@ -265,7 +265,7 @@ EOT
265
265
  def test_update_tex_parameters_review_jsbook
266
266
  File.write(File.join(@tmpdir, 'config.yml'), %Q(texdocumentclass: ["review-jsbook", ""]\n))
267
267
  io = StringIO.new
268
- @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
268
+ @u.instance_eval { @logger = ReVIEW::Logger.new(io) }
269
269
  @u.parse_ymls(@tmpdir)
270
270
  @u.update_tex_parameters
271
271
  assert_equal '', io.string
@@ -278,7 +278,7 @@ EOT
278
278
  def test_update_tex_parameters_review_jsbook_obsoletekey
279
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))
280
280
  io = StringIO.new
281
- @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
281
+ @u.instance_eval { @logger = ReVIEW::Logger.new(io) }
282
282
  @u.parse_ymls(@tmpdir)
283
283
  @u.update_tex_parameters
284
284
  cont = <<EOT
@@ -290,7 +290,7 @@ EOT
290
290
  def test_update_tex_parameters_review_jlreq
291
291
  File.write(File.join(@tmpdir, 'config.yml'), %Q(texdocumentclass: ["review-jlreq", ""]\n))
292
292
  io = StringIO.new
293
- @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
293
+ @u.instance_eval { @logger = ReVIEW::Logger.new(io) }
294
294
  @u.parse_ymls(@tmpdir)
295
295
  @u.update_tex_parameters
296
296
  assert_equal '', io.string
@@ -303,7 +303,7 @@ EOT
303
303
  def test_update_tex_parameters_review_jsbook_review_jlreq
304
304
  File.write(File.join(@tmpdir, 'config.yml'), %Q(texdocumentclass: ["review-jsbook", ""]\n))
305
305
  io = StringIO.new
306
- @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
306
+ @u.instance_eval { @logger = ReVIEW::Logger.new(io) }
307
307
  @u.parse_ymls(@tmpdir)
308
308
  @u.specified_template = 'review-jlreq'
309
309
  @u.update_tex_parameters
@@ -317,7 +317,7 @@ EOT
317
317
  def test_update_tex_parameters_unknownclass
318
318
  File.write(File.join(@tmpdir, 'config.yml'), %Q(texdocumentclass: ["unknown", ""]\n))
319
319
  io = StringIO.new
320
- @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
320
+ @u.instance_eval { @logger = ReVIEW::Logger.new(io) }
321
321
  @u.parse_ymls(@tmpdir)
322
322
  @u.update_tex_parameters
323
323
  assert_match(/unknown class/, io.string)
@@ -330,7 +330,7 @@ EOT
330
330
  def test_update_tex_parameters_jsbook_unknownclass
331
331
  File.write(File.join(@tmpdir, 'config.yml'), %Q(texdocumentclass: ["jsbook", ""]\n))
332
332
  io = StringIO.new
333
- @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
333
+ @u.instance_eval { @logger = ReVIEW::Logger.new(io) }
334
334
  @u.parse_ymls(@tmpdir)
335
335
  @u.specified_template = 'unknown'
336
336
  @u.update_tex_parameters
@@ -344,7 +344,7 @@ EOT
344
344
  def test_update_tex_parameters_jsbook_to_review_jlreq
345
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))
346
346
  io = StringIO.new
347
- @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
347
+ @u.instance_eval { @logger = ReVIEW::Logger.new(io) }
348
348
  @u.parse_ymls(@tmpdir)
349
349
  @u.specified_template = 'review-jlreq'
350
350
  @u.update_tex_parameters
@@ -358,7 +358,7 @@ EOT
358
358
 
359
359
  def test_update_stys_new
360
360
  io = StringIO.new
361
- @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
361
+ @u.instance_eval { @logger = ReVIEW::Logger.new(io) }
362
362
  @u.update_tex_stys('review-jsbook', @tmpdir)
363
363
  assert_equal '', io.string
364
364
  assert_equal true, File.exist?(File.join(@tmpdir, 'sty/review-base.sty'))
@@ -368,7 +368,7 @@ EOT
368
368
 
369
369
  def test_update_stys_new_custom
370
370
  io = StringIO.new
371
- @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
371
+ @u.instance_eval { @logger = ReVIEW::Logger.new(io) }
372
372
  @u.update_tex_stys('review-jsbook', @tmpdir)
373
373
  assert_equal '', io.string
374
374
  File.write(File.join(@tmpdir, 'sty/review-custom.sty'), "% MY CUSTOM\n")
@@ -379,20 +379,20 @@ EOT
379
379
 
380
380
  def test_update_stys_modified
381
381
  io = StringIO.new
382
- @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
382
+ @u.instance_eval { @logger = ReVIEW::Logger.new(io) }
383
383
  @u.update_tex_stys('review-jsbook', @tmpdir)
384
384
  cont = File.read(File.join(@tmpdir, 'sty/review-base.sty'))
385
385
 
386
386
  File.write(File.join(@tmpdir, 'sty/review-base.sty'), "% MODIFIED\n")
387
387
  @u.update_tex_stys('review-jsbook', @tmpdir)
388
- assert_match(/review\-base\.sty will be overridden/, io.string)
388
+ assert_match(/review-base\.sty will be overridden/, io.string)
389
389
  assert_equal cont, File.read(File.join(@tmpdir, 'sty/review-base.sty'))
390
390
  end
391
391
 
392
392
  def test_update_tex_command
393
393
  File.write(File.join(@tmpdir, 'config.yml'), %Q(texcommand: "/Program Files/up-latex --shell-escape -v"\n))
394
394
  io = StringIO.new
395
- @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
395
+ @u.instance_eval { @logger = ReVIEW::Logger.new(io) }
396
396
  @u.parse_ymls(@tmpdir)
397
397
  @u.update_tex_command
398
398
  assert_match(/has options/, io.string)
@@ -406,7 +406,7 @@ EOT
406
406
  def test_update_tex_command_noopt
407
407
  File.write(File.join(@tmpdir, 'config.yml'), %Q(texcommand: "/Program Files/up-latex"\n))
408
408
  io = StringIO.new
409
- @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
409
+ @u.instance_eval { @logger = ReVIEW::Logger.new(io) }
410
410
  @u.parse_ymls(@tmpdir)
411
411
  @u.update_tex_command
412
412
  assert_equal '', io.string
@@ -419,7 +419,7 @@ EOT
419
419
  def test_update_tex_command_withopt
420
420
  File.write(File.join(@tmpdir, 'config.yml'), %Q(texcommand: "/Program Files/up-latex --shell-escape -v"\ntexoptions: "-myopt"\n))
421
421
  io = StringIO.new
422
- @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
422
+ @u.instance_eval { @logger = ReVIEW::Logger.new(io) }
423
423
  @u.parse_ymls(@tmpdir)
424
424
  @u.update_tex_command
425
425
  assert_match(/has options/, io.string)
@@ -433,7 +433,7 @@ EOT
433
433
  def test_update_dvi_command
434
434
  File.write(File.join(@tmpdir, 'config.yml'), %Q(dvicommand: "/Program Files/dvi-pdfmx -q --quiet"\n))
435
435
  io = StringIO.new
436
- @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
436
+ @u.instance_eval { @logger = ReVIEW::Logger.new(io) }
437
437
  @u.parse_ymls(@tmpdir)
438
438
  @u.update_dvi_command
439
439
  assert_match(/has options/, io.string)
@@ -447,7 +447,7 @@ EOT
447
447
  def test_update_dvi_command_noopt
448
448
  File.write(File.join(@tmpdir, 'config.yml'), %Q(dvicommand: "/Program Files/dvi-pdfmx"\n))
449
449
  io = StringIO.new
450
- @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
450
+ @u.instance_eval { @logger = ReVIEW::Logger.new(io) }
451
451
  @u.parse_ymls(@tmpdir)
452
452
  @u.update_dvi_command
453
453
  assert_equal '', io.string
@@ -460,7 +460,7 @@ EOT
460
460
  def test_update_dvi_command_withopt
461
461
  File.write(File.join(@tmpdir, 'config.yml'), %Q(dvicommand: "/Program Files/dvi-pdfmx -q --quiet"\ndvioptions: "-myopt"\n))
462
462
  io = StringIO.new
463
- @u.instance_eval{ @logger = ReVIEW::Logger.new(io) }
463
+ @u.instance_eval { @logger = ReVIEW::Logger.new(io) }
464
464
  @u.parse_ymls(@tmpdir)
465
465
  @u.update_dvi_command
466
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