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
@@ -2,6 +2,10 @@ require 'book_test_helper'
2
2
  class ChapterTest < Test::Unit::TestCase
3
3
  include BookTestHelper
4
4
 
5
+ def setup
6
+ I18n.setup
7
+ end
8
+
5
9
  def test_initialize
6
10
  ch = Book::Chapter.new(:book, :number, :name, '/foo/bar', :io)
7
11
  assert_equal :book, ch.book
@@ -37,11 +41,13 @@ class ChapterTest < Test::Unit::TestCase
37
41
 
38
42
  def test_size
39
43
  ch = Book::Chapter.new(nil, nil, nil, __FILE__, :io)
40
- assert_equal File.size(__FILE__), ch.size
44
+ filesize = IO.read(__FILE__, mode: 'rt:BOM|utf-8').size
45
+ assert_equal filesize, ch.size
41
46
 
42
47
  File.open(__FILE__, 'r') do |i|
43
48
  ch = Book::Chapter.new(nil, nil, nil, nil, i)
44
- assert_equal File.size(__FILE__), ch.size
49
+ filesize = IO.read(__FILE__, mode: 'rt:BOM|utf-8').size
50
+ assert_equal filesize, ch.size
45
51
  end
46
52
  end
47
53
 
@@ -64,6 +70,7 @@ class ChapterTest < Test::Unit::TestCase
64
70
 
65
71
  book = Book::Base.new
66
72
  ch = Book::Chapter.new(book, nil, nil, tf.path)
73
+ ch.generate_indexes
67
74
  assert_equal lines, ch.lines
68
75
 
69
76
  lines = ["1\n", "2\n", '3']
@@ -76,6 +83,7 @@ class ChapterTest < Test::Unit::TestCase
76
83
  tf2.close
77
84
 
78
85
  ch = Book::Chapter.new(book, nil, nil, tf1.path, tf2.path)
86
+ ch.generate_indexes
79
87
  assert_equal lines, ch.lines # XXX: OK?
80
88
  end
81
89
 
@@ -101,20 +109,20 @@ class ChapterTest < Test::Unit::TestCase
101
109
  end
102
110
 
103
111
  def test_on_chaps?
104
- mktmpbookdir 'CHAPS' => "chapter1.re\nchapter2.re",
105
- 'chapter1.re' => '12345', 'preface.re' => 'abcde' do |dir, book, files|
112
+ mktmpbookdir('CHAPS' => "chapter1.re\nchapter2.re",
113
+ 'chapter1.re' => '12345', 'preface.re' => 'abcde') do |dir, book, files|
106
114
  ch1 = Book::Chapter.new(book, 1, 'chapter1', files['chapter1.re'])
107
115
  pre = Book::Chapter.new(book, nil, 'preface', files['preface.re'])
108
116
 
109
117
  assert ch1.on_chaps?
110
118
  assert !pre.on_chaps?
111
119
 
112
- ch2_path = File.join(dir, 'chapter2.er')
113
- File.open(ch2_path, 'w') {}
120
+ ch2_path = File.join(dir, 'chapter2.re')
121
+ FileUtils.touch(ch2_path)
114
122
  ch2 = Book::Chapter.new(book, 2, 'chapter2', ch2_path)
115
123
 
116
- ch3_path = File.join(dir, 'chapter3.er')
117
- File.open(ch3_path, 'w') {}
124
+ ch3_path = File.join(dir, 'chapter3.re')
125
+ FileUtils.touch(ch3_path)
118
126
  ch3 = Book::Chapter.new(book, 3, 'chapter3', ch3_path)
119
127
 
120
128
  assert ch2.on_chaps?
@@ -122,50 +130,70 @@ class ChapterTest < Test::Unit::TestCase
122
130
  end
123
131
  end
124
132
 
133
+ def test_invalid_encoding
134
+ mktmpbookdir('CHAPS' => 'chapter1.re',
135
+ 'chapter1.re' => "= 日本語UTF-8\n") do |_dir, book, files|
136
+ assert Book::Chapter.new(book, 1, 'chapter1', files['chapter1.re'])
137
+ end
138
+
139
+ # UTF-16LE UTF-16BE UTF-32LE UTF-32BE cause error on Windows
140
+ %w[CP932 SHIFT_JIS EUC-JP].each do |enc|
141
+ mktmpbookdir('CHAPS' => 'chapter1.re',
142
+ 'chapter1.re' => "= 日本語UTF-8\n".encode(enc)) do |_dir, book, files|
143
+ e = assert_raises(ReVIEW::CompileError) { Book::Chapter.new(book, 1, 'chapter1', files['chapter1.re']) }
144
+ assert_equal 'chapter1: invalid byte sequence in UTF-8', e.message
145
+ end
146
+ end
147
+ end
148
+
125
149
  def test_list_index
