epub-parser 0.2.5 → 0.2.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +3 -3
- data/.yardopts +2 -0
- data/CHANGELOG.markdown +14 -1
- data/README.markdown +15 -29
- data/Rakefile +39 -4
- data/docs/FixedLayout.markdown +1 -1
- data/docs/Item.markdown +1 -1
- data/epub-parser.gemspec +2 -0
- data/examples/exctract-content-using-cfi.rb +111 -0
- data/examples/find-elements-and-cfis.rb +54 -0
- data/lib/epub/book/features.rb +36 -29
- data/lib/epub/constants.rb +2 -1
- data/lib/epub/inspector.rb +8 -3
- data/lib/epub/metadata.rb +178 -0
- data/lib/epub/ocf/container.rb +2 -1
- data/lib/epub/ocf/metadata.rb +2 -1
- data/lib/epub/ocf/physical_container.rb +11 -2
- data/lib/epub/ocf/physical_container/archive_zip.rb +7 -5
- data/lib/epub/ocf/physical_container/unpacked_directory.rb +4 -0
- data/lib/epub/ocf/physical_container/unpacked_uri.rb +4 -0
- data/lib/epub/ocf/physical_container/zipruby.rb +17 -5
- data/lib/epub/parser.rb +12 -5
- data/lib/epub/parser/metadata.rb +67 -0
- data/lib/epub/parser/ocf.rb +19 -4
- data/lib/epub/parser/publication.rb +32 -88
- data/lib/epub/parser/version.rb +1 -1
- data/lib/epub/publication/package/metadata.rb +2 -167
- data/test/fixtures/book/META-INF/metadata.xml +6 -0
- data/test/helper.rb +3 -0
- data/test/test_epub.rb +5 -1
- data/test/test_inspect.rb +4 -4
- data/test/test_parser_fixed_layout.rb +3 -2
- data/test/test_parser_ocf.rb +16 -1
- data/test/test_parser_publication.rb +14 -13
- data/test/test_publication.rb +36 -0
- data/test/test_searcher.rb +1 -1
- metadata +35 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7b9ee0e48ab95b16264f66048d2f0d040f63ab2d
|
4
|
+
data.tar.gz: b16bd608fc1c7c54de24a30c13ad880cd9f096de
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6df7c1519d379afe93635e085ae7c3d9548ac9005a7e6cb79066db2310deca63ac8d0089100516a3657e6a16f092c3472897e5b10c227dd60b0c5db5e028f570
|
7
|
+
data.tar.gz: 80f34c61d4043beba1ca680db124744a1c619c126e19b097d2b1ba4ac0cb0439efdb99ebd9c183119f8d5a210bfde7408f234b4bf25678a36b4401cf842f37a6
|
data/.travis.yml
CHANGED
@@ -1,4 +1,4 @@
|
|
1
1
|
rvm:
|
2
|
-
- "2.1.
|
3
|
-
- "2.2.
|
4
|
-
- "2.3.
|
2
|
+
- "2.1.10"
|
3
|
+
- "2.2.5"
|
4
|
+
- "2.3.1"
|
data/.yardopts
CHANGED
data/CHANGELOG.markdown
CHANGED
@@ -1,12 +1,25 @@
|
|
1
1
|
CHANGELOG
|
2
2
|
=========
|
3
3
|
|
4
|
+
0.2.6
|
5
|
+
-----
|
6
|
+
|
7
|
+
* Add `EPUB::Publication::Package::Metadata#package_identifier` as alias of `#release_identifier`, which is defined in EPUB Publication 3.0 spec
|
8
|
+
* [BUG FIX]Metadata#modified returns modified with no refiners
|
9
|
+
* Make second argument for `EPUB::Parser::Publication.new` deprecated
|
10
|
+
* Add META-INF/metadata.xml support defined in [EPUB Multiple-Rendition Publications 1.0][multi-rendition]
|
11
|
+
* Add `EPUB::Book::Features#packages` and `#default_rendition`
|
12
|
+
* [BUG FIX]Don't raise error when using `Zipruby` container adapter
|
13
|
+
|
14
|
+
[multi-rendition]: http://www.idpf.org/epub/renditions/multiple/
|
15
|
+
|
4
16
|
0.2.5
|
5
17
|
-----
|
6
18
|
|
7
|
-
* [BUG FIX]
|
19
|
+
* [BUG FIX]Don't load Zip/Ruby if unneccessary
|
8
20
|
* Raise error when PhysicalContainer::ArchiveZip fails find entry
|
9
21
|
* Remove unused files in schemas directory
|
22
|
+
* Add `EPUB::CFI::PhysicalContainer.find_adapter`
|
10
23
|
|
11
24
|
0.2.4
|
12
25
|
-----
|
data/README.markdown
CHANGED
@@ -135,7 +135,7 @@ REQUIREMENTS
|
|
135
135
|
------------
|
136
136
|
* Ruby 2.1.0 or later
|
137
137
|
* `patch` command to install Nokogiri
|
138
|
-
* C compiler to compile
|
138
|
+
* C compiler to compile Nokogiri
|
139
139
|
|
140
140
|
Related Gems
|
141
141
|
------------
|
@@ -151,9 +151,21 @@ If you find other gems, please tell me or request a pull request.
|
|
151
151
|
RECENT CHANGES
|
152
152
|
--------------
|
153
153
|
|
154
|
+
### 0.2.6
|
155
|
+
|
156
|
+
* Add `EPUB::Publication::Package::Metadata#package_identifier` as alias of `#release_identifier`
|
157
|
+
* [BUG FIX]Metadata#modified returns modified with no refiners
|
158
|
+
* Make second argument for `EPUB::Parser::Publication.new` deprecated
|
159
|
+
* Add META-INF/metadata.xml support defined in [EPUB Multiple-Rendition Publications 1.0][multi-rendition]
|
160
|
+
* Add `EPUB::Book::Features#packages` and `#default_rendition`
|
161
|
+
* [BUG FIX]Don't raise error when using `Zipruby` container adapter
|
162
|
+
|
163
|
+
[multi-rendition]: http://www.idpf.org/epub/renditions/multiple/
|
164
|
+
|
154
165
|
### 0.2.5
|
155
166
|
|
156
|
-
* [BUG FIX]
|
167
|
+
* [BUG FIX]Don't load Zip/Ruby if unneccessary
|
168
|
+
* Add `EPUB::CFI::PhysicalContainer.find_adapter`
|
157
169
|
|
158
170
|
### 0.2.4
|
159
171
|
|
@@ -163,38 +175,11 @@ RECENT CHANGES
|
|
163
175
|
* Change attribute name: `EPUB::CFI::Step#step` -> `EPUB::CFI::Step#value`, `EPUB::CFI::CharacterOffset#offset` -> `EPUB::CFI::CharacterOffset#value`
|
164
176
|
* Show modified on `epubinfo` command
|
165
177
|
|
166
|
-
### 0.2.3
|
167
|
-
|
168
|
-
* Change the name of physical container adapter for file system: :File -> :UnpackedDirectory
|
169
|
-
* Add `EPUB::Publication::Package::Manifest::Item#full_path`
|
170
|
-
* Make #href= acceptable String
|
171
|
-
* Implement `EPUB::CFI` and `EPUB::Parser::CFI`
|
172
|
-
* Remove [nokogumbo][] from dependencies. It ommits `head` and `body` elements
|
173
|
-
* Remove Cucumber and Cucumber features
|
174
|
-
* Add `EPUB::Publication::Package::Metadata#modified` and `EPUB::Book::Features#modified`
|
175
|
-
* Add `EPUB::Book::Features#release_identifier`
|
176
|
-
|
177
|
-
[nokogumbo]: https://github.com/rubys/nokogumbo/
|
178
|
-
|
179
|
-
### 0.2.2
|
180
|
-
|
181
|
-
* [BUGFIX]Item#entry_name returns normalized IRI
|
182
|
-
|
183
|
-
### 0.2.1
|
184
|
-
|
185
|
-
* Remove deprecated `EPUB::Constants::MediaType::UnsupportedError`. Use `UnsupportedMediatType` instead.
|
186
|
-
* Make it possible to use [archive-zip][] gem to extract contents from EPUB package
|
187
|
-
* Add warning about default physical container adapter change
|
188
|
-
* Make it possible to extract contents from the web via `EPUB::OCF::PhysicalContainer::UnpackedURI` See {file:ExtractContentsFromWeb.markdown} for details.
|
189
|
-
|
190
|
-
[archive-zip]: https://github.com/javanthropus/archive-zip
|
191
|
-
|
192
178
|
See {file:CHANGELOG.markdown} for older changelogs and details.
|
193
179
|
|
194
180
|
TODOS
|
195
181
|
-----
|
196
182
|
* EPUB 3.0.1
|
197
|
-
* Multiple rootfiles
|
198
183
|
* Help features for `epub-open` tool
|
199
184
|
* Vocabulary Association Mechanisms
|
200
185
|
* Implementing navigation document and so on
|
@@ -215,6 +200,7 @@ DONE
|
|
215
200
|
* Vocabulary Association Mechanisms(only for itemref)
|
216
201
|
* Archive library abstraction
|
217
202
|
* Extracting and organizing common behavior from some classes to modules
|
203
|
+
* Multiple rootfiles
|
218
204
|
|
219
205
|
LICENSE
|
220
206
|
-------
|
data/Rakefile
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
require 'bundler/gem_helper'
|
2
1
|
require 'rake/clean'
|
3
2
|
require 'rake/testtask'
|
3
|
+
require 'rubygems/tasks'
|
4
4
|
require 'yard'
|
5
5
|
require 'rdoc/task'
|
6
6
|
require 'epub/parser/version'
|
@@ -54,7 +54,42 @@ namespace :doc do
|
|
54
54
|
end
|
55
55
|
end
|
56
56
|
|
57
|
-
|
58
|
-
|
59
|
-
|
57
|
+
Gem::Tasks.new do |tasks|
|
58
|
+
tasks.console.command = 'pry'
|
59
|
+
end
|
60
|
+
task :build => [:clean, CFI_TAB]
|
61
|
+
|
62
|
+
class ForwardableDefDelegatorsHandler < YARD::Handlers::Ruby::Base
|
63
|
+
handles method_call(:def_delegators)
|
64
|
+
namespace_only
|
65
|
+
|
66
|
+
def process
|
67
|
+
params = validated_attribute_names(statement.parameters(false))
|
68
|
+
accessor = params.shift
|
69
|
+
params.each do |param|
|
70
|
+
object = YARD::CodeObjects::MethodObject.new(namespace, param)
|
71
|
+
object.docstring = "Forwarded to +#{accessor}+"
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
protected
|
76
|
+
|
77
|
+
# Strips out any non-essential arguments from the attr statement.
|
78
|
+
#
|
79
|
+
# @param [Array<Parser::Ruby::AstNode>] params a list of the parameters
|
80
|
+
# in the attr call.
|
81
|
+
# @return [Array<String>] the validated attribute names
|
82
|
+
# @raise [Parser::UndocumentableError] if the arguments are not valid.
|
83
|
+
def validated_attribute_names(params)
|
84
|
+
params.map do |obj|
|
85
|
+
case obj.type
|
86
|
+
when :symbol_literal
|
87
|
+
obj.jump(:ident, :op, :kw, :const).source
|
88
|
+
when :string_literal
|
89
|
+
obj.jump(:string_content).source
|
90
|
+
else
|
91
|
+
raise YARD::Parser::UndocumentableError, obj.source
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
60
95
|
end
|
data/docs/FixedLayout.markdown
CHANGED
@@ -15,7 +15,7 @@ Methods for {EPUB::Publication::Package}
|
|
15
15
|
|
16
16
|
It is `true` when `package@prefix` attribute has `rendition` property.
|
17
17
|
|
18
|
-
parser = EPUB::Parser::Publication.new(<<OPF
|
18
|
+
parser = EPUB::Parser::Publication.new(<<OPF)
|
19
19
|
<package version="3.0"
|
20
20
|
unique-identifier="pub-id"
|
21
21
|
xmlns="http://www.idpf.org/2007/opf"
|
data/docs/Item.markdown
CHANGED
@@ -4,7 +4,7 @@ Overview
|
|
4
4
|
========
|
5
5
|
|
6
6
|
When manipulating resources (XHTML, images, audio...) in EPUB, {EPUB::Publication::Package::Manifest::Item} object will be used.
|
7
|
-
And objects which {EPUB#each_page_on_spine} yields are also instances of this class.
|
7
|
+
And objects which {EPUB::Book::Features#each_page_on_spine} yields are also instances of this class.
|
8
8
|
|
9
9
|
Here's the tutorial of this class.
|
10
10
|
|
data/epub-parser.gemspec
CHANGED
@@ -27,6 +27,7 @@ Gem::Specification.new do |s|
|
|
27
27
|
s.has_rdoc = 'yard'
|
28
28
|
|
29
29
|
s.add_development_dependency 'rake'
|
30
|
+
s.add_development_dependency 'rubygems-tasks'
|
30
31
|
s.add_development_dependency 'zipruby'
|
31
32
|
s.add_development_dependency 'pry'
|
32
33
|
s.add_development_dependency 'pry-doc'
|
@@ -40,6 +41,7 @@ Gem::Specification.new do |s|
|
|
40
41
|
s.add_development_dependency 'epzip'
|
41
42
|
s.add_development_dependency 'racc'
|
42
43
|
s.add_development_dependency 'nokogiri-diff'
|
44
|
+
s.add_development_dependency 'pretty_backtrace'
|
43
45
|
|
44
46
|
s.add_runtime_dependency 'archive-zip'
|
45
47
|
s.add_runtime_dependency 'nokogiri', '~> 1.6'
|
@@ -0,0 +1,111 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
# Preparation
|
3
|
+
#
|
4
|
+
# % cd examples
|
5
|
+
# % wget -O accessible-epub3.epub 'https://drive.google.com/uc?export=download&id=0B9g8D2Y-6aPLRmFKRTNIam93RTQ'
|
6
|
+
#
|
7
|
+
# Execution
|
8
|
+
#
|
9
|
+
# % ruby exctract-content-using-cfi.rb accessible-epub3.epub '/6/10!/4/2/4'
|
10
|
+
# <p>Accessibility is a difficult concept to define. There’s no single magic bullet
|
11
|
+
# solution that will make all content accessible to all people. Perhaps that’s a
|
12
|
+
# strange way to preface a book on accessible practices, but it’s also a reality you
|
13
|
+
# need to be aware of. Accessible practices change, technologies evolve to solve
|
14
|
+
# stubborn problems, and the world becomes a more accessible place all the time.</p>
|
15
|
+
#
|
16
|
+
# % ruby exctract-content-using-cfi.rb accessible-epub3.epub '/6/10!/4/2,/4,/8'
|
17
|
+
# <p>Accessibility is a difficult concept to define. There’s no single magic bullet
|
18
|
+
# solution that will make all content accessible to all people. Perhaps that’s a
|
19
|
+
# strange way to preface a book on accessible practices, but it’s also a reality you
|
20
|
+
# need to be aware of. Accessible practices change, technologies evolve to solve
|
21
|
+
# stubborn problems, and the world becomes a more accessible place all the time.</p>
|
22
|
+
# <p xmlns="http://www.w3.org/1999/xhtml">But although there are best practices that everyone should be following, and that
|
23
|
+
# will be detailed as we go along, this guide should neither be read as an instrument
|
24
|
+
# for accessibility compliance nor as a replacement for existing guidelines.</p>
|
25
|
+
# <p></p>
|
26
|
+
#
|
27
|
+
# Yes, output above shows a bug!
|
28
|
+
#
|
29
|
+
# % ruby exctract-content-using-cfi.rb accessible-epub3.epub '/6/10!/4/2/4,:0,:47'
|
30
|
+
# Accessibility is a difficult concept to define.
|
31
|
+
|
32
|
+
require 'epub/parser'
|
33
|
+
require 'epub/parser/cfi'
|
34
|
+
require 'nokogiri' # Do gem install nokogiri
|
35
|
+
require 'nokogiri/xml/range' # Do gem install nokogiri-xml-range
|
36
|
+
|
37
|
+
def main(argv)
|
38
|
+
epub_path = argv.shift
|
39
|
+
cfi_string = argv.shift
|
40
|
+
if epub_path.nil? or cfi_string.nil?
|
41
|
+
$stderr.puts "USAGE: ruby #{$0} EPUB CFI"
|
42
|
+
abort
|
43
|
+
end
|
44
|
+
|
45
|
+
epub = EPUB::Parser.parse(epub_path)
|
46
|
+
cfi = EPUB::CFI(cfi_string)
|
47
|
+
|
48
|
+
content = extract_content(epub, cfi)
|
49
|
+
case content
|
50
|
+
when Nokogiri::XML::Element
|
51
|
+
puts content
|
52
|
+
when Nokogiri::XML::Range
|
53
|
+
puts content.clone_contents
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def extract_content(epub, cfi)
|
58
|
+
if cfi.kind_of? EPUB::CFI::Location
|
59
|
+
node = get_element(cfi, epub)
|
60
|
+
offset = cfi.paths.last.offset
|
61
|
+
offset = offset.value if offset
|
62
|
+
# Maybe offset may not be used
|
63
|
+
return node
|
64
|
+
end
|
65
|
+
|
66
|
+
start_node = get_element(cfi.first, epub)
|
67
|
+
# Need more consideration
|
68
|
+
start_node = start_node.children.first if start_node.element?
|
69
|
+
|
70
|
+
end_node = get_element(cfi.last, epub)
|
71
|
+
# Need more consideration
|
72
|
+
end_node = end_node.children.last if end_node.element?
|
73
|
+
|
74
|
+
start_offset = cfi.first.paths.last.offset
|
75
|
+
start_offset = start_offset ? start_offset.value : 0
|
76
|
+
end_offset = cfi.last.paths.last.offset
|
77
|
+
end_offset = end_offset ? end_offset.value : 0
|
78
|
+
|
79
|
+
range = Nokogiri::XML::Range.new(start_node, start_offset, end_node, end_offset)
|
80
|
+
|
81
|
+
return range
|
82
|
+
end
|
83
|
+
|
84
|
+
def get_element(cfi, epub)
|
85
|
+
path_in_package = cfi.paths.first
|
86
|
+
step_to_itemref = path_in_package.steps[1]
|
87
|
+
itemref = epub.spine.itemrefs[step_to_itemref.step / 2 - 1]
|
88
|
+
|
89
|
+
doc = itemref.item.content_document.nokogiri
|
90
|
+
path_in_doc = cfi.paths[1]
|
91
|
+
current_node = doc.root
|
92
|
+
path_in_doc.steps.each do |step|
|
93
|
+
if step.element?
|
94
|
+
current_node = current_node.element_children[step.value / 2 - 1]
|
95
|
+
else
|
96
|
+
element_index = (step.value - 1) / 2 - 1
|
97
|
+
if element_index == -1
|
98
|
+
current_node = current_node.children.first
|
99
|
+
else
|
100
|
+
prev = current_node.element_children[element_index]
|
101
|
+
break unless prev
|
102
|
+
current_node = prev.next_sibling
|
103
|
+
break unless current_node
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
current_node
|
109
|
+
end
|
110
|
+
|
111
|
+
main(ARGV)
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'English'
|
2
|
+
require 'epub/parser'
|
3
|
+
require 'epub/parser/cfi'
|
4
|
+
require 'nokogiri'
|
5
|
+
|
6
|
+
def usage
|
7
|
+
<<EOS
|
8
|
+
|
9
|
+
USAGE:
|
10
|
+
ruby #{$PROGRAM_NAME} ELEMENT EPUB
|
11
|
+
|
12
|
+
EOS
|
13
|
+
end
|
14
|
+
|
15
|
+
def main(argv)
|
16
|
+
elem_name = argv.shift
|
17
|
+
epub_path = argv.shift
|
18
|
+
if elem_name.nil? or epub_path.nil?
|
19
|
+
abort usage
|
20
|
+
end
|
21
|
+
|
22
|
+
spine_step = EPUB::CFI::Step.new(6)
|
23
|
+
|
24
|
+
epub = EPUB::Parser.parse(epub_path)
|
25
|
+
epub.package.spine.each_itemref.with_index do |itemref, i|
|
26
|
+
itemref_step = {
|
27
|
+
:step => (i + 1) * 2,
|
28
|
+
:id => itemref.id
|
29
|
+
}
|
30
|
+
assertion = itemref.id ? EPUB::CFI::IDAssertion.new(itemref.id) : nil
|
31
|
+
itemref_step = EPUB::CFI::Step.new((i + 1) * 2, assertion)
|
32
|
+
path_to_itemref = EPUB::CFI::Path.new([spine_step, itemref_step])
|
33
|
+
itemref.item.content_document.nokogiri.search(elem_name).each do |elem|
|
34
|
+
path = find_path(elem)
|
35
|
+
location = EPUB::CFI::Location.new([path_to_itemref, path])
|
36
|
+
puts
|
37
|
+
puts location
|
38
|
+
puts elem
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def find_path(elem)
|
44
|
+
steps = []
|
45
|
+
until elem.parent.document?
|
46
|
+
index = elem.parent.element_children.index(elem)
|
47
|
+
assertion = elem["id"] ? EPUB::CFI::IDAssertion.new(elem["id"]) : nil
|
48
|
+
steps.unshift EPUB::CFI::Step.new((index + 1) * 2, assertion)
|
49
|
+
elem = elem.parent
|
50
|
+
end
|
51
|
+
EPUB::CFI::Path.new(steps)
|
52
|
+
end
|
53
|
+
|
54
|
+
main ARGV
|
data/lib/epub/book/features.rb
CHANGED
@@ -1,45 +1,57 @@
|
|
1
|
+
require 'forwardable'
|
2
|
+
|
1
3
|
module EPUB
|
2
4
|
class Book
|
3
5
|
module Features
|
4
|
-
|
5
|
-
attr_reader
|
6
|
+
extend Forwardable
|
7
|
+
attr_reader :ocf
|
8
|
+
attr_writer :package
|
6
9
|
attr_accessor :epub_file
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
10
|
+
|
11
|
+
# When writing, sets +ocf.book+ to self.
|
12
|
+
# @param [OCF]
|
13
|
+
def ocf=(mod)
|
14
|
+
@ocf = mod
|
15
|
+
mod.book = self
|
16
|
+
mod
|
12
17
|
end
|
13
18
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
end
|
19
|
+
# @return [Array<OCF::Container::Rootfile>]
|
20
|
+
def rootfiles
|
21
|
+
ocf.container.rootfiles
|
18
22
|
end
|
19
23
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
end
|
24
|
+
# @return [Array<Publication::Package>]
|
25
|
+
def packages
|
26
|
+
rootfiles.map(&:package)
|
24
27
|
end
|
28
|
+
alias renditions packages
|
25
29
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
+
# Syntax sugar.
|
31
|
+
# Returns package set by +package=+.
|
32
|
+
# Returns default rendition if any package has not been set ever.
|
33
|
+
# @return [Publication::Package]
|
34
|
+
def package
|
35
|
+
@package || default_rendition
|
30
36
|
end
|
31
37
|
|
32
|
-
|
33
|
-
|
38
|
+
# First +package+ in +packages+
|
39
|
+
# @return [Package|nil]
|
40
|
+
def default_rendition
|
41
|
+
packages.first
|
34
42
|
end
|
35
43
|
|
44
|
+
# @!parse def_delegators :package, :metadata, :manifest, :spine, :guide, :bindings
|
45
|
+
def_delegators :package, *Publication::Package::CONTENT_MODELS
|
46
|
+
def_delegators :metadata, :title, :main_title, :subtitle, :short_title, :collection_title, :edition_title, :extended_title, :description, :date, :unique_identifier, :modified, :release_identifier, :package_identifier
|
47
|
+
def_delegators :manifest, :nav, :cover_image
|
48
|
+
|
36
49
|
def container_adapter
|
37
50
|
@adapter || OCF::PhysicalContainer.adapter
|
38
51
|
end
|
39
52
|
|
40
53
|
def container_adapter=(adapter)
|
41
|
-
@adapter =
|
42
|
-
adapter
|
54
|
+
@adapter = OCF::PhysicalContainer.find_adapter(adapter)
|
43
55
|
end
|
44
56
|
|
45
57
|
# @overload each_page_on_spine(&blk)
|
@@ -84,15 +96,10 @@ module EPUB
|
|
84
96
|
end
|
85
97
|
|
86
98
|
# Syntax sugar
|
99
|
+
# @return String
|
87
100
|
def rootfile_path
|
88
101
|
ocf.container.rootfile.full_path.to_s
|
89
102
|
end
|
90
|
-
|
91
|
-
# Syntax sugar
|
92
|
-
def cover_image
|
93
|
-
manifest.cover_image
|
94
|
-
end
|
95
|
-
|
96
103
|
end
|
97
104
|
end
|
98
105
|
end
|