epub-parser 0.0.7 → 0.0.8
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/README.markdown +22 -2
- data/bin/epubinfo +12 -5
- data/epub-parser.gemspec +2 -0
- data/lib/epub.rb +6 -0
- data/lib/epub/constants.rb +7 -7
- data/lib/epub/parser.rb +1 -1
- data/lib/epub/parser/ocf.rb +1 -1
- data/lib/epub/parser/publication.rb +59 -4
- data/lib/epub/parser/version.rb +1 -1
- data/lib/epub/publication/package.rb +6 -2
- data/lib/epub/publication/package/metadata.rb +86 -8
- data/man/epubinfo.1.ronn +19 -0
- data/test/fixtures/book.epub +0 -0
- data/test/fixtures/book/OPS//343/203/253/343/203/274/343/203/210/343/203/225/343/202/241/343/202/244/343/203/253.opf +7 -2
- metadata +59 -36
data/README.markdown
CHANGED
@@ -1,15 +1,26 @@
|
|
1
1
|
EPUB Parser
|
2
2
|
===========
|
3
3
|
|
4
|
-
|
4
|
+
INSTALLATION
|
5
5
|
-------
|
6
6
|
gem install epub-parser
|
7
7
|
|
8
8
|
USAGE
|
9
9
|
-----
|
10
|
+
|
11
|
+
### As a command line tool
|
12
|
+
|
13
|
+
epubinfo path/to/book.epub
|
14
|
+
|
15
|
+
For more info:
|
16
|
+
|
17
|
+
epubinfo -h
|
18
|
+
|
19
|
+
### As a library
|
20
|
+
|
10
21
|
require 'epub/parser'
|
11
22
|
|
12
|
-
book = EPUB::Parser.parse 'book.epub', '
|
23
|
+
book = EPUB::Parser.parse 'book.epub', 'working/directory'
|
13
24
|
book.each_page_on_spine do |page|
|
14
25
|
# do somethong...
|
15
26
|
end
|
@@ -23,6 +34,15 @@ REQUIREMENTS
|
|
23
34
|
* UNIX like `unzip` command
|
24
35
|
* libxml2 and libxslt for Nokogiri gem
|
25
36
|
|
37
|
+
TODOS
|
38
|
+
-----
|
39
|
+
* Adding tests
|
40
|
+
* Implementing metadata/link, navigation document and so on
|
41
|
+
* Using zip library instead of `unzip` command, which has security issue
|
42
|
+
* Using SAX on parsing
|
43
|
+
* Extracting and organizing common behavior from some classes to modules
|
44
|
+
* Abstraction of XML parser(making it possible to use REXML, standard bundled XML library of Ruby)
|
45
|
+
|
26
46
|
LICENSE
|
27
47
|
-------
|
28
48
|
This library is distribuetd under the term of the MIT License.
|
data/bin/epubinfo
CHANGED
@@ -6,22 +6,29 @@ Version = EPUB::Parser::VERSION
|
|
6
6
|
|
7
7
|
options = {:format => :line}
|
8
8
|
opt = OptionParser.new do |opt|
|
9
|
-
opt.banner =
|
10
|
-
|
9
|
+
opt.banner = <<EOB
|
10
|
+
Show metadata of an EPUB file
|
11
|
+
|
12
|
+
Usage: epubinfo [options] EPUBFILE
|
13
|
+
|
14
|
+
EOB
|
15
|
+
opt.on '-f', '--format=FORMAT', [:line, :json, :yaml], 'format of output(line, json or yaml), defaults to line(for console)' do |format|
|
11
16
|
options[:format] = format
|
12
17
|
end
|
13
18
|
end
|
14
19
|
opt.parse!(ARGV)
|
15
20
|
|
16
|
-
file = ARGV
|
21
|
+
file = ARGV.shift
|
17
22
|
unless file
|
23
|
+
$stdout.puts "error: you must supply an EPUB file name"
|
18
24
|
$stdout.puts opt.help
|
19
|
-
exit
|
25
|
+
exit!
|
20
26
|
end
|
21
27
|
|
22
28
|
Dir.mktmpdir('epub-parser') do |dir|
|
23
29
|
book = EPUB::Parser.parse file, dir
|
24
|
-
data = book.
|
30
|
+
data = {'Title' => [book.title]}
|
31
|
+
data.merge!(book.package.metadata.to_hash)
|
25
32
|
data['Unique identifier'] = [book.package.metadata.unique_identifier]
|
26
33
|
data['EPUB Version'] = [book.package.version]
|
27
34
|
if options[:format] == :line
|
data/epub-parser.gemspec
CHANGED
@@ -28,6 +28,8 @@ Gem::Specification.new do |s|
|
|
28
28
|
s.add_development_dependency 'simplecov'
|
29
29
|
s.add_development_dependency 'thin'
|
30
30
|
s.add_development_dependency 'yard'
|
31
|
+
s.add_development_dependency 'gem-man'
|
32
|
+
s.add_development_dependency 'ronn'
|
31
33
|
s.add_development_dependency 'epzip'
|
32
34
|
s.add_development_dependency 'epubcheck'
|
33
35
|
s.add_development_dependency 'epub_validator'
|
data/lib/epub.rb
CHANGED
@@ -19,6 +19,12 @@ module EPUB
|
|
19
19
|
end
|
20
20
|
module_function :parse
|
21
21
|
|
22
|
+
%w[ title main_title subtitle short_title collection_title edition_title extended_title ].each do |met|
|
23
|
+
define_method met do
|
24
|
+
@package.metadata.__send__(met)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
22
28
|
def each_page_on_spine(&blk)
|
23
29
|
enum = @package.spine.items
|
24
30
|
if block_given?
|
data/lib/epub/constants.rb
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
module EPUB
|
2
2
|
module Constants
|
3
3
|
NAMESPACES = {
|
4
|
-
'dc'
|
5
|
-
'
|
6
|
-
'opf'
|
7
|
-
'xhtml'
|
8
|
-
'epub'
|
9
|
-
'm'
|
10
|
-
'svg'
|
4
|
+
'dc' => 'http://purl.org/dc/elements/1.1/',
|
5
|
+
'ocf' => 'urn:oasis:names:tc:opendocument:xmlns:container',
|
6
|
+
'opf' => 'http://www.idpf.org/2007/opf',
|
7
|
+
'xhtml' => 'http://www.w3.org/1999/xhtml',
|
8
|
+
'epub' => 'http://www.idpf.org/2007/ops',
|
9
|
+
'm' => 'http://www.w3.org/1998/Math/MathML',
|
10
|
+
'svg' => 'http://www.w3.org/2000/svg'
|
11
11
|
}
|
12
12
|
|
13
13
|
module Type
|
data/lib/epub/parser.rb
CHANGED
@@ -25,7 +25,7 @@ module EPUB
|
|
25
25
|
@book = create_book options
|
26
26
|
|
27
27
|
unzip_cmd = options['unzip-command'] || 'unzip'
|
28
|
-
unzip_cmd << " #{@filepath.to_s.shellescape} -d #{@dir.to_s.shellescape}"
|
28
|
+
unzip_cmd << " #{@filepath.to_s.shellescape} -d #{@dir.to_s.shellescape} 1>/dev/null"
|
29
29
|
system unzip_cmd
|
30
30
|
end
|
31
31
|
|
data/lib/epub/parser/ocf.rb
CHANGED
@@ -30,7 +30,7 @@ module EPUB
|
|
30
30
|
container = EPUB::OCF::Container.new
|
31
31
|
doc = Nokogiri.XML open(File.join @dir, DIRECTORY, CONTAINER_FILE)
|
32
32
|
|
33
|
-
doc.xpath('/
|
33
|
+
doc.xpath('/ocf:container/ocf:rootfiles/ocf:rootfile', EPUB::NAMESPACES).each do |elem|
|
34
34
|
rootfile = EPUB::OCF::Container::Rootfile.new
|
35
35
|
%w[full-path media-type].each do |attr|
|
36
36
|
rootfile.__send__(attr.gsub(/-/, '_') + '=', elem[attr])
|
@@ -32,7 +32,7 @@ module EPUB
|
|
32
32
|
def parse_package
|
33
33
|
elem = @doc.root
|
34
34
|
@package.version = elem['version']
|
35
|
-
@package.
|
35
|
+
@package.unique_identifier_id = elem['unique-identifier']
|
36
36
|
|
37
37
|
@package
|
38
38
|
end
|
@@ -40,29 +40,84 @@ module EPUB
|
|
40
40
|
def parse_metadata
|
41
41
|
metadata = @package.metadata = EPUB::Publication::Package::Metadata.new
|
42
42
|
elem = @doc.xpath('/opf:package/opf:metadata', EPUB::NAMESPACES).first
|
43
|
+
id_map = {}
|
43
44
|
|
44
45
|
metadata.identifiers = elem.xpath('./dc:identifier', EPUB::NAMESPACES).collect do |e|
|
45
46
|
identifier = EPUB::Publication::Package::Metadata::Identifier.new
|
46
47
|
identifier.content = e.content
|
47
48
|
identifier.id = id = e['id']
|
48
|
-
metadata.unique_identifier = identifier if id == @package.
|
49
|
+
metadata.unique_identifier = identifier if id == @package.unique_identifier_id
|
50
|
+
|
49
51
|
identifier
|
50
52
|
end
|
53
|
+
metadata.identifiers.each {|i| id_map[i.id] = {metadata: i} if i.respond_to?(:id) && i.id}
|
51
54
|
|
52
|
-
metadata.titles =
|
55
|
+
metadata.titles = elem.xpath('./dc:title', EPUB::NAMESPACES).collect do |e|
|
56
|
+
title = EPUB::Publication::Package::Metadata::Title.new
|
57
|
+
%w[ id lang dir ].each do |attr|
|
58
|
+
title.__send__("#{attr}=", e[attr])
|
59
|
+
end
|
53
60
|
title.content = e.content
|
61
|
+
|
62
|
+
title
|
54
63
|
end
|
64
|
+
# metadata.titles = collect_dcmes(elem, './dc:title') do |title, e|
|
65
|
+
# title.content = e.content
|
66
|
+
# end
|
67
|
+
metadata.titles.each {|t| id_map[t.id] = {metadata: t} if t.respond_to?(:id) && t.id}
|
55
68
|
|
56
69
|
metadata.languages = elem.xpath('./dc:language', EPUB::NAMESPACES).collect do |e|
|
57
70
|
e.content
|
58
71
|
end
|
72
|
+
metadata.languages.each {|l| id_map[l.id] = {metadata: l} if l.respond_to?(:id) && l.id}
|
59
73
|
|
60
74
|
%w[ contributor coverage creator date description format publisher relation source subject type ].each do |dcmes|
|
61
75
|
metadata.__send__ "#{dcmes}s=", collect_dcmes(elem, "./dc:#{dcmes}")
|
76
|
+
metadata.__send__("#{dcmes}s").each {|d| id_map[d.id] = {metadata: d} if d.respond_to?(:id) && d.id}
|
62
77
|
end
|
78
|
+
|
63
79
|
metadata.rights = collect_dcmes(elem, './dc:rights')
|
80
|
+
metadata.rights.each {|r| id_map[r.id] = {metadata: r} if r.respond_to?(:id) && r.id}
|
81
|
+
|
82
|
+
metadata.metas = elem.xpath('./opf:meta', EPUB::NAMESPACES).collect do |e|
|
83
|
+
meta = EPUB::Publication::Package::Metadata::Meta.new
|
84
|
+
%w[ property id scheme ].each { |attr| meta.__send__("#{attr}=", e[attr]) }
|
85
|
+
meta.content = e.content
|
86
|
+
if (refines = e['refines']) && refines[0] == '#'
|
87
|
+
id = refines[1..-1]
|
88
|
+
id_map[id] ||= {}
|
89
|
+
id_map[id][:refiners] ||= []
|
90
|
+
id_map[id][:refiners] << meta
|
91
|
+
end
|
92
|
+
|
93
|
+
meta
|
94
|
+
end
|
95
|
+
metadata.metas.each {|m| id_map[m.id] = {metadata: m} if m.respond_to?(:id) && m.id}
|
96
|
+
|
97
|
+
metadata.links = elem.xpath('./opf:link', EPUB::NAMESPACES).collect do |e|
|
98
|
+
link = EPUB::Publication::Package::Metadata::Link.new
|
99
|
+
%w[ href id media-type ].each do |attr|
|
100
|
+
link.__send__(attr.gsub(/-/, '_') + '=', e[attr])
|
101
|
+
end
|
102
|
+
link.iri = Addressable::URI.parse(e['href'])
|
103
|
+
link.rel = e['rel'].strip.split
|
104
|
+
if (refines = e['refines']) && refines[0] == '#'
|
105
|
+
id = refines[1..-1]
|
106
|
+
id_map[id] ||= {}
|
107
|
+
id_map[id][:refiners] ||= []
|
108
|
+
id_map[id][:refiners] << link
|
109
|
+
end
|
64
110
|
|
65
|
-
|
111
|
+
link
|
112
|
+
end
|
113
|
+
metadata.links.each {|l| id_map[l.id] = {metadata: l} if l.respond_to?(:id) && l.id}
|
114
|
+
|
115
|
+
id_map.values.each do |hsh|
|
116
|
+
next unless hsh[:refiners]
|
117
|
+
next unless hsh[:metadata]
|
118
|
+
hsh[:metadata].refiners = hsh[:refiners]
|
119
|
+
hsh[:refiners].each {|meta| meta.refines = hsh[:metadata]}
|
120
|
+
end
|
66
121
|
|
67
122
|
metadata
|
68
123
|
end
|
data/lib/epub/parser/version.rb
CHANGED
@@ -4,8 +4,8 @@ module EPUB
|
|
4
4
|
module Publication
|
5
5
|
class Package
|
6
6
|
attr_accessor :book,
|
7
|
-
:version, :
|
8
|
-
attr_reader :metadata, :manifest, :spine, :guide
|
7
|
+
:version, :unique_identifier_id, :prefix, :xml_lang, :dir, :id
|
8
|
+
attr_reader :metadata, :manifest, :spine, :guide, :unique_identifier
|
9
9
|
alias lang xml_lang
|
10
10
|
alias lang= xml_lang=
|
11
11
|
|
@@ -28,6 +28,10 @@ module EPUB
|
|
28
28
|
guide.package = self
|
29
29
|
@guide = guide
|
30
30
|
end
|
31
|
+
|
32
|
+
def unique_identifier
|
33
|
+
@metadata.unique_identifier
|
34
|
+
end
|
31
35
|
end
|
32
36
|
end
|
33
37
|
end
|
@@ -2,25 +2,65 @@ module EPUB
|
|
2
2
|
module Publication
|
3
3
|
class Package
|
4
4
|
class Metadata
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
attr_accessor :package, :unique_identifier,
|
9
|
-
*(
|
10
|
-
|
5
|
+
DC_ELEMS = [:identifiers, :titles, :languages] +
|
6
|
+
[:contributors, :coverages, :creators, :dates, :descriptions, :formats, :publishers,
|
7
|
+
:relations, :rights, :sources, :subjects, :types]
|
8
|
+
attr_accessor :package, :unique_identifier, :metas, :links,
|
9
|
+
*(DC_ELEMS.collect {|elem| "dc_#{elem}"})
|
10
|
+
DC_ELEMS.each do |elem|
|
11
11
|
alias_method elem, "dc_#{elem}"
|
12
12
|
alias_method "#{elem}=", "dc_#{elem}="
|
13
13
|
end
|
14
|
-
|
14
|
+
|
15
|
+
def title
|
16
|
+
return extended_title unless extended_title.empty?
|
17
|
+
compositted = titles.select {|title| title.display_seq}.sort.join("\n")
|
18
|
+
return compositted unless compositted.empty?
|
19
|
+
return main_title unless main_title.empty?
|
20
|
+
titles.sort.join("\n")
|
21
|
+
end
|
22
|
+
|
23
|
+
%w[ main short collection edition extended ].each do |type|
|
24
|
+
define_method "#{type}_title" do
|
25
|
+
titles.select {|title| title.title_type.to_s == type}.sort.join(' ')
|
26
|
+
end
|
27
|
+
end
|
28
|
+
def subtitle
|
29
|
+
titles.select {|title| title.title_type.to_s == 'subtitle'}.sort.join(' ')
|
30
|
+
end
|
15
31
|
|
16
32
|
def to_hash
|
17
|
-
|
33
|
+
DC_ELEMS.inject({}) do |hsh, elem|
|
18
34
|
hsh[elem] = __send__(elem)
|
19
35
|
hsh
|
20
36
|
end
|
21
37
|
end
|
22
38
|
|
39
|
+
def primary_metas
|
40
|
+
metas.select {|meta| meta.primary_expression?}
|
41
|
+
end
|
42
|
+
|
43
|
+
module Refinable
|
44
|
+
PROPERTIES = %w[ alternate-script display-seq file-as group-position identifier-type meta-auth role title-type ]
|
45
|
+
|
46
|
+
PROPERTIES.each do |voc|
|
47
|
+
met = voc.gsub(/-/, '_')
|
48
|
+
attr_accessor met
|
49
|
+
define_method met do
|
50
|
+
@refiners.select {|refiner| refiner.property == voc}.first
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
attr_accessor :refiners
|
55
|
+
|
56
|
+
def initialize
|
57
|
+
@refiners = []
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
23
61
|
class Identifier
|
62
|
+
include Refinable
|
63
|
+
|
24
64
|
attr_accessor :content, :id
|
25
65
|
|
26
66
|
def to_s
|
@@ -29,20 +69,58 @@ module EPUB
|
|
29
69
|
end
|
30
70
|
|
31
71
|
class Title
|
72
|
+
include Refinable
|
73
|
+
include Comparable
|
74
|
+
|
32
75
|
attr_accessor :content, :id, :lang, :dir
|
33
76
|
|
77
|
+
def <=>(other)
|
78
|
+
return 1 if other.display_seq.nil?
|
79
|
+
return -1 if display_seq.nil?
|
80
|
+
display_seq.to_s.to_i <=> other.display_seq.to_s.to_i
|
81
|
+
end
|
82
|
+
|
34
83
|
def to_s
|
35
84
|
content
|
36
85
|
end
|
37
86
|
end
|
38
87
|
|
39
88
|
class DCMES
|
89
|
+
include Refinable
|
90
|
+
|
40
91
|
attr_accessor :content, :id, :lang, :dir
|
41
92
|
|
42
93
|
def to_s
|
43
94
|
content
|
44
95
|
end
|
45
96
|
end
|
97
|
+
|
98
|
+
class Meta
|
99
|
+
include Refinable
|
100
|
+
|
101
|
+
attr_accessor :property, :refines, :id, :scheme, :content
|
102
|
+
|
103
|
+
def refines?
|
104
|
+
! refines.nil?
|
105
|
+
end
|
106
|
+
|
107
|
+
alias subexpression? refines?
|
108
|
+
|
109
|
+
def primary_expression?
|
110
|
+
! subexpression?
|
111
|
+
end
|
112
|
+
|
113
|
+
def to_s
|
114
|
+
content
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
class Link
|
119
|
+
include Refinable
|
120
|
+
|
121
|
+
attr_accessor :href, :rel, :id, :refines, :media_type,
|
122
|
+
:iri
|
123
|
+
end
|
46
124
|
end
|
47
125
|
end
|
48
126
|
end
|
data/man/epubinfo.1.ronn
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
epubinfo(1) -- show metadata of an EPUB book
|
2
|
+
============================================
|
3
|
+
|
4
|
+
SYNOPSIS
|
5
|
+
--------
|
6
|
+
|
7
|
+
`epubinfo` <filename><br>
|
8
|
+
`epubinfo` `-f`|`--format=<formnt>` <filename>
|
9
|
+
|
10
|
+
DESCRIPTION
|
11
|
+
-----------
|
12
|
+
|
13
|
+
**epubinfo** shows metadata of an EPUB book.
|
14
|
+
|
15
|
+
OPTIONS
|
16
|
+
-------
|
17
|
+
|
18
|
+
* `-f`, `--format`:
|
19
|
+
Output format; currently "line", "json" and "yaml" are acceptable
|
data/test/fixtures/book.epub
CHANGED
Binary file
|
@@ -1,7 +1,7 @@
|
|
1
1
|
<?xml version="1.0"?>
|
2
2
|
<package version="3.0"
|
3
|
-
|
4
|
-
|
3
|
+
unique-identifier="pub-id"
|
4
|
+
xmlns="http://www.idpf.org/2007/opf">
|
5
5
|
<metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
|
6
6
|
<dc:identifier id="pub-id">da265185-8da8-462d-a146-17dd388f61fc</dc:identifier>
|
7
7
|
|
@@ -38,6 +38,11 @@
|
|
38
38
|
<dc:creator id="creator02">John Tenniel</dc:creator>
|
39
39
|
<meta refines="#creator02" property="role" scheme="marc:relators">ill</meta>
|
40
40
|
<meta refines="#creator02" property="display-seq">2</meta>
|
41
|
+
|
42
|
+
|
43
|
+
<link rel="onix-record" href="http://example.org/onix/12389347" refines="#pub-id"/>
|
44
|
+
<link rel="xmp-record" href="http://example.org/xmp/12389347"/>
|
45
|
+
<link rel="foaf:homepage" href="http://example.org/book-info/12389347" />
|
41
46
|
</metadata>
|
42
47
|
<manifest id="manifest-id">
|
43
48
|
<item id="nav"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: epub-parser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
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-
|
12
|
+
date: 2012-03-11 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rubygems-test
|
16
|
-
requirement: &
|
16
|
+
requirement: &11201540 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *11201540
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rake
|
27
|
-
requirement: &
|
27
|
+
requirement: &11189400 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *11189400
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: pry
|
38
|
-
requirement: &
|
38
|
+
requirement: &11186320 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *11186320
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: pry-doc
|
49
|
-
requirement: &
|
49
|
+
requirement: &11185640 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *11185640
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: test-unit
|
60
|
-
requirement: &
|
60
|
+
requirement: &11184560 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ~>
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: '2'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *11184560
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: simplecov
|
71
|
-
requirement: &
|
71
|
+
requirement: &11183620 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: '0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *11183620
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: thin
|
82
|
-
requirement: &
|
82
|
+
requirement: &11182540 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ! '>='
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: '0'
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *11182540
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: yard
|
93
|
-
requirement: &
|
93
|
+
requirement: &11181840 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ! '>='
|
@@ -98,10 +98,32 @@ dependencies:
|
|
98
98
|
version: '0'
|
99
99
|
type: :development
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *11181840
|
102
|
+
- !ruby/object:Gem::Dependency
|
103
|
+
name: gem-man
|
104
|
+
requirement: &11122520 !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
type: :development
|
111
|
+
prerelease: false
|
112
|
+
version_requirements: *11122520
|
113
|
+
- !ruby/object:Gem::Dependency
|
114
|
+
name: ronn
|
115
|
+
requirement: &11120840 !ruby/object:Gem::Requirement
|
116
|
+
none: false
|
117
|
+
requirements:
|
118
|
+
- - ! '>='
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
version: '0'
|
121
|
+
type: :development
|
122
|
+
prerelease: false
|
123
|
+
version_requirements: *11120840
|
102
124
|
- !ruby/object:Gem::Dependency
|
103
125
|
name: epzip
|
104
|
-
requirement: &
|
126
|
+
requirement: &11119120 !ruby/object:Gem::Requirement
|
105
127
|
none: false
|
106
128
|
requirements:
|
107
129
|
- - ! '>='
|
@@ -109,10 +131,10 @@ dependencies:
|
|
109
131
|
version: '0'
|
110
132
|
type: :development
|
111
133
|
prerelease: false
|
112
|
-
version_requirements: *
|
134
|
+
version_requirements: *11119120
|
113
135
|
- !ruby/object:Gem::Dependency
|
114
136
|
name: epubcheck
|
115
|
-
requirement: &
|
137
|
+
requirement: &12151080 !ruby/object:Gem::Requirement
|
116
138
|
none: false
|
117
139
|
requirements:
|
118
140
|
- - ! '>='
|
@@ -120,10 +142,10 @@ dependencies:
|
|
120
142
|
version: '0'
|
121
143
|
type: :development
|
122
144
|
prerelease: false
|
123
|
-
version_requirements: *
|
145
|
+
version_requirements: *12151080
|
124
146
|
- !ruby/object:Gem::Dependency
|
125
147
|
name: epub_validator
|
126
|
-
requirement: &
|
148
|
+
requirement: &12148200 !ruby/object:Gem::Requirement
|
127
149
|
none: false
|
128
150
|
requirements:
|
129
151
|
- - ! '>='
|
@@ -131,10 +153,10 @@ dependencies:
|
|
131
153
|
version: '0'
|
132
154
|
type: :development
|
133
155
|
prerelease: false
|
134
|
-
version_requirements: *
|
156
|
+
version_requirements: *12148200
|
135
157
|
- !ruby/object:Gem::Dependency
|
136
158
|
name: zipruby
|
137
|
-
requirement: &
|
159
|
+
requirement: &11234320 !ruby/object:Gem::Requirement
|
138
160
|
none: false
|
139
161
|
requirements:
|
140
162
|
- - ! '>='
|
@@ -142,10 +164,10 @@ dependencies:
|
|
142
164
|
version: '0'
|
143
165
|
type: :development
|
144
166
|
prerelease: false
|
145
|
-
version_requirements: *
|
167
|
+
version_requirements: *11234320
|
146
168
|
- !ruby/object:Gem::Dependency
|
147
169
|
name: rubyzip
|
148
|
-
requirement: &
|
170
|
+
requirement: &11232240 !ruby/object:Gem::Requirement
|
149
171
|
none: false
|
150
172
|
requirements:
|
151
173
|
- - ! '>='
|
@@ -153,10 +175,10 @@ dependencies:
|
|
153
175
|
version: '0'
|
154
176
|
type: :development
|
155
177
|
prerelease: false
|
156
|
-
version_requirements: *
|
178
|
+
version_requirements: *11232240
|
157
179
|
- !ruby/object:Gem::Dependency
|
158
180
|
name: enumerabler
|
159
|
-
requirement: &
|
181
|
+
requirement: &11227260 !ruby/object:Gem::Requirement
|
160
182
|
none: false
|
161
183
|
requirements:
|
162
184
|
- - ! '>='
|
@@ -164,10 +186,10 @@ dependencies:
|
|
164
186
|
version: '0'
|
165
187
|
type: :runtime
|
166
188
|
prerelease: false
|
167
|
-
version_requirements: *
|
189
|
+
version_requirements: *11227260
|
168
190
|
- !ruby/object:Gem::Dependency
|
169
191
|
name: nokogiri
|
170
|
-
requirement: &
|
192
|
+
requirement: &11365900 !ruby/object:Gem::Requirement
|
171
193
|
none: false
|
172
194
|
requirements:
|
173
195
|
- - ! '>='
|
@@ -175,10 +197,10 @@ dependencies:
|
|
175
197
|
version: '0'
|
176
198
|
type: :runtime
|
177
199
|
prerelease: false
|
178
|
-
version_requirements: *
|
200
|
+
version_requirements: *11365900
|
179
201
|
- !ruby/object:Gem::Dependency
|
180
202
|
name: addressable
|
181
|
-
requirement: &
|
203
|
+
requirement: &11363620 !ruby/object:Gem::Requirement
|
182
204
|
none: false
|
183
205
|
requirements:
|
184
206
|
- - ! '>='
|
@@ -186,7 +208,7 @@ dependencies:
|
|
186
208
|
version: '0'
|
187
209
|
type: :runtime
|
188
210
|
prerelease: false
|
189
|
-
version_requirements: *
|
211
|
+
version_requirements: *11363620
|
190
212
|
description: Parse EPUB 3 book loosely
|
191
213
|
email:
|
192
214
|
- KitaitiMakoto@gmail.com
|
@@ -227,6 +249,7 @@ files:
|
|
227
249
|
- lib/epub/publication/package/manifest.rb
|
228
250
|
- lib/epub/publication/package/metadata.rb
|
229
251
|
- lib/epub/publication/package/spine.rb
|
252
|
+
- man/epubinfo.1.ronn
|
230
253
|
- schemas/epub-nav-30.rnc
|
231
254
|
- schemas/epub-nav-30.sch
|
232
255
|
- schemas/epub-xhtml-30.sch
|
@@ -256,7 +279,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
256
279
|
version: '0'
|
257
280
|
segments:
|
258
281
|
- 0
|
259
|
-
hash: -
|
282
|
+
hash: -1773548056502971517
|
260
283
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
261
284
|
none: false
|
262
285
|
requirements:
|
@@ -265,7 +288,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
265
288
|
version: '0'
|
266
289
|
segments:
|
267
290
|
- 0
|
268
|
-
hash: -
|
291
|
+
hash: -1773548056502971517
|
269
292
|
requirements: []
|
270
293
|
rubyforge_project:
|
271
294
|
rubygems_version: 1.8.8
|