126
150
  do_test_index(<<E, Book::ListIndex, :list_index, :list)
127
- //list
128
- //listnum [abc]
129
- //list [def]
130
- //table [def]
131
- //table [others]
151
+ //listnum[abc][abc-listnum]{
152
+ //}
153
+ //list[def][def-list]{
154
+ //}
155
+ //table[def]{
156
+ //}
157
+ //table[others]{
158
+ //}
132
159
  E
133
160
  end
134
161
 
135
162
  def test_table_index
136
163
  do_test_index(<<E, Book::TableIndex, :table_index, :table)
137
- //table
138
- //table [abc]
139
- //table [def]
140
- //list [def]
141
- //list [others]
164
+ //table[abc]{
165
+ //}
166
+ //table[def]{
167
+ //}
168
+ //list[def][def-list]{
169
+ //}
170
+ //list[others][other-list]{
171
+ //}
142
172
  E
143
173
  end
144
174
 
145
175
  def test_footnote_index
146
176
  content = <<E
147
- //footnote
148
- //footnote [abc][text...]
149
- //footnote [def][text...]
150
- //footnote [xyz]
151
- //list [def]
152
- //list [others]
177
+ //footnote[abc][textabc...]
178
+ //footnote[def][textdef...]
179
+ //footnote[xyz][textxyz...]
180
+ //list[def][def-list]{
181
+ //}
182
+ //list[others][others-list]{
183
+ //}
153
184
  E
154
185
  do_test_index(content, Book::FootnoteIndex, :footnote_index, :footnote) do |ch|
155
186
  assert_raises ReVIEW::KeyError do
156
- ch.footnote('xyz')
187
+ ch.footnote('xyz2')
157
188
  end
158
189
  end
159
190
  end
160
191
 
161
192
  def test_bibpaper
162
193
  do_test_index(<<E, Book::BibpaperIndex, :bibpaper_index, :bibpaper, filename: 'bib.re')
163
- //bibpaper
164
- //bibpaper [abc][text...]
165
- //bibpaper [def][text...]
166
- //bibpaper [xyz]
167
- //list [def]
168
- //list [others]
194
+ //bibpaper[abc][text...]
195
+ //bibpaper[def][text...]
196
+ //bibpaper[xyz][text...]
169
197
  E
170
198
  assert_raises FileNotFound do
171
199
  do_test_index('', Book::BibpaperIndex, :bibpaper_index, :bibpaper, filename: 'bib')
@@ -174,11 +202,12 @@ E
174
202
 
175
203
  def test_headline_index
176
204
  do_test_index(<<E, Book::HeadlineIndex, :headline_index, :headline, propagate: false)
177
- ==
205
+ == x
178
206
  == abc
179
207
  == def
180
208
  === def
181
- //table others
209
+ //table[others]{
210
+ //}
182
211
  E
183
212
  end
184
213
 
@@ -202,35 +231,47 @@ E
202
231
 
203
232
  def test_image
204
233
  do_test_index(<<E, Book::ImageIndex, :image_index, :image)
205
- //image
206
- //image [abc]
207
- //image [def]
208
- //list [def]
209
- //list [others]
234
+ //image[abc][abc-image]{
235
+ //}
236
+ //image[def][abc-image]{
237
+ //}
238
+ //list[def][def-list]{
239
+ //}
240
+ //list[others][others-list]{
241
+ //}
210
242
  E
211
243
 
212
244
  do_test_index(<<E, Book::NumberlessImageIndex, :numberless_image_index, :image, propagate: false)
213
- //numberlessimage
214
- //numberlessimage [abc]
215
- //numberlessimage [def]
216
- //list [def]
217
- //list [others]
245
+ //numberlessimage[abc]{
246
+ //}
247
+ //numberlessimage[def]{
248
+ //}
249
+ //list[def][def-list]{
250
+ //}
251
+ //list[others][others-list]{
252
+ //}
218
253
  E
219
254
 
220
255
  do_test_index(<<E, Book::ImageIndex, :image_index, :image)
221
- //image
222
- //numberlessimage [abc]
223
- //image [def]
224
- //list [def]
225
- //list [others]
256
+ //numberlessimage[abc]{
257
+ //}
258
+ //image[def][def-image]{
259
+ //}
260
+ //list[def][def-list]{
261
+ //}
262
+ //list[others][others-list]{
263
+ //}
226
264
  E
227
265
 
228
266
  do_test_index(<<E, Book::NumberlessImageIndex, :numberless_image_index, :image, propagate: false)
