review 2.0.0.beta1 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (150) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +66 -1
  3. data/.rubocop_todo.yml +617 -0
  4. data/.travis.yml +16 -1
  5. data/ChangeLog +48 -0
  6. data/Dockerfile +22 -0
  7. data/Gemfile +0 -1
  8. data/README.md +97 -0
  9. data/Rakefile +10 -11
  10. data/appveyor.yml +9 -0
  11. data/bin/review +46 -0
  12. data/bin/review-check +8 -21
  13. data/bin/review-compile +26 -43
  14. data/bin/review-index +9 -22
  15. data/bin/review-init +21 -25
  16. data/bin/review-preproc +9 -13
  17. data/bin/review-validate +1 -1
  18. data/bin/review-vol +3 -17
  19. data/bin/review-webmaker +15 -0
  20. data/doc/NEWS.ja.md +534 -0
  21. data/doc/NEWS.md +538 -0
  22. data/doc/catalog.ja.md +10 -18
  23. data/doc/catalog.md +5 -9
  24. data/doc/config.yml.sample +319 -0
  25. data/doc/customize_epub.ja.md +42 -0
  26. data/doc/format.ja.md +320 -288
  27. data/doc/format.md +277 -170
  28. data/doc/format_idg.ja.md +82 -175
  29. data/doc/pdfmaker.ja.md +61 -0
  30. data/doc/pdfmaker.md +65 -0
  31. data/doc/quickstart.ja.md +88 -98
  32. data/doc/quickstart.md +72 -110
  33. data/doc/sample.css +41 -0
  34. data/doc/writing_vertical.ja.md +55 -0
  35. data/doc/writing_vertical.md +5 -0
  36. data/lib/epubmaker/content.rb +3 -3
  37. data/lib/epubmaker/epubcommon.rb +173 -145
  38. data/lib/epubmaker/epubv2.rb +24 -77
  39. data/lib/epubmaker/epubv3.rb +72 -73
  40. data/lib/epubmaker/producer.rb +54 -30
  41. data/lib/lineinput.rb +48 -0
  42. data/lib/review/book.rb +0 -1
  43. data/lib/review/book/base.rb +47 -27
  44. data/lib/review/book/chapter.rb +48 -19
  45. data/lib/review/book/compilable.rb +10 -14
  46. data/lib/review/book/index.rb +10 -19
  47. data/lib/review/book/page_metric.rb +0 -10
  48. data/lib/review/book/part.rb +17 -3
  49. data/lib/review/builder.rb +84 -68
  50. data/lib/review/catalog.rb +5 -1
  51. data/lib/review/compiler.rb +327 -4657
  52. data/lib/review/configure.rb +84 -10
  53. data/lib/review/converter.rb +28 -0
  54. data/lib/review/epubbuilder.rb +1 -1
  55. data/lib/review/epubmaker.rb +142 -158
  56. data/lib/review/ewbbuilder.rb +5 -5
  57. data/lib/review/exception.rb +1 -1
  58. data/lib/review/extentions.rb +1 -1
  59. data/lib/review/extentions/hash.rb +15 -0
  60. data/lib/review/extentions/string.rb +2 -1
  61. data/lib/review/htmlbuilder.rb +364 -348
  62. data/lib/review/htmltoc.rb +44 -0
  63. data/lib/review/htmlutils.rb +12 -6
  64. data/lib/review/i18n.rb +78 -6
  65. data/lib/review/i18n.yml +7 -4
  66. data/lib/review/idgxmlbuilder.rb +226 -267
  67. data/lib/review/latexbuilder.rb +281 -274
  68. data/lib/review/latexutils.rb +56 -49
  69. data/lib/review/makerhelper.rb +8 -4
  70. data/lib/review/markdownbuilder.rb +80 -124
  71. data/lib/review/pdfmaker.rb +197 -138
  72. data/lib/review/preprocessor.rb +16 -67
  73. data/lib/review/template.rb +24 -0
  74. data/lib/review/textbuilder.rb +1 -1
  75. data/lib/review/textutils.rb +18 -24
  76. data/lib/review/tocparser.rb +51 -106
  77. data/lib/review/tocprinter.rb +61 -117
  78. data/lib/review/topbuilder.rb +119 -126
  79. data/lib/review/unfold.rb +2 -2
  80. data/lib/review/version.rb +1 -1
  81. data/lib/review/webmaker.rb +302 -0
  82. data/lib/review/webtocprinter.rb +48 -0
  83. data/lib/review/yamlloader.rb +47 -0
  84. data/review.gemspec +3 -3
  85. data/templates/html/layout-html5.html.erb +17 -0
  86. data/templates/html/layout-xhtml1.html.erb +20 -0
  87. data/{lib/review → templates/latex}/layout.tex.erb +107 -115
  88. data/templates/ncx/epubv2.ncx.erb +11 -0
  89. data/templates/opf/epubv2.opf.erb +21 -0
  90. data/templates/opf/epubv3.opf.erb +18 -0
  91. data/templates/web/html/layout-html5.html.erb +56 -0
  92. data/templates/web/html/layout-xhtml1.html.erb +20 -0
  93. data/templates/xml/container.xml.erb +6 -0
  94. data/test/assets/test.xml.erb +3 -0
  95. data/test/assets/test_template.tex +28 -71
  96. data/test/assets/test_template_backmatter.tex +1 -9
  97. data/test/sample-book/src/Rakefile +12 -3
  98. data/{doc/sample.yml → test/sample-book/src/config-epub2.yml} +92 -147
  99. data/test/sample-book/src/config.yml +40 -154
  100. data/test/sample-book/src/style-web.css +45 -0
  101. data/test/sample-book/src/style.css +23 -1
  102. data/test/test.re +1 -1
  103. data/test/test_book.rb +15 -17
  104. data/test/test_book_chapter.rb +2 -80
  105. data/test/test_book_part.rb +1 -1
  106. data/test/test_builder.rb +28 -6
  107. data/test/test_catalog.rb +17 -0
  108. data/test/test_compiler.rb +14 -59
  109. data/test/test_configure.rb +94 -0
  110. data/test/test_converter.rb +21 -0
  111. data/test/test_epub3maker.rb +155 -3
  112. data/test/test_epubmaker.rb +245 -30
  113. data/test/test_epubmaker_cmd.rb +2 -2
  114. data/test/test_extentions_hash.rb +60 -0
  115. data/test/test_helper.rb +4 -47
  116. data/test/test_htmlbuilder.rb +282 -175
  117. data/test/test_htmltoc.rb +33 -0
  118. data/test/test_i18n.rb +134 -70
  119. data/test/test_idgxmlbuilder.rb +58 -39
  120. data/test/test_latexbuilder.rb +132 -14
  121. data/test/test_lineinput.rb +5 -26
  122. data/test/test_makerhelper.rb +6 -4
  123. data/test/test_markdownbuilder.rb +23 -5
  124. data/test/test_pdfmaker.rb +86 -20
  125. data/test/test_pdfmaker_cmd.rb +1 -3
  126. data/test/test_review_ext.rb +1 -1
  127. data/test/test_template.rb +27 -0
  128. data/test/test_textutils.rb +36 -0
  129. data/test/test_tocparser.rb +25 -0
  130. data/test/test_topbuilder.rb +34 -2
  131. data/test/test_yamlloader.rb +188 -0
  132. metadata +71 -29
  133. data/README.rdoc +0 -81
  134. data/bin/review-epubmaker-legacy +0 -1024
  135. data/doc/ruby-uuid/README +0 -11
  136. data/doc/ruby-uuid/README.ja +0 -34
  137. data/lib/review/compiler/literals_1_8.kpeg +0 -19
  138. data/lib/review/compiler/literals_1_8.rb +0 -432
  139. data/lib/review/compiler/literals_1_9.kpeg +0 -22
  140. data/lib/review/compiler/literals_1_9.rb +0 -435
  141. data/lib/review/extentions/array.rb +0 -25
  142. data/lib/review/htmllayout.rb +0 -41
  143. data/lib/review/inaobuilder.rb +0 -357
  144. data/lib/review/location.rb +0 -24
  145. data/lib/review/node.rb +0 -267
  146. data/lib/review/review.kpeg +0 -724
  147. data/lib/uuid.rb +0 -312
  148. data/rubocop-todo.yml +0 -456
  149. data/test/test_inaobuilder.rb +0 -247
  150. data/test/test_uuid.rb +0 -157
@@ -33,7 +33,7 @@ class PartTest < Test::Unit::TestCase
33
33
  assert_equal 0, part.volume.lines
34
34
 
35
35
  chs = []
36
- tfs = [] ## prevent from removing Tempfile
36
+ tfs = [] ## prevent from removing Tempfile
37
37
  Tempfile.open('part_test') do |o|
38
38
  o.print "12345"
39
39
  chs << Book::Chapter.new(book, nil, nil, o.path)
@@ -44,6 +44,16 @@ class BuidlerTest < Test::Unit::TestCase
44
44
  assert_equal '', b.result
45
45
  end
46
46
 
47
+ def test_print_and_puts
48
+ b = Builder.new
49
+ assert_raises(NoMethodError) do # XXX: OK?
50
+ b.print ""
51
+ end
52
+ assert_raises(NoMethodError) do # XXX: OK?
53
+ b.puts ""
54
+ end
55
+ end
56
+
47
57
  def test_not_implemented_methods
48
58
  ex = NoMethodError # XXX: OK?
49
59
  [
@@ -60,12 +70,24 @@ class BuidlerTest < Test::Unit::TestCase
60
70
  end
61
71
  end
62
72
 
63
- def test_convert_outencoding
64
- book = ReVIEW::Book::Base.new(nil)
65
- book.config = {'outencoding' => "EUC"}
66
- b = Builder.new
67
- ret = b.convert_outencoding("a", book.config["outencoding"])
68
- assert_equal "a", ret
73
+ def test_compile_inline
74
+ text = "abc"
75
+ assert_equal [:text, text], @b.compile_inline(text)
76
+ end
77
+
78
+ def test_inline_ruby
79
+ def @b.compile_ruby(base,ruby)
80
+ [base,ruby]
81
+ end
82
+ str = @b.inline_ruby("foo,bar")
83
+ assert_equal str, ["foo","bar"]
84
+ str = @b.inline_ruby("foo\\,\\,,\\,bar,buz")
85
+ assert_equal str, ["foo,,",",bar,buz"]
86
+ end
87
+
88
+ def test_compile_inline_backslash
89
+ text = "abc\\d\\#a"
90
+ assert_equal [:text, text], @b.compile_inline(text)
69
91
  end
70
92
 
71
93
  class XBuilder < Builder
@@ -81,6 +81,16 @@ back02.re
81
81
  assert_equal(exp.chomp, sut.postdef)
82
82
  end
83
83
 
84
+ def test_from_object
85
+ sut = Catalog.new(yaml_hash)
86
+ exp =<<-EOS
87
+ ch01.re
88
+ ch02.re
89
+ EOS
90
+ assert_equal(exp.chomp, sut.chaps)
91
+ end
92
+
93
+
84
94
  private
85
95
  def yaml
86
96
  StringIO.new <<-EOS
@@ -103,6 +113,13 @@ POSTDEF:
103
113
  EOS
104
114
  end
105
115
 
116
+ def yaml_hash
117
+ {"PREDEF" => %w(pre01.re pre02.re),
118
+ "CHAPS" => %w(ch01.re ch02.re),
119
+ "APPENDIX" => %w(post01.re post02.re),
120
+ "POSTDEF" => %w(back01.re back02.re)}
121
+ end
122
+
106
123
  def yaml_with_parts
107
124
  StringIO.new <<-EOS
108
125
  CHAPS:
@@ -4,88 +4,43 @@ require 'test_helper'
4
4
  require 'review/compiler'
5
5
  require 'review/book'
6
6
  require 'review/latexbuilder'
7
- require 'review/htmlbuilder'
8
7
 
9
8
  class CompilerTest < Test::Unit::TestCase
10
9
  include ReVIEW
11
10
 
12
11
  def setup
13
- @builder = HTMLBuilder.new()
14
- @param = {
15
- "secnolevel" => 2, # for IDGXMLBuilder, HTMLBuilder
16
- "inencoding" => "UTF-8",
17
- "outencoding" => "UTF-8",
18
- "subdirmode" => nil,
19
- "stylesheet" => nil, # for HTMLBuilder
20
- }
21
- ReVIEW.book.param = @param
22
- @compiler = ReVIEW::Compiler.new(@builder)
23
- @chapter = Book::Chapter.new(Book::Base.new(nil), 1, '-', nil, StringIO.new)
24
- location = Location.new(nil, nil)
25
- @builder.bind(@compiler, @chapter, location)
26
-
27
- def @compiler.compile_command(name, args, lines, node)
28
- args
29
- end
30
-
12
+ @builder = LATEXBuilder.new()
13
+ @c = Compiler.new(@builder)
31
14
  end
32
15
 
33
16
  def test_parse_args
34
- args = compile_blockelem("//dummy[foo][bar]\n", false)
35
- assert_equal ["foo","bar"], args.parse_args(:doc,:doc)
17
+ args = @c.__send__(:parse_args, "[foo][bar]")
18
+ assert_equal ["foo","bar"], args
36
19
  end
37
20
 
38
21
  def test_parse_args_with_brace1
39
- args = compile_blockelem("//dummy[fo[\\][\\]o][bar]", false)
40
- assert_equal ["fo[][]o","bar"], args.parse_args(:doc, :doc)
22
+ args = @c.__send__(:parse_args, "[fo[\\][\\]o][bar]")
23
+ assert_equal ["fo[][]o","bar"], args
41
24
  end
42
25
 
43
26
  def test_parse_args_with_brace2
44
- args = compile_blockelem("//dummy[f\\]o\\]o][bar]", false)
45
- assert_equal ["f]o]o","bar"], args.parse_args(:doc, :doc)
27
+ args = @c.__send__(:parse_args, "[f\\]o\\]o][bar]")
28
+ assert_equal ["f]o]o","bar"], args
46
29
  end
47
30
 
48
31
  def test_parse_args_with_backslash
49
- args = compile_blockelem("//dummy[foo][bar\\buz]", false)
50
- assert_equal ["foo","bar\\buz"], args.parse_args(:doc, :doc)
32
+ args = @c.__send__(:parse_args, "[foo][bar\\buz]")
33
+ assert_equal ["foo","bar\\buz"], args
51
34
  end
52
35
 
53
36
  def test_parse_args_with_backslash2
54
- args = compile_blockelem("//dummy[foo][bar\\#\\[\\!]", false)
55
- assert_equal ["foo","bar\\#\\[\\!"], args.parse_args(:doc, :doc)
37
+ args = @c.__send__(:parse_args, "[foo][bar\\#\\[\\!]")
38
+ assert_equal ["foo","bar\\#\\[\\!"], args
56
39
  end
57
40
 
58
41
  def test_parse_args_with_backslash3
59
- args = compile_blockelem("//dummy[foo][bar\\\\buz]", false)
60
- assert_equal ["foo","bar\\buz"], args.parse_args(:doc, :doc)
61
- end
62
-
63
- def test_compile_inline
64
- def @compiler.inline_ruby(*args)
65
- return args
66
- end
67
- args = compile_inline("@<ruby>{abc}",false)
68
- assert_equal "abc", args.content[0].content.to_doc
69
- end
70
-
71
- def test_inline_ruby
72
- # def @compiler.inline_ruby(*args)
73
- # return args
74
- # end
75
- args = compile_inline("@<ruby>{foo,bar}",false)
76
- assert_equal "foo", args.content[0].content[0].to_doc
77
- assert_equal "bar", args.content[0].content[1].to_doc
78
- args = compile_inline("@<ruby>{foo\\,\\,,\\,bar\\,buz}", false)
79
- assert_equal "foo,,", args.content[0].content[0].to_doc
80
- assert_equal ",bar,buz", args.content[0].content[1].to_doc
81
- end
82
-
83
- def test_compile_inline_backslash
84
- def @compiler.inline_dummy(*args)
85
- return args
86
- end
87
- args = compile_inline("@<dummy>{abc\\d\\#a}", false)
88
- assert_equal "abc\\d\\#a", args.content[0].content.to_doc
42
+ args = @c.__send__(:parse_args, "[foo][bar\\\\buz]")
43
+ assert_equal ["foo","bar\\buz"], args
89
44
  end
90
45
  end
91
46
 
@@ -0,0 +1,94 @@
1
+ # encoding: utf-8
2
+
3
+ require 'test_helper'
4
+ require 'review/epubmaker'
5
+
6
+ class ConfigureTest < Test::Unit::TestCase
7
+ include ReVIEW
8
+
9
+ def setup
10
+ @maker = ReVIEW::EPUBMaker.new
11
+ @config = ReVIEW::Configure.values
12
+ @config.merge!({
13
+ "bookname" => "sample",
14
+ "title" => "Sample Book",
15
+ "version" => 2,
16
+ "urnid" => "http://example.jp/",
17
+ "date" => "2011-01-01",
18
+ "language" => "ja",
19
+ "epubmaker" => {"flattocindent" => true,
20
+ "title" => "Sample Book(EPUB)"},
21
+ })
22
+ @output = StringIO.new
23
+ I18n.setup(@config["language"])
24
+ end
25
+
26
+ def test_configure_class
27
+ assert_equal ReVIEW::Configure, @config.class
28
+ end
29
+
30
+ def test_configure_get
31
+ bookname = @config["bookname"]
32
+ assert_equal "sample", bookname
33
+ end
34
+
35
+ def test_configure_get2
36
+ assert_equal true, @config["epubmaker"]["flattocindent"]
37
+ end
38
+
39
+ def test_configure_with_maker
40
+ @config.maker = "epubmaker"
41
+ assert_equal true, @config["flattocindent"]
42
+ assert_equal true, @config["epubmaker"]["flattocindent"]
43
+ end
44
+
45
+ def test_configure_with_maker_override
46
+ @config.maker = "epubmaker"
47
+ assert_equal "Sample Book(EPUB)", @config["title"]
48
+ @config.maker = "pdfmaker"
49
+ assert_equal "Sample Book", @config["title"]
50
+ end
51
+
52
+ def test_configure_with_invalidmaker
53
+ @config.maker = "pdfmaker"
54
+ assert_equal nil, @config["flattocindent"]
55
+ assert_equal true, @config["epubmaker"]["flattocindent"]
56
+ end
57
+
58
+ def test_check_version_nosetting
59
+ @config.delete("review_version")
60
+ assert_raise ReVIEW::ConfigError do
61
+ @config.check_version("2.0.0")
62
+ end
63
+ end
64
+
65
+ def test_check_version_noversion
66
+ @config["review_version"] = nil
67
+ assert_nothing_raised ReVIEW::ConfigError do
68
+ @config.check_version("2.0.0")
69
+ end
70
+ end
71
+
72
+ def test_check_version
73
+ @config["review_version"] = "2.1"
74
+ assert_nothing_raised do
75
+ @config.check_version("2.1.0")
76
+ end
77
+ assert_nothing_raised do
78
+ @config.check_version("2.2.0")
79
+ end
80
+ assert_nothing_raised do
81
+ @config.check_version("2.2.5")
82
+ end
83
+ assert_raise ReVIEW::ConfigError do
84
+ @config.check_version("2.0.0")
85
+ end
86
+ assert_raise ReVIEW::ConfigError do
87
+ @config.check_version("3.0.0")
88
+ end
89
+ assert_raise ReVIEW::ConfigError do
90
+ @config.check_version("1.8.0")
91
+ end
92
+ end
93
+
94
+ end
@@ -0,0 +1,21 @@
1
+ require 'test_helper'
2
+ require 'book_test_helper'
3
+ require 'review/converter'
4
+
5
+ class ConverterTest < Test::Unit::TestCase
6
+ include BookTestHelper
7
+
8
+ def setup
9
+ end
10
+
11
+ def test_converter_builder
12
+ mktmpbookdir('config.yml'=>"bookname: book\n") do |dir, book, files|
13
+ @book = Book::Base.new(dir)
14
+ config_file = File.join(dir,"config.yml")
15
+ @book.load_config(config_file)
16
+ @converter = ReVIEW::Converter.new(@book, ReVIEW::LATEXBuilder.new)
17
+ assert_equal "latex", @book.config["builder"]
18
+ end
19
+ end
20
+
21
+ end
@@ -69,7 +69,81 @@ EOT
69
69
  <item properties="nav" id="sample-toc.html" href="sample-toc.html" media-type="application/xhtml+xml"/>
70
70
  <item id="sample" href="sample.html" media-type="application/xhtml+xml"/>
71
71
  </manifest>
72
- <spine>
72
+ <spine page-progression-direction="ltr">
73
+ <itemref idref="sample" linear="no"/>
74
+ </spine>
75
+ <guide>
76
+ <reference type="cover" title="Cover" href="sample.html"/>
77
+ <reference type="toc" title="Table of Contents" href="sample-toc.html"/>
78
+ </guide>
79
+ </package>
80
+ EOT
81
+ assert_equal expect, @output.string
82
+ end
83
+
84
+ def test_stage1_opf_ebpaj
85
+ @producer.merge_params({"opf_prefix"=>{"ebpaj"=>"http://www.ebpaj.jp/"},"opf_meta"=>{"ebpaj:guide-version" => "1.1.2"}})
86
+ @producer.opf(@output)
87
+ expect = <<EOT
88
+ <?xml version="1.0" encoding="UTF-8"?>
89
+ <package version="3.0" xmlns="http://www.idpf.org/2007/opf" unique-identifier="BookId" xml:lang="en" prefix="ebpaj: http://www.ebpaj.jp/">
90
+ <metadata xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:opf="http://www.idpf.org/2007/opf">
91
+ <dc:title id="title">Sample Book</dc:title>
92
+ <dc:language id="language">en</dc:language>
93
+ <dc:date id="date">2011-01-01</dc:date>
94
+ <meta property="dcterms:modified">2014-12-13T14:15:16Z</meta>
95
+ <dc:identifier id="BookId">http://example.jp/</dc:identifier>
96
+ <meta property="ebpaj:guide-version">1.1.2</meta>
97
+ </metadata>
98
+ <manifest>
99
+ <item properties="nav" id="sample-toc.html" href="sample-toc.html" media-type="application/xhtml+xml"/>
100
+ <item id="sample" href="sample.html" media-type="application/xhtml+xml"/>
101
+ </manifest>
102
+ <spine page-progression-direction="ltr">
103
+ <itemref idref="sample" linear="no"/>
104
+ </spine>
105
+ <guide>
106
+ <reference type="cover" title="Cover" href="sample.html"/>
107
+ <reference type="toc" title="Table of Contents" href="sample-toc.html"/>
108
+ </guide>
109
+ </package>
110
+ EOT
111
+ assert_equal expect, @output.string
112
+ end
113
+
114
+ def test_stage1_opf_fileas
115
+ @producer.params["title"] = {"name" => "これは書籍です", "file-as" => "コレハショセキデス"}
116
+ @producer.params["aut"] = [{"name" => "著者A", "file-as" => "チョシャA"}, {"name" => "著者B", "file-as" => "チョシャB"}]
117
+ @producer.params["pbl"] = [{"name" => "出版社", "file-as" => "シュッパンシャ"}]
118
+ @producer.opf(@output)
119
+ expect = <<EOT
120
+ <?xml version="1.0" encoding="UTF-8"?>
121
+ <package version="3.0" xmlns="http://www.idpf.org/2007/opf" unique-identifier="BookId" xml:lang="en">
122
+ <metadata xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:opf="http://www.idpf.org/2007/opf">
123
+ <dc:title id="title">これは書籍です</dc:title>
124
+ <meta refines="#title" property="file-as">コレハショセキデス</meta>
125
+ <dc:language id="language">en</dc:language>
126
+ <dc:date id="date">2011-01-01</dc:date>
127
+ <meta property="dcterms:modified">2014-12-13T14:15:16Z</meta>
128
+ <dc:identifier id="BookId">http://example.jp/</dc:identifier>
129
+ <dc:creator id="aut-0">著者A</dc:creator>
130
+ <meta refines="#aut-0" property="role" scheme="marc:relators">aut</meta>
131
+ <meta refines="#aut-0" property="file-as">チョシャA</meta>
132
+ <dc:creator id="aut-1">著者B</dc:creator>
133
+ <meta refines="#aut-1" property="role" scheme="marc:relators">aut</meta>
134
+ <meta refines="#aut-1" property="file-as">チョシャB</meta>
135
+ <dc:contributor id="pbl-0">出版社</dc:contributor>
136
+ <meta refines="#pbl-0" property="role" scheme="marc:relators">pbl</meta>
137
+ <meta refines="#pbl-0" property="file-as">シュッパンシャ</meta>
138
+ <dc:publisher id="pub-pbl-0">出版社</dc:publisher>
139
+ <meta refines="#pub-pbl-0" property="role" scheme="marc:relators">pbl</meta>
140
+ <meta refines="#pub-pbl-0" property="file-as">シュッパンシャ</meta>
141
+ </metadata>
142
+ <manifest>
143
+ <item properties="nav" id="sample-toc.html" href="sample-toc.html" media-type="application/xhtml+xml"/>
144
+ <item id="sample" href="sample.html" media-type="application/xhtml+xml"/>
145
+ </manifest>
146
+ <spine page-progression-direction="ltr">
73
147
  <itemref idref="sample" linear="no"/>
74
148
  </spine>
75
149
  <guide>
@@ -136,7 +210,7 @@ EOT
136
210
  <item id="sample" href="sample.html" media-type="application/xhtml+xml"/>
137
211
  <item id="ch01-html" href="ch01.html" media-type="application/xhtml+xml"/>
138
212
  </manifest>
139
- <spine>
213
+ <spine page-progression-direction="ltr">
140
214
  <itemref idref="sample" linear="no"/>
141
215
  <itemref idref="ch01-html"/>
142
216
  </spine>
@@ -250,7 +324,7 @@ EOT
250
324
  <item id="sample-GIF" href="sample.GIF" media-type="image/gif"/>
251
325
  <item id="sample-css" href="sample.css" media-type="text/css"/>
252
326
  </manifest>
253
- <spine>
327
+ <spine page-progression-direction="ltr">
254
328
  <itemref idref="sample" linear="no"/>
255
329
  <itemref idref="ch01-html"/>
256
330
  <itemref idref="ch02-html"/>
@@ -465,6 +539,84 @@ EOT
465
539
  assert_equal expect, @output.string
466
540
  end
467
541
 
542
+ def test_colophon_history
543
+ @producer.params["aut"] = ["Mr.Smith"]
544
+ @producer.params["pbl"] = ["BLUEPRINT"]
545
+ @producer.params["pht"] = ["Mrs.Smith"]
546
+ @producer.merge_params({"language" => "ja"})
547
+ history = @producer.instance_eval{ @epub.colophon_history }
548
+ expect = <<EOT
549
+ <div class="pubhistory">
550
+ <p>2011年1月1日 発行</p>
551
+ </div>
552
+ EOT
553
+ assert_equal expect, history
554
+ end
555
+
556
+ def test_colophon_history_2
557
+ @producer.params["aut"] = ["Mr.Smith"]
558
+ @producer.params["pbl"] = ["BLUEPRINT"]
559
+ @producer.params["pht"] = ["Mrs.Smith"]
560
+ @producer.merge_params({"language" => "ja",
561
+ "history" => [[
562
+ "2011-08-03 v1.0.0版発行",
563
+ "2012-02-15 v1.1.0版発行",
564
+ ]] })
565
+ history = @producer.instance_eval{ @epub.colophon_history }
566
+ expect = <<EOT
567
+ <div class="pubhistory">
568
+ <p>2011年8月3日 v1.0.0版発行</p>
569
+ <p>2012年2月15日 v1.1.0版発行</p>
570
+ </div>
571
+ EOT
572
+ assert_equal expect, history
573
+ end
574
+
575
+ def test_colophon_history_date
576
+ @producer.params["aut"] = ["Mr.Smith"]
577
+ @producer.params["pbl"] = ["BLUEPRINT"]
578
+ @producer.params["pht"] = ["Mrs.Smith"]
579
+ @producer.merge_params({"language" => "ja",
580
+ "history" => [[
581
+ "2011-08-03",
582
+ "2012-02-15",
583
+ ]] })
584
+ history = @producer.instance_eval{ @epub.colophon_history }
585
+ expect = <<EOT
586
+ <div class="pubhistory">
587
+ <p>2011年8月3日 初版第1刷 発行</p>
588
+ <p>2012年2月15日 初版第2刷 発行</p>
589
+ </div>
590
+ EOT
591
+ assert_equal expect, history
592
+ end
593
+
594
+ def test_colophon_history_date2
595
+ @producer.params["aut"] = ["Mr.Smith"]
596
+ @producer.params["pbl"] = ["BLUEPRINT"]
597
+ @producer.params["pht"] = ["Mrs.Smith"]
598
+ @producer.merge_params({"language" => "ja",
599
+ "history" => [[
600
+ "2011-08-03",
601
+ "2012-02-15",
602
+ ],[
603
+ "2012-10-01",
604
+ ],[
605
+ "2013-03-01",
606
+ ]] })
607
+ history = @producer.instance_eval{ @epub.colophon_history }
608
+ expect = <<EOT
609
+ <div class="pubhistory">
610
+ <p>2011年8月3日 初版第1刷 発行</p>
611
+ <p>2012年2月15日 初版第2刷 発行</p>
612
+ <p>2012年10月1日 第2版第1刷 発行</p>
613
+ <p>2013年3月1日 第3版第1刷 発行</p>
614
+ </div>
615
+ EOT
616
+ assert_equal expect, history
617
+ end
618
+
619
+
468
620
  # def test_duplicate_id
469
621
  # stage3
470
622
  # assert_raise(Error) do