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.
Files changed (47) hide show
  1. data/.gemtest +0 -0
  2. data/.gitignore +6 -0
  3. data/Gemfile +4 -0
  4. data/Rakefile +12 -0
  5. data/epub-parser.gemspec +33 -0
  6. data/lib/epub/book.rb +37 -0
  7. data/lib/epub/content_document.rb +6 -0
  8. data/lib/epub/content_document/navigation.rb +80 -0
  9. data/lib/epub/ocf.rb +8 -0
  10. data/lib/epub/ocf/container.rb +22 -0
  11. data/lib/epub/ocf/encryption.rb +6 -0
  12. data/lib/epub/ocf/manifest.rb +6 -0
  13. data/lib/epub/ocf/metadata.rb +6 -0
  14. data/lib/epub/ocf/rights.rb +6 -0
  15. data/lib/epub/ocf/signatures.rb +6 -0
  16. data/lib/epub/parser.rb +46 -0
  17. data/lib/epub/parser/content_document.rb +58 -0
  18. data/lib/epub/parser/ocf.rb +59 -0
  19. data/lib/epub/parser/publication.rb +87 -0
  20. data/lib/epub/parser/version.rb +5 -0
  21. data/lib/epub/publication.rb +6 -0
  22. data/lib/epub/publication/package.rb +25 -0
  23. data/lib/epub/publication/package/bindings.rb +18 -0
  24. data/lib/epub/publication/package/guide.rb +11 -0
  25. data/lib/epub/publication/package/manifest.rb +44 -0
  26. data/lib/epub/publication/package/metadata.rb +17 -0
  27. data/lib/epub/publication/package/spine.rb +46 -0
  28. data/lib/epub/type.rb +7 -0
  29. data/schemas/epub-nav-30.rnc +10 -0
  30. data/schemas/epub-nav-30.sch +72 -0
  31. data/schemas/epub-xhtml-30.sch +377 -0
  32. data/schemas/ocf-container-30.rnc +16 -0
  33. data/test/fixtures/book.epub +0 -0
  34. data/test/fixtures/book/META-INF/container.xml +6 -0
  35. data/test/fixtures/book/OPS/nav.xhtml +26 -0
  36. 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
  37. data/test/fixtures/book/mimetype +1 -0
  38. data/test/helper.rb +9 -0
  39. data/test/publication/package/test_bindings.rb +15 -0
  40. data/test/publication/package/test_guide.rb +14 -0
  41. data/test/publication/package/test_manifest.rb +19 -0
  42. data/test/publication/package/test_metadata.rb +14 -0
  43. data/test/publication/package/test_spine.rb +15 -0
  44. data/test/test_parser.rb +52 -0
  45. data/test/test_parser_ocf.rb +22 -0
  46. data/test/test_parser_publication.rb +15 -0
  47. 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,6 @@
1
+ <?xml version="1.0"?>
2
+ <container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
3
+ <rootfiles>
4
+ <rootfile full-path="OPS/ルートファイル.opf" media-type="application/oebps-package+xml" />
5
+ </rootfiles>
6
+ </container>
@@ -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,9 @@
1
+ require 'simplecov'
2
+ SimpleCov.start do
3
+ add_filter '/test|vendor/'
4
+ end
5
+
6
+ gem 'test-unit'
7
+ require 'test/unit'
8
+
9
+ include EPUB
@@ -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
@@ -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: