gepub 0.5.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/spec/gepub_spec.rb CHANGED
@@ -1,3 +1,4 @@
1
+ # -*- coding: utf-8 -*-
1
2
  require File.dirname(__FILE__) + '/spec_helper.rb'
2
3
  require 'rubygems'
3
4
  require 'nokogiri'
@@ -39,25 +40,42 @@ end
39
40
 
40
41
  describe GEPUB::Book do
41
42
  before do
42
- @book = GEPUB::Book.new('thetitle')
43
- @book.author = "theauthor"
43
+ @book = GEPUB::Book.new('OEPBS/package.opf')
44
+ @book.title = 'thetitle'
45
+ @book.creator = "theauthor"
44
46
  @book.contributor = "contributors contributors!"
45
47
  @book.publisher = "thepublisher"
46
48
  @book.date = "2010-05-05"
47
49
  @book.identifier = "http://example.jp/foobar/"
48
- @book.locale = 'ja'
49
- item1 = @book.add_ref_to_item('text/foobar.html','c1')
50
+ @book.language = 'ja'
51
+ item1 = @book.add_item('text/foobar.xhtml',nil, 'c1')
50
52
  item1.add_content(StringIO.new('<html xmlns="http://www.w3.org/1999/xhtml"><head><title>c1</title></head><body><p>the first page</p></body></html>'))
51
53
  @book.spine.push(item1)
52
54
 
53
- item2 = @book.add_ordered_item('text/barbar.html',
55
+ item2 = @book.add_ordered_item('text/barbar.xhtml',
54
56
  StringIO.new('<html xmlns="http://www.w3.org/1999/xhtml"><head><title>c2</title></head><body><p>second page, whith is test chapter.</p></body></html>'),
55
- 'c2')
56
- @book.add_nav(item2, 'test chapter')
57
+ 'c2')
58
+ item2.toc_text 'test chapter'
59
+
60
+ nav_string = <<EOF
61
+ <html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops">
62
+ <head></head>
63
+ <body>
64
+ <nav epub:type="toc" id="toc">
65
+ <h1>Table of contents</h1>
66
+ <ol>
67
+ <li><a href="foobar.xhtml">Chapter 1</a> </li>
68
+ <li> <a href="barbar.xhtml">Chapter 2</a></li>
69
+ </ol>
70
+ </nav>
71
+ </body>
72
+ </html>
73
+ EOF
74
+ item3 = @book.add_ordered_item('text/nav.html', StringIO.new(nav_string), 'nav').add_property('nav')
57
75
  end
58
76
 
59
77
  it "should have titile" do
60
- @book.title.should == 'thetitle'
78
+ @book.title.to_s.should == 'thetitle'
61
79
  end
62
80
 
63
81
  it "should generate correct ncx" do
@@ -99,9 +117,9 @@ describe GEPUB::Book do
99
117
  it "should create correct opf" do
100
118
  opf = Nokogiri::XML.parse(@book.opf_xml).root
101
119
  opf.name.should == 'package'
102
- opf.namespaces['xmlns'] == 'http://www.idpf.org/2007/opf'
103
- opf['version'] == '2.0'
104
- opf['unique-identifier'] == 'http://example.jp/foobar/'
120
+ opf.namespaces['xmlns'].should == 'http://www.idpf.org/2007/opf'
121
+ opf['version'].should == '3.0'
122
+ opf['unique-identifier'].should == 'BookId'
105
123
  end
106
124
 
107
125
  it "should have correct metadata in opf" do
@@ -115,9 +133,8 @@ describe GEPUB::Book do
115
133
  opf = Nokogiri::XML.parse(@book.opf_xml).root
116
134
 
117
135
  manifest = opf.at_xpath('xmlns:manifest')
118
- manifest.at_xpath('xmlns:item')['id'].should == 'c1'
119
- manifest.at_xpath('xmlns:item')['href'].should == 'text/foobar.html'
120
- manifest.at_xpath('xmlns:item')['media-type'].should == 'application/xhtml+xml'
136
+ manifest.at_xpath('xmlns:item[@id="c1"]')['href'].should == 'text/foobar.xhtml'
137
+ manifest.at_xpath('xmlns:item[@id="c1"]')['media-type'].should == 'application/xhtml+xml'
121
138
 
122
139
  spine = opf.at_xpath('xmlns:spine')
123
140
  spine['toc'].should == 'ncx'
@@ -125,8 +142,7 @@ describe GEPUB::Book do
125
142
  end
126
143
 
