review 1.2.0 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (78) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +36 -0
  3. data/.rubocop.yml +1 -0
  4. data/ChangeLog +102 -0
  5. data/README.rdoc +2 -2
  6. data/bin/review-check +18 -16
  7. data/bin/review-compile +49 -42
  8. data/bin/review-epubmaker +23 -993
  9. data/bin/review-epubmaker-legacy +1024 -0
  10. data/bin/review-index +17 -15
  11. data/bin/review-init +39 -9
  12. data/bin/review-pdfmaker +124 -89
  13. data/bin/review-preproc +16 -14
  14. data/bin/review-vol +17 -15
  15. data/debian/docs +1 -1
  16. data/doc/catalog.rdoc +34 -0
  17. data/doc/format.rdoc +16 -2
  18. data/doc/libepubmaker/{config.yaml → config.yml} +63 -19
  19. data/doc/quickstart.rdoc +1 -1
  20. data/doc/{sample.yaml → sample.yml} +0 -0
  21. data/lib/epubmaker.rb +1 -1
  22. data/lib/epubmaker/content.rb +9 -1
  23. data/lib/epubmaker/epubv2.rb +59 -7
  24. data/lib/epubmaker/epubv3.rb +14 -9
  25. data/lib/epubmaker/producer.rb +68 -27
  26. data/lib/epubmaker/resource.rb +3 -1
  27. data/lib/lineinput.rb +2 -2
  28. data/lib/review/book/base.rb +125 -24
  29. data/lib/review/book/chapter.rb +42 -0
  30. data/lib/review/book/compilable.rb +23 -4
  31. data/lib/review/book/image_finder.rb +64 -0
  32. data/lib/review/book/index.rb +64 -50
  33. data/lib/review/book/page_metric.rb +1 -1
  34. data/lib/review/builder.rb +19 -12
  35. data/lib/review/catalog.rb +47 -0
  36. data/lib/review/compiler.rb +3 -2
  37. data/lib/review/configure.rb +5 -3
  38. data/lib/review/epubmaker.rb +130 -46
  39. data/lib/review/ewbbuilder.rb +27 -31
  40. data/lib/review/extentions/string.rb +4 -4
  41. data/lib/review/htmlbuilder.rb +140 -79
  42. data/lib/review/htmllayout.rb +26 -4
  43. data/lib/review/htmlutils.rb +20 -1
  44. data/lib/review/i18n.rb +5 -2
  45. data/lib/review/{i18n.yaml → i18n.yml} +4 -2
  46. data/lib/review/idgxmlbuilder.rb +65 -39
  47. data/lib/review/latexbuilder.rb +72 -24
  48. data/lib/review/latexutils.rb +3 -1
  49. data/lib/review/makerhelper.rb +8 -2
  50. data/lib/review/preprocessor.rb +20 -20
  51. data/lib/review/review.tex.erb +4 -0
  52. data/lib/review/sec_counter.rb +9 -11
  53. data/lib/review/tocparser.rb +2 -2
  54. data/lib/review/tocprinter.rb +12 -12
  55. data/lib/review/topbuilder.rb +15 -15
  56. data/lib/review/version.rb +1 -1
  57. data/lib/uuid.rb +7 -7
  58. data/review.gemspec +2 -2
  59. data/rubocop-todo.yml +443 -0
  60. data/test/sample-book/src/config.yml +2 -2
  61. data/test/sample-book/src/{main.css → style.css} +0 -0
  62. data/test/test_book.rb +46 -48
  63. data/test/test_book_chapter.rb +25 -13
  64. data/test/test_builder.rb +3 -3
  65. data/test/test_catalog.rb +107 -0
  66. data/test/test_epubmaker.rb +6 -6
  67. data/test/test_htmlbuilder.rb +160 -39
  68. data/test/test_htmlutils.rb +22 -0
  69. data/test/test_i18n.rb +2 -2
  70. data/test/test_idgxmlbuilder.rb +33 -47
  71. data/test/test_image_finder.rb +82 -0
  72. data/test/test_inaobuilder.rb +1 -1
  73. data/test/test_latexbuilder.rb +35 -39
  74. data/test/test_lineinput.rb +2 -2
  75. data/test/test_markdownbuilder.rb +2 -2
  76. data/test/test_topbuilder.rb +39 -23
  77. metadata +23 -14
  78. data/bin/review-epubmaker-ng +0 -23