229
- //image
230
- //numberlessimage [abc]
231
- //image [def]
232
- //list [def]
233
- //list [others]
267
+ //numberlessimage[abc]{
268
+ //}
269
+ //image[def][def-image]{
270
+ //}
271
+ //list[def][def-list]{
272
+ //}
273
+ //list[others][others-list]{
274
+ //}
234
275
  E
235
276
  end
236
277
 
@@ -238,13 +279,15 @@ E
238
279
  Dir.mktmpdir do |dir|
239
280
  path = File.join(dir, opts[:filename] || 'chapter.re')
240
281
 
241
- book = Book::Base.new(dir)
242
-
243
282
  File.open(path, 'w') do |o|
244
283
  o.print content
245
284
  end
246
- ch = Book::Chapter.new(book, 1, 'chapter', path)
247
285
 
286
+ book = Book::Base.new(dir)
287
+
288
+ ch = Book::Chapter.new(book, 1, 'chapter', path)
289
+ book.generate_indexes
290
+ ch.generate_indexes
248
291
  assert ch.__send__(ref_method, 'abc')
249
292
  assert ch.__send__(ref_method, 'def')
250
293
  assert_raises ReVIEW::KeyError do
@@ -46,8 +46,8 @@ class PartTest < Test::Unit::TestCase
46
46
 
47
47
  part = Book::Part.new(book, nil, chs)
48
48
  assert part.volume
49
- assert part.volume.bytes > 0
50
- assert part.volume.chars > 0
51
- assert part.volume.lines > 0
49
+ assert part.volume.bytes == 0
50
+ assert part.volume.chars == 0
51
+ assert part.volume.lines == 0
52
52
  end
53
53
  end
data/test/test_builder.rb CHANGED
@@ -24,7 +24,7 @@ class BuidlerTest < Test::Unit::TestCase
24
24
 
25
25
  def test_bind
26
26
  b = Builder.new
27
- chap = ReVIEW::Book::Chapter.new(ReVIEW::Book::Base.load, nil, '-', nil)
27
+ chap = ReVIEW::Book::Chapter.new(ReVIEW::Book::Base.new, nil, '-', nil)
28
28
  assert_nothing_raised do
29
29
  b.bind(nil, chap, nil)
30
30
  end
@@ -37,7 +37,7 @@ class BuidlerTest < Test::Unit::TestCase
37
37
  end
38
38
 
39
39
  b = Builder.new
40
- chapter = ReVIEW::Book::Chapter.new(ReVIEW::Book::Base.load, nil, '-', nil)
40
+ chapter = ReVIEW::Book::Chapter.new(ReVIEW::Book::Base.new, nil, '-', nil)
41
41
  b.bind(nil, chapter, nil)
42
42
  assert_equal '', b.result
43
43
  end
@@ -82,7 +82,7 @@ class BuidlerTest < Test::Unit::TestCase
82
82
 
83
83
  def test_inline_missing_ref
84
84
  b = Builder.new
85
- chapter = ReVIEW::Book::Chapter.new(ReVIEW::Book::Base.load, 1, 'chap1', nil, StringIO.new)
85
+ chapter = ReVIEW::Book::Chapter.new(ReVIEW::Book::Base.new, 1, 'chap1', nil, StringIO.new)
86
86
  b.bind(nil, chapter, nil)
87
87
  e = assert_raises(ReVIEW::ApplicationError) { b.inline_list('unknown|list1') }
88
88
  assert_equal ': error: unknown list: unknown|list1', e.message
@@ -96,20 +96,29 @@ class BuidlerTest < Test::Unit::TestCase
96
96
  assert_equal ': error: unknown footnote: unknown|footnote1', e.message
97
97
  end
98
98
 
99
- class XBuilder < Builder
100
- def list_header(id, caption)
101
- end
102
-
103
- def list_body(lines)
104
- end
105
-
106
- def listnum_body(lines)
107
- end
99
+ def test_nest_error
100
+ b = XBuilder.new
101
+ b.children = nil
102
+ assert_equal '', b.solve_nest('')
103
+ b.children = ['dl']
104
+ e = assert_raises(ReVIEW::ApplicationError) { b.solve_nest('') }
105
+ assert_equal ': error: //beginchild of dl misses //endchild', e.message
106
+ b.children = ['ul', 'dl', 'ol']
107
+ e = assert_raises(ReVIEW::ApplicationError) { b.solve_nest('') }
108
+ assert_equal ': error: //beginchild of ol,dl,ul misses //endchild', e.message
109
+
110
+ assert_equal "\u0001→/ol←\u0001", b.endchild
111
+ assert_equal "\u0001→/dl←\u0001", b.endchild
112
+ assert_equal "\u0001→/ul←\u0001", b.endchild
113
+ e = assert_raises(ReVIEW::ApplicationError) { b.endchild }
114
+ assert_equal ": error: //endchild is shown, but any opened //beginchild doesn't exist", e.message
115
+ end
108
116
 