127
144
  it "should have correct cover image id" do
128
- item = @book.add_ref_to_item("img/img.jpg")
129
- @book.specify_cover_image(item)
145
+ item = @book.add_item("img/img.jpg").cover_image
130
146
 
131
147
  opf = Nokogiri::XML.parse(@book.opf_xml).root
132
148
 
@@ -138,7 +154,31 @@ describe GEPUB::Book do
138
154
  it "should generate correct epub" do
139
155
  epubname = File.join(File.dirname(__FILE__), 'testepub.epub')
140
156
  @book.generate_epub(epubname)
141
- %x( epubcheck #{epubname} )
157
+ jar = File.join(File.dirname(__FILE__), 'fixtures/epubcheck-3.0b4/epubcheck-3.0b4.jar')
158
+ system 'java', '-jar', jar, epubname
159
+ end
160
+
161
+ it "should generate correct epub2.0" do
162
+ epubname = File.join(File.dirname(__FILE__), 'testepub2.epub')
163
+
164
+ @book = GEPUB::Book.new('OEPBS/package.opf', { 'version' => '2.0'} )
165
+ @book.title = 'thetitle'
166
+ @book.creator = "theauthor"
167
+ @book.contributor = "contributors contributors!"
168
+ @book.publisher = "thepublisher"
169
+ @book.date = "2010-05-05"
170
+ @book.identifier = "http://example.jp/foobar/"
171
+ @book.language = 'ja'
172
+ item1 = @book.add_item('text/foobar.xhtml',nil, 'c1')
173
+ item1.add_content(StringIO.new('<html xmlns="http://www.w3.org/1999/xhtml"><head><title>c1</title></head><body><p>the first page</p></body></html>'))
174
+ @book.spine.push(item1)
175
+ item2 = @book.add_ordered_item('text/barbar.xhtml',
176
+ StringIO.new('<html xmlns="http://www.w3.org/1999/xhtml"><head><title>c2</title></head><body><p>second page, whith is test chapter.</p></body></html>'),
177
+ 'c2')
178
+ item2.toc_text 'test chapter'
179
+ @book.generate_epub(epubname)
180
+ jar = File.join(File.dirname(__FILE__), 'fixtures/epubcheck-3.0b4/epubcheck-3.0b4.jar')
181
+ system 'java', '-jar', jar, epubname
142
182
  end
143
183
 
144
184
  end
data/spec/gepuber_spec.rb CHANGED
@@ -8,16 +8,16 @@ describe GEPUB::Gepuber do
8
8
  gepuber = GEPUB::Gepuber.new({})
9
9
  gepuber.texts.should == ['[0-9]*.{xhtml,html}']
10
10
  gepuber.resources.should == ['*.css', 'img/*']
11
- gepuber.title.should == ""
11
+ gepuber.title.to_s.should == ""
12
12
  gepuber.table_of_contents.should == {}
13
13
  end
14
14
 
15
15
  it "should read config hash" do
16
16
  conf =
17
17
  {
18
- :locale => 'ja',
18
+ :language => 'ja',
19
19
  :title => 'theTitle',
20
- :author => 'theAuthor',
20
+ :creator => 'theAuthor',
21
21
  :publisher => 'thePublisher',
22
22
  :date => '2011-03-11',
23
23
  :identifier => 'http://skoji.jp/gepuber/2011-03-11.0.0',
@@ -34,11 +34,11 @@ describe GEPUB::Gepuber do
34
34
  }
35
35
 
36
36
  gepuber = GEPUB::Gepuber.new(conf )
37
- gepuber.title.should == "theTitle"
38
- gepuber.locale.should == "ja"
39
- gepuber.author.should == "theAuthor"
40
- gepuber.publisher.should == "thePublisher"
41
- gepuber.date.should == "2011-03-11"
37
+ gepuber.title.to_s.should == "theTitle"
38
+ gepuber.language.to_s.should == "ja"
39
+ gepuber.creator.to_s.should == "theAuthor"
40
+ gepuber.publisher.to_s.should == "thePublisher"
41
+ gepuber.date.to_s.should == "2011-03-11"
42
42
  gepuber.identifier.should == 'http://skoji.jp/gepuber/2011-03-11.0.0'
43
43
  gepuber.epubname.should == 'gepub_00'
44
44
  gepuber.coverimg.should == 'cover.gif'
@@ -0,0 +1,36 @@
1
+ # -*- coding: utf-8 -*-
2
+ require File.dirname(__FILE__) + '/spec_helper.rb'
3
+ require 'rubygems'
4
+ require 'nokogiri'
5
+
6
+ describe GEPUB::Manifest do
7
+ context 'parse existing opf' do
8
+ before do
9
+ @manifest = GEPUB::Package.parse_opf(File.open(File.dirname(__FILE__) + '/fixtures/testdata/test.opf'), '/package.opf').instance_eval{ @manifest }
10
+ end
11
+
12
+ it 'should be parsed' do
13
+ @manifest.item_list.size.should == 9
14
+ @manifest.item_list['ncx'].href.should == 'toc.ncx'
15
+ @manifest.item_list['ncx'].media_type.should == 'application/x-dtbncx+xml'
16
+ @manifest.item_list['cover'].href.should == 'cover/cover.xhtml'
17
+ @manifest.item_list['cover'].media_type.should == 'application/xhtml+xml'
18
+ @manifest.item_list['cover-image'].href.should == 'img/cover.jpg'
19
+ @manifest.item_list['cover-image'].media_type.should == 'image/jpeg'
20
+ @manifest.item_list['cover-image'].properties[0].should == 'cover-image'
21
+ end
22
+ end
23
+ context 'generate new opf' do
24
+ it 'should generate xml' do
25
+ manifest = GEPUB::Manifest.new
26
+ manifest.add_item('ncx', 'toc.ncx', 'application/x-dtbncx+xml')
27
+ builder = Nokogiri::XML::Builder.new { |xml|
28
+ xml.package('xmlns' => "http://www.idpf.org/2007/opf",'version' => "3.0",'unique-identifier' => "pub-id",'xml:lang' => "ja") {
29
+ manifest.to_xml(xml)
30
+ }
31
+ }
32
+ xml = Nokogiri::XML::Document.parse(builder.to_xml)
33
+ xml.xpath("//xmlns:item[@id='ncx' and @href='toc.ncx' and @media-type='application/x-dtbncx+xml']").size.should == 1
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,170 @@
1
+ # -*- coding: utf-8 -*-
2
+ require File.dirname(__FILE__) + '/spec_helper.rb'
3
+ require 'rubygems'
4
+ require 'nokogiri'
5
+
6
+ describe GEPUB::Metadata do
7
+ it 'should be initialized' do
8
+ metadata = GEPUB::Metadata.new
9
+ metadata.ns_prefix(GEPUB::XMLUtil::DC_NS).should == 'dc'
10
+ metadata.ns_prefix(GEPUB::XMLUtil::OPF_NS).should be_nil
11
+ end
12
+ it 'should be initialized with version 2.0' do
13
+ metadata = GEPUB::Metadata.new('2.0')
14
+ metadata.ns_prefix(GEPUB::XMLUtil::DC_NS).should == 'dc'
15
+ metadata.ns_prefix(GEPUB::XMLUtil::OPF_NS).should == 'opf'
16
+ end
17
+
18
+ context 'Parse Existing OPF' do
19
+ before do
20
+ @metadata = GEPUB::Package.parse_opf(File.open(File.dirname(__FILE__) + '/fixtures/testdata/test.opf'), '/package.opf').instance_eval{ @metadata }
21
+ end
22
+ it 'should parse title' do
23
+ @metadata.main_title.should == 'TheTitle'
24
+ @metadata.title_list.size.should == 2
25
+ @metadata.title.to_s.should == 'TheTitle'
26
+ end
27
+
28
+ it 'should parse title-type' do
29
+ @metadata.title_list[0].refiner_list('title-type').size.should == 1
30
+ @metadata.title_list[0].refiner_list('title-type')[0].content.should == 'main'
31
+ @metadata.title_list[1].refiner_list('title-type').size.should == 1
32
+ @metadata.title_list[1].refiner_list('title-type')[0].content.should == 'collection'
33
+ end
34
+
35
+ it 'should parse identifier' do
36
+ @metadata.identifier_list.size.should == 2
37
+ @metadata.identifier.to_s.should == 'urn:uuid:1234567890'
38
+ @metadata.identifier_list[0].content.should == 'urn:uuid:1234567890'
39
+ @metadata.identifier_list[0].refiner('identifier-type').to_s.should == 'uuid'
40
+ @metadata.identifier_list[1].content.should == 'http://example.jp/epub/test/url'
41
+ @metadata.identifier_list[1].refiner('identifier-type').to_s.should == 'uri'
42
+ end
43
+
44
+ it 'should parse OPF2.0 meta node' do
45
+ @metadata.oldstyle_meta.size.should == 1
46
+ @metadata.oldstyle_meta[0].name == 'meta'
47
+ @metadata.oldstyle_meta[0]['name'] == 'cover'
48
+ @metadata.oldstyle_meta[0]['content'] == 'cover-image'
49
+ end
50
+ end
51
+
52
+ context 'Generate New OPF' do
53
+ it 'should write and read identifier' do
54
+ metadata = GEPUB::Metadata.new
55
+ metadata.add_identifier 'the_set_identifier', 'pub-id'
56
+ metadata.identifier.to_s.should == 'the_set_identifier'
57
+ metadata.identifier_list[0]['id'].should == 'pub-id'
58
+ end
59
+
60
+ it 'should write and read identifier with identifier-type' do
61
+ metadata = GEPUB::Metadata.new
62
+ metadata.add_identifier 'http://example.jp/book/url', 'pub-id', 'uri'
63
+ metadata.identifier.to_s.should == 'http://example.jp/book/url'
64
+ metadata.identifier_list[0]['id'].should == 'pub-id'
65
+ metadata.identifier_list[0].identifier_type.to_s.should == 'uri'
66
+ end
67
+
68
+ it 'should write and read title' do
69
+ metadata = GEPUB::Metadata.new
70
+ metadata.add_title('The Main Title')
71
+ metadata.title.to_s.should == 'The Main Title'
72
+ end
73
+
74
+ it 'should write and read title with type' do
75
+ metadata = GEPUB::Metadata.new
76
+ metadata.add_title('The Main Title', 'maintitle', GEPUB::TITLE_TYPE::MAIN)
77
+ metadata.title.to_s.should == 'The Main Title'
78
+ metadata.title.title_type.to_s.should == 'main'
79
+ end
80
+
81
+ it 'should write and read multipletitle with type' do
82
+ metadata = GEPUB::Metadata.new
83
+ metadata.add_title('The Main Title', 'maintitle', GEPUB::TITLE_TYPE::MAIN)
84
+ metadata.add_title('The Book Series', 'series', GEPUB::TITLE_TYPE::COLLECTION).set_group_position(1)
85
+ metadata.title.to_s.should == 'The Main Title'
86
+ metadata.title.title_type.to_s.should == 'main'
87
+
88
+ metadata.title_list[1].to_s.should == 'The Book Series'
89
+ metadata.title_list[1].title_type.to_s.should == 'collection'
90
+ metadata.title_list[1].group_position.to_s.should == '1'
91
+ end
92
+
93
+ it 'should handle alternate-script metadata of creator, not using method chain' do
94
+ metadata = GEPUB::Metadata.new
95
+ metadata.add_creator('TheCreator', 'author', 'aut').set_display_seq(1).set_file_as('Creator, The').add_alternates({ 'ja-JP' => '作成者' })
96
+ metadata.creator.to_s.should == 'TheCreator'
97
+ metadata.creator.to_s('ja').should == '作成者'
98
+ end
99
+
100
+ it 'should handle alternate-script metadata of creator, not using method chain' do
101
+ metadata = GEPUB::Metadata.new
102
+ m = metadata.add_creator('TheCreator', 'author', 'aut')
103
+ m.display_seq = 1
104
+ m.file_as = 'Creator, The'
105
+ m.add_alternates({ 'ja-JP' => '作成者' })
106
+
107
+ metadata.creator.to_s.should == 'TheCreator'
108
+ metadata.creator.to_s('ja').should == '作成者'
109
+ end
110
+
111
+ it 'should detect duplicate id' do
112
+ metadata = GEPUB::Metadata.new
113
+ metadata.add_creator('TheCreator', 'id', 'aut')
114
+ lambda { metadata.add_title('TheTitle', 'id') }.should raise_error(RuntimeError, "id 'id' is already in use.")
115
+ end
116
+
117
+ it 'should generate empty metadata xml' do
118
+ metadata = GEPUB::Metadata.new
119
+ builder = Nokogiri::XML::Builder.new { |xml|
120
+ xml.package('xmlns' => "http://www.idpf.org/2007/opf",'version' => "3.0",'unique-identifier' => "pub-id",'xml:lang' => "ja") {
121
+ metadata.to_xml(xml)
122
+ }
123
+ }
124
+ xml = Nokogiri::XML::Document.parse(builder.to_xml).at_xpath('//xmlns:metadata', { 'xmlns' => GEPUB::XMLUtil::OPF_NS})
125
+ xml.namespaces['xmlns:dc'].should == GEPUB::XMLUtil::DC_NS
126
+ end
127
+
128
+ it 'should generate metadata with id xml' do
129
+ metadata = GEPUB::Metadata.new
130
+ metadata.add_identifier('the_uid', nil)
131
+ builder = Nokogiri::XML::Builder.new { |xml|
132
+ xml.package('xmlns' => "http://www.idpf.org/2007/opf",'version' => "3.0",'unique-identifier' => "pub-id",'xml:lang' => "ja") {
133
+ metadata.to_xml(xml)
134
+ }
135
+ }
136
+ Nokogiri::XML::Document.parse(builder.to_xml).at_xpath('//dc:identifier', metadata.instance_eval {@namespaces}).content.should == 'the_uid'
137
+ end
138
+
139
+ it 'should generate metadata with creator refiner' do
140
+ metadata = GEPUB::Metadata.new
141
+ metadata.add_creator('TheCreator', nil, 'aut').set_display_seq(1).set_file_as('Creator, The').add_alternates({ 'ja-JP' => '作成者' })
142
+ builder = Nokogiri::XML::Builder.new { |xml|
143
+ xml.package('xmlns' => "http://www.idpf.org/2007/opf",'version' => "3.0",'unique-identifier' => "pub-id",'xml:lang' => "ja") {
144
+ metadata.to_xml(xml)
145
+ }
146
+ }
147
+ xml = Nokogiri::XML::Document.parse(builder.to_xml)
148
+ ns = metadata.instance_eval { @namespaces }
149
+ xml.at_xpath('//dc:creator', ns).content.should == 'TheCreator'
150
+ id = xml.at_xpath('//dc:creator', ns)['id']
151
+ xml.at_xpath("//xmlns:meta[@refines='##{id}' and @property='role']").content.should == 'aut'
152
+ xml.at_xpath("//xmlns:meta[@refines='##{id}' and @property='display-seq']").content.should == '1'
153
+ xml.at_xpath("//xmlns:meta[@refines='##{id}' and @property='file-as']").content.should == 'Creator, The'
154
+ xml.at_xpath("//xmlns:meta[@refines='##{id}' and @property='alternate-script' and @xml:lang='ja-JP']").content.should == '作成者'
155
+ end
156
+
157
+ it 'should generate metadata with old style meta tag' do
158
+ metadata = GEPUB::Metadata.new
159
+ metadata.add_creator('TheCreator', nil, 'aut').set_display_seq(1).set_file_as('Creator, The').add_alternates({ 'ja-JP' => '作成者' })
160
+ metadata.add_oldstyle_meta(nil, { 'name' => 'cover', 'content' => 'cover.jpg' })
161
+ builder = Nokogiri::XML::Builder.new { |xml|
162
+ xml.package('xmlns' => "http://www.idpf.org/2007/opf",'version' => "3.0",'unique-identifier' => "pub-id",'xml:lang' => "ja") {
163
+ metadata.to_xml(xml)
164
+ }
165
+ }
166
+ xml = Nokogiri::XML::Document.parse(builder.to_xml)
167
+ xml.xpath("//xmlns:meta[@name='cover' and @content='cover.jpg']").size.should == 1
168
+ end
169
+ end
170
+ end
@@ -0,0 +1,98 @@
1
+ # -*- coding: utf-8 -*-
2
+ require File.dirname(__FILE__) + '/spec_helper.rb'
3
+ require 'rubygems'
4
+ require 'nokogiri'
5
+
6
+ describe GEPUB::Package do
7
+ it 'should be initialized' do
8
+ opf = GEPUB::Package.new('/package.opf')
9
+ opf.ns_prefix(GEPUB::XMLUtil::OPF_NS).should == 'xmlns'
10
+ end
11
+ context 'parse existing opf' do
12
+ it 'should be initialized with opf' do
13
+ opf = GEPUB::Package.parse_opf(File.open(File.dirname(__FILE__) + '/fixtures/testdata/test.opf'), '/package.opf')
14
+ opf.ns_prefix(GEPUB::XMLUtil::OPF_NS).should == 'xmlns'
15
+ opf['version'].should == '3.0'
16
+ opf['unique-identifier'].should == 'pub-id'
17
+ opf['xml:lang'].should == 'ja'
18
+ end
19
+ end
20
+ context 'generate new opf' do
21
+ it 'should generate opf' do
22
+ opf = GEPUB::Package.new('OEBPS/package.opf') {
23
+ |opf|
24
+ opf.set_main_id('http://example.jp', 'BookID', 'url')
25
+ opf['xml:lang'] = 'ja'
26
+
27
+ # metadata add: style 1
28
+ opf.metadata.add_title('EPUB3 Sample', nil, GEPUB::TITLE_TYPE::MAIN) {
29
+ |title|
30
+ title.display_seq = 1
31
+ title.file_as = 'Sample EPUB3'
32
+ title.add_alternates(
33
+ 'en' => 'EPUB3 Sample (Japanese)',
34
+ 'el' => 'EPUB3 δείγμα (Ιαπωνικά)',
35
+ 'th' => 'EPUB3 ตัวอย่าง (ญี่ปุ่น)')
36
+ }
37
+ # metadata add: style2
38
+ opf.metadata.add_title('これでEPUB3もばっちり', nil, GEPUB::TITLE_TYPE::SUBTITLE).set_display_seq(2).add_alternates('en' => 'you need nothing but this book!')
39
+ opf.metadata.add_creator('小嶋智').set_display_seq(1).add_alternates('en' => 'KOJIMA Satoshi')
40
+ opf.metadata.add_contributor('電書部').set_display_seq(1).add_alternates('en' => 'Denshobu')
41
+ opf.metadata.add_contributor('アサガヤデンショ').set_display_seq(2).add_alternates('en' => 'Asagaya Densho')
42
+ opf.metadata.add_contributor('湘南電書鼎談').set_display_seq(3).add_alternates('en' => 'Shonan Densho Teidan')
43
+ opf.metadata.add_contributor('電子雑誌トルタル').set_display_seq(4).add_alternates('en' => 'eMagazine Torutaru')
44
+ opf.add_item('img/image1.jpg')
45
+ opf.add_item('img/cover.jpg').add_property('cover-image')
46
+ opf.ordered {
47
+ opf.add_item('text/chapter1.xhtml')
48
+ opf.add_item('text/chapter2.xhtml')
49
+ }
50
+ }
51
+ xml = Nokogiri::XML::Document.parse opf.opf_xml
52
+ xml.root.name.should == 'package'
53
+ xml.root.namespaces.size.should == 1
54
+ xml.root.namespaces['xmlns'].should == GEPUB::XMLUtil::OPF_NS
55
+ xml.root['version'].should == '3.0'
56
+ xml.root['lang'].should == 'ja'
57
+ # TODO: should check all elements
58
+ end
59
+
60
+ it 'should generate opf2.0' do
61
+ opf = GEPUB::Package.new('OEBPS/package.opf', { 'version' => '2.0'}) {
62
+ |opf|
63
+ opf.set_main_id('http://example.jp', 'BookID', 'url')
64
+ opf['xml:lang'] = 'ja'
65
+
66
+ # metadata add: style 1
67
+ opf.metadata.add_title('EPUB3 Sample', nil, GEPUB::TITLE_TYPE::MAIN) {
68
+ |title|
69
+ title.display_seq = 1
70
+ title.file_as = 'Sample EPUB3'
71
+ title.add_alternates(
72
+ 'en' => 'EPUB3 Sample (Japanese)',
73
+ 'el' => 'EPUB3 δείγμα (Ιαπωνικά)',
74
+ 'th' => 'EPUB3 ตัวอย่าง (ญี่ปุ่น)')
75
+ }
76
+ # metadata add: style2
77
+ opf.metadata.add_title('これでEPUB3もばっちり', nil, GEPUB::TITLE_TYPE::SUBTITLE).set_display_seq(2).add_alternates('en' => 'you need nothing but this book!')
78
+ opf.metadata.add_creator('小嶋智').set_display_seq(1).add_alternates('en' => 'KOJIMA Satoshi')
79
+ opf.metadata.add_contributor('電書部').set_display_seq(1).add_alternates('en' => 'Denshobu')
80
+ opf.metadata.add_contributor('アサガヤデンショ').set_display_seq(2).add_alternates('en' => 'Asagaya Densho')
81
+ opf.metadata.add_contributor('湘南電書鼎談').set_display_seq(3).add_alternates('en' => 'Shonan Densho Teidan')
82
+ opf.metadata.add_contributor('電子雑誌トルタル').set_display_seq(4).add_alternates('en' => 'eMagazine Torutaru')
83
+ opf.add_item('img/image1.jpg')
84
+ opf.ordered {
85
+ opf.add_item('text/chapter1.xhtml')
86
+ opf.add_item('text/chapter2.xhtml')
87
+ }
88
+ }
89
+ xml = Nokogiri::XML::Document.parse opf.opf_xml
90
+ xml.root.name.should == 'package'
91
+ xml.root.namespaces.size.should == 1
92
+ xml.root.namespaces['xmlns'].should == GEPUB::XMLUtil::OPF_NS
93
+ xml.root['version'].should == '2.0'
94
+ xml.root['lang'].should == 'ja'
95
+ end
96
+
97
+ end
98
+ end
@@ -0,0 +1,41 @@
1
+ # -*- coding: utf-8 -*-
2
+ require File.dirname(__FILE__) + '/spec_helper.rb'
3
+ require 'rubygems'
4
+ require 'nokogiri'
5
+
6
+ describe GEPUB::Spine do
7
+ context 'parse existing opf' do
8
+ before do
9
+ @spine = GEPUB::Package.parse_opf(File.open(File.dirname(__FILE__) + '/fixtures/testdata/test.opf'), '/package.opf').instance_eval{ @spine }
10
+ end
11
+ it 'should be parsed' do
12
+ @spine.toc.should == 'ncx'
13
+ @spine.page_progression_direction == 'ltr'
14
+ @spine.itemref_list.size.should == 4
15
+ @spine.itemref_list[0].idref.should == 'cover'
16
+ @spine.itemref_list[0].linear.should == 'no'
17
+ @spine.itemref_list[1].idref.should == 'toc'
18
+ @spine.itemref_list[1].linear.should == 'yes'
19
+ @spine.itemref_list[2].idref.should == 'chap1'
20
+ @spine.itemref_list[2].linear.should == 'yes'
21
+ @spine.itemref_list[3].idref.should == 'nav'
22
+ @spine.itemref_list[3].linear.should == 'no'
23
+ end
24
+ end
25
+ context 'generate new opf' do
26
+ it 'should generate xml' do
27
+ spine = GEPUB::Spine.new
28
+ spine.toc = 'ncx'
29
+ spine.push(GEPUB::Item.new('the_id', 'OEBPS/foo.xhtml')).set_linear('no')
30
+ builder = Nokogiri::XML::Builder.new { |xml|
31
+ xml.package('xmlns' => "http://www.idpf.org/2007/opf",'version' => "3.0",'unique-identifier' => "pub-id",'xml:lang' => "ja") {
32
+ spine.to_xml(xml)
33
+ }
34
+ }
35
+ xml = Nokogiri::XML::Document.parse(builder.to_xml)
36
+ xml.at_xpath('//xmlns:spine')['toc'].should == 'ncx'
37
+ xml.xpath("//xmlns:itemref[@idref='the_id' and @linear='no']").size.should == 1
38
+ end
39
+ end
40
+
41
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gepub
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-01-25 00:00:00.000000000 Z
12
+ date: 2012-02-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &70335555213040 !ruby/object:Gem::Requirement
16
+ requirement: &70114096287200 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,21 +21,10 @@ dependencies:
21
21
  version: '2'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70335555213040
25
- - !ruby/object:Gem::Dependency
26
- name: epubcheck
27
- requirement: &70335555212540 !ruby/object:Gem::Requirement
28
- none: false
29
- requirements:
30
- - - ! '>='
31
- - !ruby/object:Gem::Version
32
- version: 0.1.0
33
- type: :development
34
- prerelease: false
35
- version_requirements: *70335555212540
24
+ version_requirements: *70114096287200
36
25
  - !ruby/object:Gem::Dependency
37
26
  name: nokogiri
38
- requirement: &70335555212080 !ruby/object:Gem::Requirement
27
+ requirement: &70114091707580 !ruby/object:Gem::Requirement
39
28
  none: false
40
29
  requirements:
41
30
  - - ! '>='
@@ -43,19 +32,20 @@ dependencies:
43
32
  version: 1.5.0
44
33
  type: :runtime
45
34
  prerelease: false
46
- version_requirements: *70335555212080
35
+ version_requirements: *70114091707580
47
36
  - !ruby/object:Gem::Dependency
48
37
  name: rubyzip
49
- requirement: &70335555211620 !ruby/object:Gem::Requirement
38
+ requirement: &70114091706120 !ruby/object:Gem::Requirement
50
39
  none: false
51
40
  requirements:
52
41
  - - ! '>='
53
42
  - !ruby/object:Gem::Version
54
- version: 0.9.4
43
+ version: 0.9.6
55
44
  type: :runtime
56
45
  prerelease: false
57
- version_requirements: *70335555211620
58
- description: an easy-to-use EPUB generator.
46
+ version_requirements: *70114091706120
47
+ description: gepub is a EPUB parser/generator. Generates EPUB2 opf. will support EPUB3
48
+ parse/generation
59
49
  email:
60
50
  - skoji@mac.com
61
51
  executables:
@@ -65,22 +55,46 @@ extra_rdoc_files: []
65
55
  files:
66
56
  - .document
67
57
  - .gitignore
58
+ - .travis.yml
68
59
  - Gemfile
69
60
  - README.rdoc
70
61
  - Rakefile
71
62
  - bin/gepuber
72
- - examples/example.rb
63
+ - examples/generate_example.rb
64
+ - examples/image1.jpg
73
65
  - gepub.gemspec
74
66
  - lib/gepub.rb
75
67
  - lib/gepub/book.rb
76
68
  - lib/gepub/gepuber.rb
77
69
  - lib/gepub/item.rb
70
+ - lib/gepub/manifest.rb
71
+ - lib/gepub/meta.rb
72
+ - lib/gepub/metadata.rb
73
+ - lib/gepub/package.rb
74
+ - lib/gepub/spine.rb
78
75
  - lib/gepub/version.rb
76
+ - lib/gepub/xml_util.rb
77
+ - spec/example_spec.rb
78
+ - spec/fixtures/epubcheck-3.0b4/COPYING.txt
79
+ - spec/fixtures/epubcheck-3.0b4/README.txt
80
+ - spec/fixtures/epubcheck-3.0b4/epubcheck-3.0b4.jar
81
+ - spec/fixtures/epubcheck-3.0b4/jing_license.txt
82
+ - spec/fixtures/epubcheck-3.0b4/lib/commons-compress-1.2.jar
83
+ - spec/fixtures/epubcheck-3.0b4/lib/cssparser-0.9.6.jar
84
+ - spec/fixtures/epubcheck-3.0b4/lib/jing.jar
85
+ - spec/fixtures/epubcheck-3.0b4/lib/sac-1.3.jar
86
+ - spec/fixtures/epubcheck-3.0b4/lib/saxon9he.jar
79
87
  - spec/fixtures/testdata/0.html
80
88
  - spec/fixtures/testdata/1.html
89
+ - spec/fixtures/testdata/image1.jpg
90
+ - spec/fixtures/testdata/test.opf
81
91
  - spec/gepub_spec.rb
82
92
  - spec/gepuber_spec.rb
93
+ - spec/manifest_spec.rb
94
+ - spec/metadata_spec.rb
95
+ - spec/package_spec.rb
83
96
  - spec/spec_helper.rb
97
+ - spec/spine_spec.rb
84
98
  homepage: http://github.com/skoji/gepub
85
99
  licenses: []
86
100
  post_install_message:
@@ -104,10 +118,26 @@ rubyforge_project: gepub
104
118
  rubygems_version: 1.8.11
105
119
  signing_key:
106
120
  specification_version: 3
107
- summary: a good-enough EPUB generator.
121
+ summary: a generic EPUB parser/generator.
108
122
  test_files:
123
+ - spec/example_spec.rb
124
+ - spec/fixtures/epubcheck-3.0b4/COPYING.txt
125
+ - spec/fixtures/epubcheck-3.0b4/README.txt
126
+ - spec/fixtures/epubcheck-3.0b4/epubcheck-3.0b4.jar
127
+ - spec/fixtures/epubcheck-3.0b4/jing_license.txt
128
+ - spec/fixtures/epubcheck-3.0b4/lib/commons-compress-1.2.jar
129
+ - spec/fixtures/epubcheck-3.0b4/lib/cssparser-0.9.6.jar
130
+ - spec/fixtures/epubcheck-3.0b4/lib/jing.jar
131
+ - spec/fixtures/epubcheck-3.0b4/lib/sac-1.3.jar
132
+ - spec/fixtures/epubcheck-3.0b4/lib/saxon9he.jar
109
133
  - spec/fixtures/testdata/0.html
110
134
  - spec/fixtures/testdata/1.html
135
+ - spec/fixtures/testdata/image1.jpg
136
+ - spec/fixtures/testdata/test.opf
111
137
  - spec/gepub_spec.rb
112
138
  - spec/gepuber_spec.rb
139
+ - spec/manifest_spec.rb
140
+ - spec/metadata_spec.rb
141
+ - spec/package_spec.rb
113
142
  - spec/spec_helper.rb
143
+ - spec/spine_spec.rb