@@ -38,13 +38,13 @@ coverimage: cover.jpg
38
38
  # 固有IDに使用するドメイン
39
39
  urnid: http://tatsu-zine.com/books/review-sample-book/1.0.0/
40
40
  # CSSファイル (yamlファイルおよびRe:VIEWファイルを置いたディレクトリにあること
41
- stylesheet: main.css
41
+ stylesheet: style.css
42
42
  # 目次として抽出するレベル
43
43
  toclevel: 2
44
44
  # セクション番号を表示するレベル
45
45
  secnolevel: 3
46
46
  # review-compileに渡すパラメータ
47
- params: --stylesheet=main.css
47
+ params: --stylesheet=style.css
48
48
  # 目次生成用?
49
49
  mytoc: true
50
50
  # 奥付生成用
@@ -17,24 +17,6 @@ class BookTest < Test::Unit::TestCase
17
17
  Dir.chdir(dir) do
18
18
  assert_same_path dir, File.expand_path(Book.load_default.basedir), "error in dir CHAPS"
19
19
  end
20
-
21
- subdir = File.join(dir, 'sub')
22
- Dir.mkdir(subdir)
23
- Dir.chdir(subdir) do
24
- assert_same_path dir, File.expand_path(Book.load_default.basedir), "error in dir sub"
25
- end
26
-
27
- sub2dir = File.join(dir, 'sub', 'sub')
28
- Dir.mkdir(sub2dir)
29
- Dir.chdir(sub2dir) do
30
- assert_same_path dir, File.expand_path(Book.load_default.basedir), "error in dir sub sub"
31
- end
32
-
33
- sub3dir = File.join(dir, 'sub', 'sub', 'sub')
34
- Dir.mkdir(sub3dir)
35
- Dir.chdir(sub3dir) do
36
- assert_same_path sub3dir, File.expand_path(Book.load_default.basedir), "error in dir sub sub sub"
37
- end
38
20
  end
39
21
 
40
22
  # tests for ReVIEW.book
@@ -76,19 +58,6 @@ class BookTest < Test::Unit::TestCase
76
58
  assert_equal save_load_path, $LOAD_PATH
77
59
  end
78
60
 
79
- begin
80
- Dir.mktmpdir do |dir|
81
- local_lib_path = File.join(dir, 'lib')
82
- Dir.mkdir(local_lib_path)
83
- Dir.mkdir(File.join(local_lib_path, 'review'))
84
- Book.update_rubyenv(dir)
85
- assert save_load_path != $LOAD_PATH
86
- assert $LOAD_PATH.index(local_lib_path)
87
- end
88
- ensure
89
- $LOAD_PATH.replace save_load_path
90
- end
91
-
92
61
  num = rand(99999)
93
62
  test_const = "ReVIEW__BOOK__TEST__#{num}"
94
63
  begin
@@ -171,10 +140,19 @@ class BookTest < Test::Unit::TestCase
171
140
  end
172
141
  end
173
142
 
143
+ # backword compatible
174
144
  def test_setParameter
175
145
  book = Book::Base.new(File.dirname(__FILE__))
176
146
  book.param = :test
177
- assert_equal :test, book.instance_eval {@param}
147
+ assert_equal :test, book.param # old way
148
+ assert_equal :test, book.config # new way
149
+ end
150
+
151
+ def test_setConfig
152
+ book = Book::Base.new(File.dirname(__FILE__))
153
+ book.config = :test
154
+ assert_equal :test, book.param # old way
155
+ assert_equal :test, book.config # new way
178
156
  end
179
157
 
180
158
  def test_parse_chapters
@@ -310,7 +288,7 @@ EOC
310
288
  end
311
289
 
312
290
  mktmpbookdir 'preface.re' => '',
313
- 'PREDEF' => '' do |dir, book, files|
291
+ 'PREDEF' => '' do |dir, book, files|
314
292
  assert_equal nil, book.prefaces # XXX: OK?
315
293
  end
316
294
 
@@ -319,7 +297,7 @@ EOC
319
297
  end
320
298
 
321
299
  mktmpbookdir 'PREDEF' => 'chapter1',
322
- 'chapter1.re' => '' do |dir, book, files|
300
+ 'chapter1.re' => '' do |dir, book, files|
323
301
  assert_kind_of Book::Part, book.prefaces
324
302
  assert_equal '', book.prefaces.name
325
303
  assert_equal 1, book.prefaces.chapters.size
@@ -328,7 +306,7 @@ EOC
328
306
  end
329
307
 
330
308
  mktmpbookdir 'PREDEF' => "chapter1\n\nchapter2",
331
- 'chapter1.re' => '', 'chapter2.re' => '' do |dir, book, files|
309
+ 'chapter1.re' => '', 'chapter2.re' => '' do |dir, book, files|
332
310
  assert_kind_of Book::Part, book.prefaces
333
311
  assert_equal '', book.prefaces.name
334
312
  assert_equal 2, book.prefaces.chapters.size
@@ -339,7 +317,7 @@ EOC
339
317
  end
340
318
 
341
319
  mktmpbookdir 'PREDEF' => "chapter1 chapter2",
342
- 'chapter1.re' => '', 'chapter2.re' => '' do |dir, book, files|
320
+ 'chapter1.re' => '', 'chapter2.re' => '' do |dir, book, files|
343
321
  assert_kind_of Book::Part, book.prefaces
344
322
  assert_equal '', book.prefaces.name
345
323
  assert_equal 2, book.prefaces.chapters.size # XXX: OK?
@@ -352,14 +330,14 @@ EOC
352
330
  end
353
331
 
354
332
  mktmpbookdir 'PREDEF' => 'chapter1.re',
355
- 'chapter1.re' => '' do |dir, book, files|
333
+ 'chapter1.re' => '' do |dir, book, files|
356
334
  assert_kind_of Book::Part, book.prefaces
357
335
  assert_equal '', book.prefaces.name
358
336
  assert_equal 1, book.prefaces.chapters.size
359
337
  end
360
338
 
361
339
  mktmpbookdir 'PREDEF' => 'chapter1.txt',
362
- 'chapter1.txt' => '' do |dir, book, files|
340
+ 'chapter1.txt' => '' do |dir, book, files|
363
341
  assert_kind_of Book::Part, book.prefaces
364
342
  assert_equal '', book.prefaces.name
365
343
  assert_equal 1, book.prefaces.chapters.size
@@ -390,7 +368,7 @@ EOC
390
368
  end
391
369
 
392
370
  mktmpbookdir 'appendix.re' => '',
393
- 'postscript.re' => '' do |dir, book, files|
371
+ 'postscript.re' => '' do |dir, book, files|
394
372
  assert_kind_of Book::Part, book.postscripts
395
373
  assert_equal '', book.postscripts.name
396
374
  assert_equal 2, book.postscripts.chapters.size
@@ -403,7 +381,7 @@ EOC
403
381
  end
404
382
 
405
383
  mktmpbookdir 'preface.re' => '',
406
- 'POSTDEF' => '' do |dir, book, files|
384
+ 'POSTDEF' => '' do |dir, book, files|
407
385
  assert_equal nil, book.postscripts # XXX: OK?
408
386
  end
409
387
 
@@ -412,7 +390,7 @@ EOC
412
390
  end
413
391
 
414
392
  mktmpbookdir 'POSTDEF' => 'chapter1',
415
- 'chapter1.re' => '' do |dir, book, files|
393
+ 'chapter1.re' => '' do |dir, book, files|
416
394
  assert_kind_of Book::Part, book.postscripts
417
395
  assert_equal '', book.postscripts.name
418
396
  assert_equal 1, book.postscripts.chapters.size
@@ -421,7 +399,7 @@ EOC
421
399
  end
422
400
 
423
401
  mktmpbookdir 'POSTDEF' => "chapter1\n\nchapter2",
424
- 'chapter1.re' => '', 'chapter2.re' => '' do |dir, book, files|
402
+ 'chapter1.re' => '', 'chapter2.re' => '' do |dir, book, files|
425
403
  assert_kind_of Book::Part, book.postscripts
426
404
  assert_equal '', book.postscripts.name
427
405
  assert_equal 2, book.postscripts.chapters.size
@@ -432,7 +410,7 @@ EOC
432
410
  end
433
411
 
434
412
  mktmpbookdir 'POSTDEF' => "chapter1 chapter2",
435
- 'chapter1.re' => '', 'chapter2.re' => '' do |dir, book, files|
413
+ 'chapter1.re' => '', 'chapter2.re' => '' do |dir, book, files|
436
414
  assert_kind_of Book::Part, book.postscripts
437
415
  assert_equal '', book.postscripts.name
438
416
  assert_equal 2, book.postscripts.chapters.size # XXX: OK?
@@ -470,7 +448,7 @@ EOC
470
448
  end
471
449
 
472
450
  mktmpbookdir 'CHAPS' => "ch1\nch2\n\nch3",
473
- 'preface.re' => '' do |dir, book, files|
451
+ 'preface.re' => '' do |dir, book, files|
474
452
  parts = book.parts
475
453
  assert_equal 3, parts.size
476
454
  assert book.part(1)
@@ -485,7 +463,7 @@ EOC
485
463
  end
486
464
 
487
465
  mktmpbookdir 'CHAPS' => "ch1\nch2\n\nch3",
488
- 'postscript.re' => '' do |dir, book, files|
466
+ 'postscript.re' => '' do |dir, book, files|
489
467
  parts = book.parts
490
468
  assert_equal 3, parts.size
491
469
  assert book.part(1)
@@ -500,7 +478,7 @@ EOC
500
478
  end
501
479
 
502
480
  mktmpbookdir 'CHAPS' => "ch1\nch2\n\nch3",
503
- 'preface.re' => '', 'postscript.re' => '' do |dir, book, files|
481
+ 'preface.re' => '', 'postscript.re' => '' do |dir, book, files|
504
482
  parts = book.parts
505
483
  assert_equal 4, parts.size
506
484
  assert book.part(1)
@@ -519,7 +497,7 @@ EOC
519
497
 
520
498
  def test_chapters
521
499
  mktmpbookdir 'CHAPS' => "ch1\nch2\n\nch3",
522
- 'preface.re' => '', 'postscript.re' => '' do |dir, book, files|
500
+ 'preface.re' => '', 'postscript.re' => '' do |dir, book, files|
523
501
  chapters = book.chapters
524
502
  assert_equal 5, chapters.size
525
503
 
@@ -539,7 +517,7 @@ EOC
539
517
  end
540
518
 
541
519
  mktmpbookdir 'CHAPS' => "ch1.txt\nch2.txt\n\nch3.txt",
542
- 'preface.re' => '', 'postscript.re' => '' do |dir, book, files|
520
+ 'preface.re' => '', 'postscript.re' => '' do |dir, book, files|
543
521
  chapters = book.chapters
544
522
  assert_equal 5, chapters.size
545
523
 
@@ -559,6 +537,26 @@ EOC
559
537
  end
560
538
  end
561
539
 
540
+ def test_next_chapter
541
+ mktmpbookdir 'CHAPS' => "ch1\nch2" do |dir, book, files|
542
+ chapter = book.chapter('ch1')
543
+ assert_equal book.chapter('ch2'), book.next_chapter(chapter)
544
+
545
+ chapter = book.chapter('ch2')
546
+ assert_equal nil, book.next_chapter(chapter)
547
+ end
548
+ end
549
+
550
+ def test_prev_chapter
551
+ mktmpbookdir 'CHAPS' => "ch1\nch2" do |dir, book, files|
552
+ chapter = book.chapter('ch2')
553
+ assert_equal book.chapter('ch1'), book.prev_chapter(chapter)
554
+
555
+ chapter = book.chapter('ch1')
556
+ assert_equal nil, book.prev_chapter(chapter)
557
+ end
558
+ end
559
+
562
560
  def test_volume
563
561
  mktmpbookdir do |dir, book, files|
564
562
  assert book.volume
@@ -133,8 +133,8 @@ class ChapterTest < Test::Unit::TestCase
133
133
  ch = Book::Chapter.new(nil, nil, 'foo.bar', nil)
134
134
  assert_equal 'foo', ch.name
135
135
 
136
- ch = Book::Chapter.new(nil, nil, nil, nil)
137
- assert_raises(TypeError) { ch.name } # XXX: OK?
136
+ # ch = Book::Chapter.new(nil, nil, nil, nil)
137
+ # assert_raises(TypeError) { ch.name } # XXX: OK?
138
138
  end
139
139
 
140
140
  def test_open
@@ -161,11 +161,11 @@ class ChapterTest < Test::Unit::TestCase
161
161
 
162
162
  def test_title
163
163
  io = StringIO.new
164
- ch = Book::Chapter.new(nil, nil, nil, nil, io)
164
+ ch = Book::Chapter.new(ReVIEW.book, nil, nil, nil, io)
165
165
  assert_equal '', ch.title
166
166
 
167
167
  io = StringIO.new("=1\n=2\n")
168
- ch = Book::Chapter.new(nil, nil, nil, nil, io)
168
+ ch = Book::Chapter.new(ReVIEW.book, nil, nil, nil, io)
169
169
  assert_equal '1', ch.title
170
170
 
171
171
 
@@ -176,8 +176,8 @@ class ChapterTest < Test::Unit::TestCase
176
176
  ['XYZ', @eucjp_str],
177
177
  ].each do |enc, instr|
178
178
  io = StringIO.new("= #{instr}\n")
179
- ch = Book::Chapter.new(nil, nil, nil, nil, io)
180
- ReVIEW.book.param = {'inencoding' => enc}
179
+ ch = Book::Chapter.new(ReVIEW.book, nil, nil, nil, io)
180
+ ReVIEW.book.config = {'inencoding' => enc}
181
181
  assert_equal @utf8_str, ch.title
182
182
  assert_equal @utf8_str, ch.instance_eval { @title }
183
183
  end
@@ -195,8 +195,8 @@ class ChapterTest < Test::Unit::TestCase
195
195
  tf.print instr
196
196
  tf.close
197
197
 
198
- ch = Book::Chapter.new(nil, nil, nil, tf.path)
199
- ReVIEW.book.param = {'inencoding' => enc}
198
+ ch = Book::Chapter.new(ReVIEW.book, nil, nil, tf.path)
199
+ ReVIEW.book.config = {'inencoding' => enc}
200
200
  assert_equal @utf8_str, ch.content
201
201
  assert_equal @utf8_str, ch.instance_eval { @content }
202
202
  ensure
@@ -212,8 +212,8 @@ class ChapterTest < Test::Unit::TestCase
212
212
  tf2.puts instr
213
213
  tf1.close
214
214
 
215
- ch = Book::Chapter.new(nil, nil, nil, tf1.path, tf2)
216
- ReVIEW.book.param = {'inencoding' => enc}
215
+ ch = Book::Chapter.new(ReVIEW.book, nil, nil, tf1.path, tf2)
216
+ ReVIEW.book.config = {'inencoding' => enc}
217
217
  assert_equal "#{@utf8_str}\n#{@utf8_str}\n", ch.content # XXX: OK?
218
218
  ensure
219
219
  tf1.close(true)
@@ -228,7 +228,7 @@ class ChapterTest < Test::Unit::TestCase
228
228
  tf.print lines.join('')
229
229
  tf.close
230
230
 
231
- ch = Book::Chapter.new(nil, nil, nil, tf.path)
231
+ ch = Book::Chapter.new(ReVIEW.book, nil, nil, tf.path)
232
232
  assert_equal lines, ch.lines
233
233
 
234
234
  lines = ["1\n", "2\n", "3"]
@@ -240,7 +240,7 @@ class ChapterTest < Test::Unit::TestCase
240
240
  tf2.puts lines.join('')
241
241
  tf2.close
242
242
 
243
- ch = Book::Chapter.new(nil, nil, nil, tf1.path, tf2.path)
243
+ ch = Book::Chapter.new(ReVIEW.book, nil, nil, tf1.path, tf2.path)
244
244
  assert_equal lines, ch.lines # XXX: OK?
245
245
  end
246
246
 
@@ -265,7 +265,7 @@ class ChapterTest < Test::Unit::TestCase
265
265
 
266
266
  def test_on_CHAPS?
267
267
  mktmpbookdir 'CHAPS' => "chapter1.re\nchapter2.re",
268
- 'chapter1.re' => '12345', 'preface.re' => 'abcde' do |dir, book, files|
268
+ 'chapter1.re' => '12345', 'preface.re' => 'abcde' do |dir, book, files|
269
269
  ch1 = Book::Chapter.new(book, 1, 'chapter1', files['chapter1.re'])
270
270
  pre = Book::Chapter.new(book, nil, 'preface', files['preface.re'])
271
271
 
@@ -354,6 +354,18 @@ E
354
354
  E
355
355
  end
356
356
 
357
+
358
+ def test_column_index
359
+ ReVIEW.book.config = {"inencoding" => "utf-8"}
360
+ do_test_index(<<E, Book::ColumnIndex, :column_index, :column, :propagate => false)
361
+ = dummy1
362
+ ===[column]{abc} aaaa
363
+ = dummy2
364
+ ===[column] def
365
+ == dummy3
366
+ E
367
+ end
368
+
357
369
  def test_image