109
- def source_header(caption)
110
- end
117
+ class XBuilder < Builder
118
+ attr_accessor :children
111
119
 
112
- def source_body(lines)
120
+ def puts(s)
121
+ s
113
122
  end
114
123
  end
115
124
  end
data/test/test_catalog.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'test_helper'
2
+ require 'book_test_helper'
2
3
  require 'review/catalog'
3
4
 
4
5
  class CatalogTest < Test::Unit::TestCase
@@ -7,61 +8,43 @@ class CatalogTest < Test::Unit::TestCase
7
8
 
8
9
  def test_predef
9
10
  sut = Catalog.new(yaml)
10
- exp = <<-EOS
11
- pre01.re
12
- pre02.re
13
- EOS
14
- assert_equal(exp.chomp, sut.predef)
11
+ exp = %w[pre01.re pre02.re]
12
+ assert_equal(exp, sut.predef)
15
13
  end
16
14
 
17
15
  def test_chaps
18
16
  sut = Catalog.new(yaml)
19
- exp = <<-EOS
20
- ch01.re
21
- ch02.re
22
- EOS
23
- assert_equal(exp.chomp, sut.chaps)
17
+ exp = %w[ch01.re ch02.re]
18
+ assert_equal(exp, sut.chaps)
24
19
  end
25
20
 
26
21
  def test_chaps_empty
27
22
  yaml = StringIO.new
28
23
  sut = Catalog.new(yaml)
29
- assert_equal('', sut.chaps)
24
+ assert_equal([], sut.chaps)
30
25
  end
31
26
 
32
27
  def test_appendix
33
28
  sut = Catalog.new(yaml)
34
- exp = <<-EOS
35
- post01.re
36
- post02.re
37
- EOS
38
- assert_equal(exp.chomp, sut.appendix)
29
+ exp = %w[post01.re post02.re]
30
+ assert_equal(exp, sut.appendix)
39
31
  end
40
32
 
41
33
  def test_chaps_with_parts
42
34
  sut = Catalog.new(yaml_with_parts)
43
- exp = <<-EOS
44
- ch01.re
45
- ch02.re
46
- ch03.re
47
- ch04.re
48
- ch05.re
49
- EOS
50
- assert_equal(exp.chomp, sut.chaps)
35
+ exp = %w[ch01.re ch02.re ch03.re ch04.re ch05.re]
36
+ assert_equal(exp, sut.chaps)
51
37
  end
52
38
 
53
39
  def test_parts
54
40
  sut = Catalog.new(yaml_with_parts)
55
- exp = <<-EOS
56
- part1.re
57
- part2.re
58
- EOS
59
- assert_equal(exp.chomp, sut.parts)
41
+ exp = %w[part1.re part2.re]
42
+ assert_equal(exp, sut.parts)
60
43
  end
61
44
 
62
45
  def test_parts_with_empty
63
46
  sut = Catalog.new(yaml)
64
- assert_equal('', sut.parts)
47
+ assert_equal([], sut.parts)
65
48
  end
66
49
 
67
50
  def test_empty_parts
@@ -80,20 +63,14 @@ part2.re
80
63
 
81
64
  def test_postdef
82
65
  sut = Catalog.new(yaml)
83
- exp = <<-EOS
84
- back01.re
85
- back02.re
86
- EOS
87
- assert_equal(exp.chomp, sut.postdef)
66
+ exp = %w[back01.re back02.re]
67
+ assert_equal(exp, sut.postdef)
88
68
  end
89
69
 
90
70
  def test_from_object
91
71
  sut = Catalog.new(yaml_hash)
92
- exp = <<-EOS
93
- ch01.re
94
- ch02.re
95
- EOS
96
- assert_equal(exp.chomp, sut.chaps)
72
+ exp = %w[ch01.re ch02.re]
73
+ assert_equal(exp, sut.chaps)
97
74
  end
98
75
 
99
76
  def test_validate
@@ -154,7 +131,7 @@ ch02.re
154
131
  private
155
132
 
156
133
  def yaml
157
- StringIO.new <<-EOS
134
+ StringIO.new(<<-EOS)
158
135
 
159
136
  PREDEF:
160
137
  - pre01.re
@@ -182,7 +159,7 @@ POSTDEF:
182
159
  end
183
160
 
184
161
  def yaml_with_parts
185
- StringIO.new <<-EOS
162
+ StringIO.new(<<-EOS)
186
163
  CHAPS:
187
164
  - ch01.re
188
165
  - part1.re: