epub-parser 0.0.1
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/.gemtest +0 -0
- data/.gitignore +6 -0
- data/Gemfile +4 -0
- data/Rakefile +12 -0
- data/epub-parser.gemspec +33 -0
- data/lib/epub/book.rb +37 -0
- data/lib/epub/content_document.rb +6 -0
- data/lib/epub/content_document/navigation.rb +80 -0
- data/lib/epub/ocf.rb +8 -0
- data/lib/epub/ocf/container.rb +22 -0
- data/lib/epub/ocf/encryption.rb +6 -0
- data/lib/epub/ocf/manifest.rb +6 -0
- data/lib/epub/ocf/metadata.rb +6 -0
- data/lib/epub/ocf/rights.rb +6 -0
- data/lib/epub/ocf/signatures.rb +6 -0
- data/lib/epub/parser.rb +46 -0
- data/lib/epub/parser/content_document.rb +58 -0
- data/lib/epub/parser/ocf.rb +59 -0
- data/lib/epub/parser/publication.rb +87 -0
- data/lib/epub/parser/version.rb +5 -0
- data/lib/epub/publication.rb +6 -0
- data/lib/epub/publication/package.rb +25 -0
- data/lib/epub/publication/package/bindings.rb +18 -0
- data/lib/epub/publication/package/guide.rb +11 -0
- data/lib/epub/publication/package/manifest.rb +44 -0
- data/lib/epub/publication/package/metadata.rb +17 -0
- data/lib/epub/publication/package/spine.rb +46 -0
- data/lib/epub/type.rb +7 -0
- data/schemas/epub-nav-30.rnc +10 -0
- data/schemas/epub-nav-30.sch +72 -0
- data/schemas/epub-xhtml-30.sch +377 -0
- data/schemas/ocf-container-30.rnc +16 -0
- data/test/fixtures/book.epub +0 -0
- data/test/fixtures/book/META-INF/container.xml +6 -0
- data/test/fixtures/book/OPS/nav.xhtml +26 -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 +28 -0
- data/test/fixtures/book/mimetype +1 -0
- data/test/helper.rb +9 -0
- data/test/publication/package/test_bindings.rb +15 -0
- data/test/publication/package/test_guide.rb +14 -0
- data/test/publication/package/test_manifest.rb +19 -0
- data/test/publication/package/test_metadata.rb +14 -0
- data/test/publication/package/test_spine.rb +15 -0
- data/test/test_parser.rb +52 -0
- data/test/test_parser_ocf.rb +22 -0
- data/test/test_parser_publication.rb +15 -0
- metadata +208 -0
@@ -0,0 +1,16 @@
|
|
1
|
+
|
2
|
+
default namespace = "urn:oasis:names:tc:opendocument:xmlns:container"
|
3
|
+
include "./mod/datatypes.rnc"
|
4
|
+
|
5
|
+
start = ocf.container
|
6
|
+
|
7
|
+
ocf.container = element container {
|
8
|
+
attribute version { '1.0' } &
|
9
|
+
element rootfiles {
|
10
|
+
element rootfile {
|
11
|
+
attribute full-path { datatype.URI } &
|
12
|
+
attribute media-type { 'application/oebps-package+xml' }
|
13
|
+
}+
|
14
|
+
}
|
15
|
+
}
|
16
|
+
|
Binary file
|
@@ -0,0 +1,26 @@
|
|
1
|
+
<?xml version="1.0"?>
|
2
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops">
|
3
|
+
<head>
|
4
|
+
<title>Table of Contents for Example Book</title>
|
5
|
+
</head>
|
6
|
+
<body>
|
7
|
+
<div>
|
8
|
+
<nav epub:type="toc" id="idid">
|
9
|
+
<hgroup>
|
10
|
+
<h2>Sub Navigation</h2>
|
11
|
+
<h1>Table of Contents</h1>
|
12
|
+
</hgroup>
|
13
|
+
<ol>
|
14
|
+
<li><a href="item-1.xhtml">一ページ目</a></li>
|
15
|
+
<li>
|
16
|
+
<span>二ページ目</span>
|
17
|
+
<ol>
|
18
|
+
<li><a href="item-2.xhtml#section1">第一節</a></li>
|
19
|
+
<li><a href="item-2.xhtml#section2">第二節</a></li>
|
20
|
+
</ol>
|
21
|
+
</li>
|
22
|
+
</ol>
|
23
|
+
</nav>
|
24
|
+
</div>
|
25
|
+
</body>
|
26
|
+
</html>
|
@@ -0,0 +1,28 @@
|
|
1
|
+
<?xml version="1.0"?>
|
2
|
+
<package version="3.0"
|
3
|
+
uniqueue-identifier="pub-id"
|
4
|
+
xmlns="http://www.idpf.org/2007/opf">
|
5
|
+
<metadata></metadata>
|
6
|
+
<manifest id="manifest-id">
|
7
|
+
<item id="nav"
|
8
|
+
href="nav.xhtml"
|
9
|
+
media-type="application/xhtml+xml"
|
10
|
+
properties="nav"/>
|
11
|
+
<item id="manifest-item-1"
|
12
|
+
href="item-1.xhtml"
|
13
|
+
media-type="application/xhtml+xml"
|
14
|
+
properties="property1 property2 property3"/>
|
15
|
+
<item id="manifest-item-2"
|
16
|
+
href="item-2.xhtml"
|
17
|
+
media-type="application/xhtml+xml"
|
18
|
+
fallback="manifest-item-fallback"/>
|
19
|
+
<item id="manifest-item-fallback"
|
20
|
+
href="fallback.xhtml"
|
21
|
+
media-type="application/xhtml+xml"/>
|
22
|
+
</manifest>
|
23
|
+
<spine>
|
24
|
+
<itemref idref="nav"/>
|
25
|
+
<itemref idref="manifest-item-1"/>
|
26
|
+
<itemref idref="manifest-item-2"/>
|
27
|
+
</spine>
|
28
|
+
</package>
|
@@ -0,0 +1 @@
|
|
1
|
+
application/epub+zip
|
data/test/helper.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
require File.expand_path '../../helper', File.dirname(__FILE__)
|
2
|
+
require 'epub/publication/package/bindings'
|
3
|
+
|
4
|
+
include Publication
|
5
|
+
|
6
|
+
class TestBindings < Test::Unit::TestCase
|
7
|
+
def setup
|
8
|
+
@bindings = Package::Bindings.new
|
9
|
+
@media_type = Package::Bindings::MediaType.new
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_example
|
13
|
+
assert false
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require File.expand_path '../../helper', File.dirname(__FILE__)
|
2
|
+
require 'epub/publication/package/guide'
|
3
|
+
|
4
|
+
include Publication
|
5
|
+
|
6
|
+
class TestGuide < Test::Unit::TestCase
|
7
|
+
def setup
|
8
|
+
@spine = Package::Guide.new
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_example
|
12
|
+
assert false
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require File.expand_path '../../helper', File.dirname(__FILE__)
|
2
|
+
require 'epub/publication/package/manifest'
|
3
|
+
|
4
|
+
include Publication
|
5
|
+
|
6
|
+
class TestManifest < Test::Unit::TestCase
|
7
|
+
def setup
|
8
|
+
@manifest = Package::Manifest.new
|
9
|
+
@item = Package::Manifest::Item.new
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_nav_returns_item_with_nav
|
13
|
+
@nav = Package::Manifest::Item.new
|
14
|
+
@nav.properties = ['nav']
|
15
|
+
@manifest << @nav
|
16
|
+
|
17
|
+
assert_equal @nav, @manifest.nav
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require File.expand_path '../../helper', File.dirname(__FILE__)
|
2
|
+
require 'epub/publication/package/metadata'
|
3
|
+
|
4
|
+
class TestMetadata < Test::Unit::TestCase
|
5
|
+
def setup
|
6
|
+
@metadata = Publication::Package::Metadata.new
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_attributes
|
10
|
+
assert @metadata.respond_to? :contributers=
|
11
|
+
assert @metadata.respond_to? :dc_contributers=
|
12
|
+
assert @metadata.respond_to? :dc_contributer
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require File.expand_path '../../helper', File.dirname(__FILE__)
|
2
|
+
require 'epub/publication/package/spine'
|
3
|
+
|
4
|
+
include Publication
|
5
|
+
|
6
|
+
class TestSpine < Test::Unit::TestCase
|
7
|
+
def setup
|
8
|
+
@spine = Package::Spine.new
|
9
|
+
@itemref1 = Package::Spine::Itemref.new
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_example
|
13
|
+
assert false
|
14
|
+
end
|
15
|
+
end
|
data/test/test_parser.rb
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
require File.expand_path 'helper', File.dirname(__FILE__)
|
2
|
+
require 'epub/parser'
|
3
|
+
require 'fileutils'
|
4
|
+
require 'tmpdir'
|
5
|
+
|
6
|
+
class TestParser < Test::Unit::TestCase
|
7
|
+
def setup
|
8
|
+
@rootdir = Dir.mktmpdir 'epub-parser'
|
9
|
+
@parser = EPUB::Parser.new 'test/fixtures/book.epub', @rootdir
|
10
|
+
end
|
11
|
+
|
12
|
+
def teardown
|
13
|
+
FileUtils.remove_entry_secure @rootdir
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_parse
|
17
|
+
pend
|
18
|
+
end
|
19
|
+
|
20
|
+
class TestBook < TestParser
|
21
|
+
def setup
|
22
|
+
super
|
23
|
+
@book = @parser.parse
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_each_page_by_spine_iterates_items_in_spines_order
|
27
|
+
@book.each_page_by_spine do |page|
|
28
|
+
assert_instance_of Publication::Package::Manifest::Item, page
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_each_content_iterates_items_in_manifest
|
33
|
+
@book.each_content do |page|
|
34
|
+
assert_instance_of Publication::Package::Manifest::Item, page
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_each_content_returns_enumerator_when_no_block_passed
|
39
|
+
contents = @book.each_content
|
40
|
+
|
41
|
+
assert_respond_to contents, :each
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_enumerator_returned_by_each_content_iterates_items_in_spines_order
|
45
|
+
contents = @book.each_content
|
46
|
+
|
47
|
+
contents.each do |page|
|
48
|
+
assert_instance_of Publication::Package::Manifest::Item, page
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
require File.expand_path 'helper', File.dirname(__FILE__)
|
3
|
+
require 'epub/parser/ocf'
|
4
|
+
|
5
|
+
class TestParserOCF < Test::Unit::TestCase
|
6
|
+
def setup
|
7
|
+
@parser = Parser::OCF.new 'test/fixtures/book'
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_parse_container
|
11
|
+
container = @parser.parse_container
|
12
|
+
|
13
|
+
assert_equal 'OPS/ルートファイル.pdf', container.rootfile.full_path
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_parse
|
17
|
+
ocf = @parser.parse
|
18
|
+
|
19
|
+
pend
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
require File.expand_path 'helper', File.dirname(__FILE__)
|
3
|
+
require 'epub/parser/publication'
|
4
|
+
|
5
|
+
class TestParserPublication < Test::Unit::TestCase
|
6
|
+
def setup
|
7
|
+
@parser = Parser::Publication.new 'test/fixtures/book/OPS/ルートファイル.opf'
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_parse_manifest
|
11
|
+
manifest = @parser.parse_manifest
|
12
|
+
|
13
|
+
pend
|
14
|
+
end
|
15
|
+
end
|
metadata
ADDED
@@ -0,0 +1,208 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: epub-parser
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- KITAITI Makoto
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2011-12-29 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rubygems-test
|
16
|
+
requirement: &6158740 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *6158740
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: rake
|
27
|
+
requirement: &6157760 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :development
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *6157760
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: pry
|
38
|
+
requirement: &6156180 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
type: :development
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *6156180
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: test-unit
|
49
|
+
requirement: &6153480 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '2'
|
55
|
+
type: :development
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *6153480
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: simplecov
|
60
|
+
requirement: &6152560 !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
type: :development
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *6152560
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: thin
|
71
|
+
requirement: &6661820 !ruby/object:Gem::Requirement
|
72
|
+
none: false
|
73
|
+
requirements:
|
74
|
+
- - ! '>='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: *6661820
|
80
|
+
- !ruby/object:Gem::Dependency
|
81
|
+
name: yard
|
82
|
+
requirement: &6660960 !ruby/object:Gem::Requirement
|
83
|
+
none: false
|
84
|
+
requirements:
|
85
|
+
- - ! '>='
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: '0'
|
88
|
+
type: :development
|
89
|
+
prerelease: false
|
90
|
+
version_requirements: *6660960
|
91
|
+
- !ruby/object:Gem::Dependency
|
92
|
+
name: enumerabler
|
93
|
+
requirement: &6660140 !ruby/object:Gem::Requirement
|
94
|
+
none: false
|
95
|
+
requirements:
|
96
|
+
- - ! '>='
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '0'
|
99
|
+
type: :runtime
|
100
|
+
prerelease: false
|
101
|
+
version_requirements: *6660140
|
102
|
+
- !ruby/object:Gem::Dependency
|
103
|
+
name: nokogiri
|
104
|
+
requirement: &6658180 !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
type: :runtime
|
111
|
+
prerelease: false
|
112
|
+
version_requirements: *6658180
|
113
|
+
- !ruby/object:Gem::Dependency
|
114
|
+
name: addressable
|
115
|
+
requirement: &6656720 !ruby/object:Gem::Requirement
|
116
|
+
none: false
|
117
|
+
requirements:
|
118
|
+
- - ! '>='
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
version: '0'
|
121
|
+
type: :runtime
|
122
|
+
prerelease: false
|
123
|
+
version_requirements: *6656720
|
124
|
+
description: Parse EPUB 3 book loosely
|
125
|
+
email:
|
126
|
+
- KitaitiMakoto@gmail.com
|
127
|
+
executables: []
|
128
|
+
extensions: []
|
129
|
+
extra_rdoc_files: []
|
130
|
+
files:
|
131
|
+
- .gemtest
|
132
|
+
- .gitignore
|
133
|
+
- Gemfile
|
134
|
+
- Rakefile
|
135
|
+
- epub-parser.gemspec
|
136
|
+
- lib/epub/book.rb
|
137
|
+
- lib/epub/content_document.rb
|
138
|
+
- lib/epub/content_document/navigation.rb
|
139
|
+
- lib/epub/ocf.rb
|
140
|
+
- lib/epub/ocf/container.rb
|
141
|
+
- lib/epub/ocf/encryption.rb
|
142
|
+
- lib/epub/ocf/manifest.rb
|
143
|
+
- lib/epub/ocf/metadata.rb
|
144
|
+
- lib/epub/ocf/rights.rb
|
145
|
+
- lib/epub/ocf/signatures.rb
|
146
|
+
- lib/epub/parser.rb
|
147
|
+
- lib/epub/parser/content_document.rb
|
148
|
+
- lib/epub/parser/ocf.rb
|
149
|
+
- lib/epub/parser/publication.rb
|
150
|
+
- lib/epub/parser/version.rb
|
151
|
+
- lib/epub/publication.rb
|
152
|
+
- lib/epub/publication/package.rb
|
153
|
+
- lib/epub/publication/package/bindings.rb
|
154
|
+
- lib/epub/publication/package/guide.rb
|
155
|
+
- lib/epub/publication/package/manifest.rb
|
156
|
+
- lib/epub/publication/package/metadata.rb
|
157
|
+
- lib/epub/publication/package/spine.rb
|
158
|
+
- lib/epub/type.rb
|
159
|
+
- schemas/epub-nav-30.rnc
|
160
|
+
- schemas/epub-nav-30.sch
|
161
|
+
- schemas/epub-xhtml-30.sch
|
162
|
+
- schemas/ocf-container-30.rnc
|
163
|
+
- test/fixtures/book.epub
|
164
|
+
- test/fixtures/book/META-INF/container.xml
|
165
|
+
- test/fixtures/book/OPS/nav.xhtml
|
166
|
+
- test/fixtures/book/mimetype
|
167
|
+
- test/helper.rb
|
168
|
+
- test/publication/package/test_bindings.rb
|
169
|
+
- test/publication/package/test_guide.rb
|
170
|
+
- test/publication/package/test_manifest.rb
|
171
|
+
- test/publication/package/test_metadata.rb
|
172
|
+
- test/publication/package/test_spine.rb
|
173
|
+
- test/test_parser.rb
|
174
|
+
- test/test_parser_ocf.rb
|
175
|
+
- test/test_parser_publication.rb
|
176
|
+
- test/fixtures/book/OPS/ルートファイル.opf
|
177
|
+
homepage: https://gitorious.org/epub/parser
|
178
|
+
licenses: []
|
179
|
+
post_install_message:
|
180
|
+
rdoc_options: []
|
181
|
+
require_paths:
|
182
|
+
- lib
|
183
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
184
|
+
none: false
|
185
|
+
requirements:
|
186
|
+
- - ! '>='
|
187
|
+
- !ruby/object:Gem::Version
|
188
|
+
version: '0'
|
189
|
+
segments:
|
190
|
+
- 0
|
191
|
+
hash: 3633804381803828954
|
192
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
193
|
+
none: false
|
194
|
+
requirements:
|
195
|
+
- - ! '>='
|
196
|
+
- !ruby/object:Gem::Version
|
197
|
+
version: '0'
|
198
|
+
segments:
|
199
|
+
- 0
|
200
|
+
hash: 3633804381803828954
|
201
|
+
requirements: []
|
202
|
+
rubyforge_project:
|
203
|
+
rubygems_version: 1.8.8
|
204
|
+
signing_key:
|
205
|
+
specification_version: 3
|
206
|
+
summary: EPUB 3 Parser
|
207
|
+
test_files: []
|
208
|
+
has_rdoc:
|