358
370
  do_test_index(<<E, Book::ImageIndex, :image_index, :image)
359
371
  //image
@@ -80,7 +80,7 @@ class BuidlerTest < Test::Unit::TestCase
80
80
  ].each do |m, instr, expstr|
81
81
  b = Builder.new
82
82
  b.bind(nil, nil, nil)
83
- ReVIEW.book.param = params
83
+ ReVIEW.book.config = params
84
84
  b.__send__(m, instr)
85
85
  if "".respond_to?(:encode)
86
86
  assert_equal expstr.encode("UTF-8"), b.result
@@ -128,9 +128,9 @@ class BuidlerTest < Test::Unit::TestCase
128
128
  end
129
129
 
130
130
  def test_convert_outencoding
131
- ReVIEW.book.param = {'outencoding' => "EUC"}
131
+ ReVIEW.book.config = {'outencoding' => "EUC"}
132
132
  b = Builder.new
133
- ret = b.convert_outencoding("a", ReVIEW.book.param["outencoding"])
133
+ ret = b.convert_outencoding("a", ReVIEW.book.config["outencoding"])
134
134
  assert_equal "a", ret
135
135
  end
136
136
 
@@ -0,0 +1,107 @@
1
+ require 'test_helper'
2
+ require 'review/catalog'
3
+
4
+ class CatalogTest < Test::Unit::TestCase
5
+ include ReVIEW
6
+
7
+ def test_predef
8
+ sut = Catalog.new(yaml)
9
+ exp =<<-EOS
10
+ pre01.re
11
+ pre02.re
12
+ EOS
13
+ assert_equal(exp.chomp, sut.predef)
14
+ end
15
+
16
+ def test_chaps
17
+ sut = Catalog.new(yaml)
18
+ exp =<<-EOS
19
+ ch01.re
20
+ ch02.re
21
+ EOS
22
+ assert_equal(exp.chomp, sut.chaps)
23
+ end
24
+
25
+ def test_chaps_empty
26
+ yaml = StringIO.new
27
+ sut = Catalog.new(yaml)
28
+ assert_equal("", sut.chaps)
29
+ end
30
+
31
+ def test_postdef
32
+ sut = Catalog.new(yaml)
33
+ exp =<<-EOS
34
+ post01.re
35
+ post02.re
36
+ EOS
37
+ assert_equal(exp.chomp, sut.postdef)
38
+ end
39
+
40
+ def test_chaps_with_parts
41
+ sut = Catalog.new(yaml_with_parts)
42
+ exp =<<-EOS
43
+ ch01.re
44
+ ch02.re
45
+ ch03.re
46
+ ch04.re
47
+ ch05.re
48
+ EOS
49
+ assert_equal(exp.chomp, sut.chaps)
50
+ end
51
+
52
+ def test_parts
53
+ sut = Catalog.new(yaml_with_parts)
54
+ exp =<<-EOS
55
+ part1.re
56
+ part2.re
57
+ EOS
58
+ assert_equal(exp.chomp, sut.parts)
59
+ end
60
+
61
+ def test_parts_with_empty
62
+ sut = Catalog.new(yaml)
63
+ assert_equal("", sut.parts)
64
+ end
65
+
66
+ def test_parts2
67
+ sut = Catalog.new(yaml_with_parts)
68
+ assert_equal(["ch01.re",
69
+ {"part1.re" => ["ch02.re"]},
70
+ "ch03.re",
71
+ {"part2.re" => ["ch04.re", "ch05.re"]}],
72
+ sut.parts_with_chaps)
73
+ end
74
+
75
+ private
76
+ def yaml
77
+ StringIO.new <<-EOS
78
+
79
+ PREDEF:
80
+ - pre01.re
81
+ - pre02.re
82
+
83
+ CHAPS:
84
+ - ch01.re
85
+ - ch02.re
86
+
87
+ POSTDEF:
88
+ - post01.re
89
+ - post02.re
90
+
91
+ EOS
92
+ end
93
+
94
+ def yaml_with_parts
95
+ StringIO.new <<-EOS
96
+ CHAPS:
97
+ - ch01.re
98
+ - part1.re:
99
+ - ch02.re
100
+ - ch03.re
101
+ - part2.re:
102
+ - ch04.re
103
+ - ch05.re
104
+
105
+ EOS
106
+ end
107
+ end