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.
@@ -1,15 +1,26 @@
1
1
  EPUB Parser
2
2
  ===========
3
3
 
4
- INSTALL
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', 'working_directory'
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.
@@ -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 = 'Usage: epubinfo [options] EPUBFILE'
10
- opt.on '-f', '--format=FORMAT', [:line, :json, :yaml], 'Format of output(line, json or yaml), defaults to line(for console)' do |format|
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[0]
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 1
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.package.metadata.to_hash
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
@@ -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'
@@ -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?
@@ -1,13 +1,13 @@
1
1
  module EPUB
2
2
  module Constants
3
3
  NAMESPACES = {
4
- 'dc' => 'http://purl.org/dc/elements/1.1/',
5
- 'container' => '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'
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
@@ -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
 
@@ -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('/container:container/container:rootfiles/container:rootfile', EPUB::NAMESPACES).each do |elem|
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.unique_identifier = elem['unique-identifier']
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.unique_identifier
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 = collect_dcmes(elem, './dc:title') do |title, e|
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
- # To do: handle <meta> elements
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
@@ -1,5 +1,5 @@
1
1
  module EPUB
2
2
  class Parser
3
- VERSION = "0.0.7"
3
+ VERSION = "0.0.8"
4
4
  end
5
5
  end
@@ -4,8 +4,8 @@ module EPUB
4
4
  module Publication
5
5
  class Package
6
6
  attr_accessor :book,
7
- :version, :unique_identifier, :prefix, :xml_lang, :dir, :id
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
- ELEMS = [:identifiers, :titles, :languages] +
6
- [:contributors, :coverages, :creators, :dates, :descriptions, :formats, :publishers,
7
- :relations, :rights, :sources, :subjects, :types]
8
- attr_accessor :package, :unique_identifier,
9
- *(ELEMS.collect {|elem| "dc_#{elem}"})
10
- ELEMS.each do |elem|
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
- attr_accessor :links
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
- ELEMS.inject({}) do |hsh, elem|
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
@@ -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
Binary file
@@ -1,7 +1,7 @@
1
1
  <?xml version="1.0"?>
2
2
  <package version="3.0"
3
- unique-identifier="pub-id"
4
- xmlns="http://www.idpf.org/2007/opf">
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.7
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-02-21 00:00:00.000000000Z
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: &12346600 !ruby/object:Gem::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: *12346600
24
+ version_requirements: *11201540
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rake
27
- requirement: &12342420 !ruby/object:Gem::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: *12342420
35
+ version_requirements: *11189400
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: pry
38
- requirement: &12360020 !ruby/object:Gem::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: *12360020
46
+ version_requirements: *11186320
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: pry-doc
49
- requirement: &12359300 !ruby/object:Gem::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: *12359300
57
+ version_requirements: *11185640
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: test-unit
60
- requirement: &12358560 !ruby/object:Gem::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: *12358560
68
+ version_requirements: *11184560
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: simplecov
71
- requirement: &12358000 !ruby/object:Gem::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: *12358000
79
+ version_requirements: *11183620
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: thin
82
- requirement: &12357120 !ruby/object:Gem::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: *12357120
90
+ version_requirements: *11182540
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: yard
93
- requirement: &12356360 !ruby/object:Gem::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: *12356360
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: &12355640 !ruby/object:Gem::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: *12355640
134
+ version_requirements: *11119120
113
135
  - !ruby/object:Gem::Dependency
114
136
  name: epubcheck
115
- requirement: &12354540 !ruby/object:Gem::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: *12354540
145
+ version_requirements: *12151080
124
146
  - !ruby/object:Gem::Dependency
125
147
  name: epub_validator
126
- requirement: &12353020 !ruby/object:Gem::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: *12353020
156
+ version_requirements: *12148200
135
157
  - !ruby/object:Gem::Dependency
136
158
  name: zipruby
137
- requirement: &12370280 !ruby/object:Gem::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: *12370280
167
+ version_requirements: *11234320
146
168
  - !ruby/object:Gem::Dependency
147
169
  name: rubyzip
148
- requirement: &12369680 !ruby/object:Gem::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: *12369680
178
+ version_requirements: *11232240
157
179
  - !ruby/object:Gem::Dependency
158
180
  name: enumerabler
159
- requirement: &12368540 !ruby/object:Gem::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: *12368540
189
+ version_requirements: *11227260
168
190
  - !ruby/object:Gem::Dependency
169
191
  name: nokogiri
170
- requirement: &12367280 !ruby/object:Gem::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: *12367280
200
+ version_requirements: *11365900
179
201
  - !ruby/object:Gem::Dependency
180
202
  name: addressable
181
- requirement: &12365820 !ruby/object:Gem::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: *12365820
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: -4537999334465122186
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: -4537999334465122186
291
+ hash: -1773548056502971517
269
292
  requirements: []
270
293
  rubyforge_project:
271
294
  rubygems_version: 1.8.8