epub-parser 0.4.3 → 0.4.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.adoc +5 -0
- data/README.adoc +26 -19
- data/bin/epubinfo +35 -0
- data/docs/Epubinfo.markdown +150 -19
- data/docs/Home.adoc +1 -1
- data/lib/epub/constants.rb +13 -0
- data/lib/epub/content_document/navigation.rb +22 -28
- data/lib/epub/content_document/typable.rb +17 -0
- data/lib/epub/parser/content_document.rb +1 -0
- data/lib/epub/parser/version.rb +1 -1
- data/test/fixtures/book/OPS/nav.xhtml +9 -2
- data/test/test_parser_content_document.rb +20 -2
- data/test/test_searcher.rb +12 -5
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d9291e2d914a2318697ab1303feb9a2f04080c1f30d329c0e5a16cc3bf27591a
|
4
|
+
data.tar.gz: 606db4cc875875e0d4ababcba1b38cee841e64cf18535904a46397af030f691d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a834f8c3859d8970252d6d1d70e24f3f2c034468e4bb5b198218c5813bad0884a0cac25e229f2285ef1c7f9f9c37c8962eb242b5db2323392ceb84f340c293c3
|
7
|
+
data.tar.gz: 34badc2b282ab04c1a9aeb218e359c69d7d6042713b3bcc7851f80882dac01a847cb94b9787241f832960d0b3586e8adeed8d70b7caf6293e66a7c3cc8075dec
|
data/CHANGELOG.adoc
CHANGED
data/README.adoc
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
= {doctitle}
|
4
4
|
|
5
|
-
image:https://gitlab.com/KitaitiMakoto/epub-parser/badges/master/
|
5
|
+
image:https://gitlab.com/KitaitiMakoto/epub-parser/badges/master/pipeline.svg[link="https://gitlab.com/KitaitiMakoto/epub-parser/commits/master",title="pipeline status"]
|
6
6
|
image:https://badge.fury.io/rb/epub-parser.svg[link="https://gemnasium.com/KitaitiMakoto/epub-parser",title="Gem Version"]
|
7
7
|
image:https://gitlab.com/KitaitiMakoto/epub-parser/badges/master/coverage.svg[link="https://kitaitimakoto.gitlab.io/epub-parser/coverage/",title="coverage report"]
|
8
8
|
|
@@ -46,25 +46,27 @@ See document's {file:docs/Home.markdown} or https://kitaitimakoto.gitlab.io/epub
|
|
46
46
|
`epubinfo` tool extracts and shows the metadata of specified EPUB book.
|
47
47
|
|
48
48
|
----
|
49
|
-
|
50
|
-
Title:
|
51
|
-
Identifiers:
|
52
|
-
Titles:
|
49
|
+
% epubinfo ./linear-algebra.epub
|
50
|
+
Title: A First Course in Linear Algebra
|
51
|
+
Identifiers: code.google.com.epub-samples.linear-algebra
|
52
|
+
Titles: A First Course in Linear Algebra
|
53
53
|
Languages: en
|
54
|
-
Contributors:
|
55
|
-
Coverages:
|
56
|
-
Creators:
|
57
|
-
Dates:
|
58
|
-
Descriptions:
|
59
|
-
Formats:
|
60
|
-
Publishers:
|
61
|
-
Relations:
|
62
|
-
Rights:
|
63
|
-
Sources:
|
64
|
-
Subjects:
|
65
|
-
Types:
|
66
|
-
|
67
|
-
|
54
|
+
Contributors:
|
55
|
+
Coverages:
|
56
|
+
Creators: Robert A. Beezer
|
57
|
+
Dates:
|
58
|
+
Descriptions:
|
59
|
+
Formats:
|
60
|
+
Publishers:
|
61
|
+
Relations:
|
62
|
+
Rights: This work is shared with the public using the GNU Free Documentation License, Version 1.2., © 2004 by Robert A. Beezer.
|
63
|
+
Sources:
|
64
|
+
Subjects:
|
65
|
+
Types:
|
66
|
+
Modified: 2012-03-05T12:47:00Z
|
67
|
+
Unique identifier: code.google.com.epub-samples.linear-algebra
|
68
|
+
Epub version: 3.0
|
69
|
+
Navigations: toc, landmarks
|
68
70
|
----
|
69
71
|
|
70
72
|
See {file:docs/Epubinfo.markdown} for more info.
|
@@ -174,6 +176,11 @@ If you find other gems, please tell me or request a pull request.
|
|
174
176
|
|
175
177
|
== RECENT CHANGES
|
176
178
|
|
179
|
+
=== 0.4.4
|
180
|
+
|
181
|
+
* [BUG FIX]Fix navigation type check bug
|
182
|
+
* Add feature to show navigations to `epubinfo` command-line tool
|
183
|
+
|
177
184
|
=== 0.4.3
|
178
185
|
|
179
186
|
* Encode file name passed from file system on Unix
|
data/bin/epubinfo
CHANGED
@@ -4,6 +4,11 @@ require 'epub/parser'
|
|
4
4
|
using EPUB::Parser::XMLDocument::Refinements
|
5
5
|
|
6
6
|
options = {:format => :line}
|
7
|
+
navigation_types = {
|
8
|
+
:toc => "table of contents",
|
9
|
+
:"page-list" => "page list",
|
10
|
+
:landmarks => "landmarks"
|
11
|
+
}
|
7
12
|
opt = OptionParser.new do |opt|
|
8
13
|
opt.banner = <<EOB
|
9
14
|
Show metadata of an EPUB file
|
@@ -22,6 +27,20 @@ EOB
|
|
22
27
|
opt.on '--chars', 'count charactors of content documents' do
|
23
28
|
options[:chars] = true
|
24
29
|
end
|
30
|
+
opt.on "--navigation[=TYPE]",navigation_types.keys, "show specified type of navigation(#{navigation_types.keys[0..-2].join(', ')} or #{navigation_types.keys.last})", "If TYPE is omitted, show all types of navigations.", "Can specify multiple times." do |type|
|
31
|
+
if type
|
32
|
+
options[type] = true
|
33
|
+
else
|
34
|
+
navigation_types.keys.each do |type|
|
35
|
+
options[type] = true
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
navigation_types.each_pair do |key, name|
|
40
|
+
opt.on "--#{key}", "show #{name} navigation(in line format only)" do
|
41
|
+
options[key] = true
|
42
|
+
end
|
43
|
+
end
|
25
44
|
end
|
26
45
|
opt.parse!(ARGV)
|
27
46
|
|
@@ -46,6 +65,7 @@ data.merge!(book.metadata.to_h)
|
|
46
65
|
data['modified'] = book.modified
|
47
66
|
data['unique identifier'] = book.metadata.unique_identifier
|
48
67
|
data['epub version'] = book.package.version
|
68
|
+
data["navigations"] = book.manifest.navs.first&.content_document.navigations.collect(&:type).join(", ")
|
49
69
|
|
50
70
|
data.each_pair do |(key, value)|
|
51
71
|
data[key] = value.respond_to?(:join) ? value.join(", ") : value.to_s
|
@@ -75,6 +95,21 @@ if options[:format] == :line
|
|
75
95
|
data.each_pair do |k, v|
|
76
96
|
puts (k.to_s.capitalize + ':').ljust(key_width) + v.to_s
|
77
97
|
end
|
98
|
+
navigation_types.each_pair do |key, name|
|
99
|
+
if options[key]
|
100
|
+
puts ""
|
101
|
+
puts "=== #{name} ==="
|
102
|
+
nav = book.manifest.nav.content_document.navigations.find {|nav| nav.type == key.to_s.sub("-", "_")}
|
103
|
+
if nav
|
104
|
+
nav.traverse do |item, depth|
|
105
|
+
text = item.text || "(No heading)"
|
106
|
+
puts "#{' ' * depth}#{text}"
|
107
|
+
end
|
108
|
+
else
|
109
|
+
puts "(No #{name})"
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
78
113
|
else
|
79
114
|
require options[:format].to_s
|
80
115
|
puts data.__send__("to_#{options[:format]}")
|
data/docs/Epubinfo.markdown
CHANGED
@@ -12,29 +12,31 @@ Usage
|
|
12
12
|
|
13
13
|
Example:
|
14
14
|
|
15
|
-
|
16
|
-
Title:
|
17
|
-
Identifiers:
|
18
|
-
Titles:
|
15
|
+
% epubinfo ./linear-algebra.epub
|
16
|
+
Title: A First Course in Linear Algebra
|
17
|
+
Identifiers: code.google.com.epub-samples.linear-algebra
|
18
|
+
Titles: A First Course in Linear Algebra
|
19
19
|
Languages: en
|
20
|
-
Contributors:
|
21
|
-
Coverages:
|
22
|
-
Creators:
|
23
|
-
Dates:
|
24
|
-
Descriptions:
|
25
|
-
Formats:
|
26
|
-
Publishers:
|
27
|
-
Relations:
|
28
|
-
Rights:
|
29
|
-
Sources:
|
30
|
-
Subjects:
|
31
|
-
Types:
|
32
|
-
|
33
|
-
|
20
|
+
Contributors:
|
21
|
+
Coverages:
|
22
|
+
Creators: Robert A. Beezer
|
23
|
+
Dates:
|
24
|
+
Descriptions:
|
25
|
+
Formats:
|
26
|
+
Publishers:
|
27
|
+
Relations:
|
28
|
+
Rights: This work is shared with the public using the GNU Free Documentation License, Version 1.2., © 2004 by Robert A. Beezer.
|
29
|
+
Sources:
|
30
|
+
Subjects:
|
31
|
+
Types:
|
32
|
+
Modified: 2012-03-05T12:47:00Z
|
33
|
+
Unique identifier: code.google.com.epub-samples.linear-algebra
|
34
|
+
Epub version: 3.0
|
35
|
+
Navigations: toc, landmarks
|
34
36
|
|
35
37
|
To see help:
|
36
38
|
|
37
|
-
|
39
|
+
% epubinfo -h
|
38
40
|
Show metadata of an EPUB file
|
39
41
|
|
40
42
|
Usage: epubinfo [options] EPUBFILE
|
@@ -42,6 +44,12 @@ To see help:
|
|
42
44
|
-f, --format=FORMAT format of output(line, json or yaml), defaults to line(for console)
|
43
45
|
--words count words of content documents
|
44
46
|
--chars count charactors of content documents
|
47
|
+
--navigation[=TYPE] show specified type of navigation(toc, page-list or landmarks)
|
48
|
+
If TYPE is omitted, show all types of navigations.
|
49
|
+
Can specify multiple times.
|
50
|
+
--toc show table of contents navigation(in line format only)
|
51
|
+
--page-list show page list navigation(in line format only)
|
52
|
+
--landmarks show landmarks navigation(in line format only)
|
45
53
|
|
46
54
|
Output formats
|
47
55
|
--------------
|
@@ -126,3 +134,126 @@ Note that this makes process slower because it will read all the document.
|
|
126
134
|
Epub version: 2.0
|
127
135
|
Words: 65006
|
128
136
|
Characters: 445924
|
137
|
+
|
138
|
+
Navigations
|
139
|
+
-----------
|
140
|
+
|
141
|
+
`epubinfo` can coutput navigations in EPUB document such as table of contents and landmarks. Pass `--navigation` option to the command. This option is available only in line format, for now.
|
142
|
+
|
143
|
+
% epubinfo --navigation ./linear-algebra.epub
|
144
|
+
(snip)
|
145
|
+
=== table of contents ===
|
146
|
+
Table of Contents
|
147
|
+
A First Course in Linear Algebra
|
148
|
+
Copyright
|
149
|
+
Author Biography
|
150
|
+
Edition
|
151
|
+
Publisher
|
152
|
+
Table of Contents
|
153
|
+
Dedication
|
154
|
+
Chapter 1. Theorems
|
155
|
+
Chapter 2. Notation
|
156
|
+
Chapter 3. Diagrams
|
157
|
+
Chapter 4. Examples
|
158
|
+
Preface
|
159
|
+
Acknowledgements
|
160
|
+
Part I. Part C Core
|
161
|
+
Chapter 1. Chapter SLE Systems of Linear Equations
|
162
|
+
Section WILA What is Linear Algebra?
|
163
|
+
Section SSLE Solving Systems of Linear Equations
|
164
|
+
Section RREF Reduced Row-Echelon Form
|
165
|
+
Section HSE Homogeneous Systems of Equations
|
166
|
+
Section NM Nonsingular Matrices
|
167
|
+
Chapter 2. Chapter V Vectors
|
168
|
+
Section SS Spanning Sets
|
169
|
+
Section O Orthogonality
|
170
|
+
Chapter 3. Chapter M Matrices
|
171
|
+
Section MM Matrix Multiplication
|
172
|
+
Section MISLE Matrix Inverses and Systems of Linear Equations
|
173
|
+
Section MINM Matrix Inverses and Nonsingular Matrices
|
174
|
+
Section CRS Column and Row Spaces
|
175
|
+
Chapter 4. Chapter VS Vector Spaces
|
176
|
+
Chapter 5. Chapter D Determinants
|
177
|
+
Section PDM Properties of Determinants of Matrices
|
178
|
+
Chapter 6. Chapter E Eigenvalues
|
179
|
+
Section PEE Properties of Eigenvalues and Eigenvectors
|
180
|
+
Chapter 7. Chapter LT Linear Transformations
|
181
|
+
Section ILT Injective Linear Transformations
|
182
|
+
Section SLT Surjective Linear Transformations
|
183
|
+
Section IVLT Invertible Linear Transformations
|
184
|
+
Chapter 8. Chapter R Representations
|
185
|
+
Section CB Change of Basis
|
186
|
+
Section OD Orthonormal Diagonalization
|
187
|
+
Section NLT Nilpotent Linear Transformations
|
188
|
+
Section IS Invariant Subspaces
|
189
|
+
Section JCF Jordan Canonical Form
|
190
|
+
Chapter 9. Appendix CN Computation Notes
|
191
|
+
Section MMA Mathematica
|
192
|
+
Section TI86 Texas Instruments 86
|
193
|
+
Section TI83 Texas Instruments 83
|
194
|
+
Section SAGE SAGE: Open Source Mathematics Software
|
195
|
+
Chapter 10. Appendix P Preliminaries
|
196
|
+
Section CNO Complex Number Operations
|
197
|
+
Section SET Sets
|
198
|
+
Section PT Proof Techniques
|
199
|
+
Chapter 11. Appendix A Archetypes
|
200
|
+
Archetype A
|
201
|
+
Archetype B
|
202
|
+
Archetype C
|
203
|
+
Archetype D
|
204
|
+
Archetype E
|
205
|
+
Archetype F
|
206
|
+
Archetype G
|
207
|
+
Archetype H
|
208
|
+
Archetype I
|
209
|
+
Archetype J
|
210
|
+
Archetype K
|
211
|
+
Archetype L
|
212
|
+
Archetype M
|
213
|
+
Archetype N
|
214
|
+
Archetype O
|
215
|
+
Archetype P
|
216
|
+
Archetype Q
|
217
|
+
Archetype R
|
218
|
+
Archetype S
|
219
|
+
Archetype T
|
220
|
+
Archetype U
|
221
|
+
Archetype V
|
222
|
+
Archetype W
|
223
|
+
Archetype X
|
224
|
+
Chapter 12. Appendix GFDL GNU Free Documentation License
|
225
|
+
Part II. Part T Topics
|
226
|
+
Chapter 14. Section T Trace
|
227
|
+
Chapter 15. Section HP Hadamard Product
|
228
|
+
Chapter 16. Section VM Vandermonde Matrix
|
229
|
+
Chapter 17. Section PSM Positive Semi-definite Matrices
|
230
|
+
Chapter 18. Chapter MD Matrix Decompositions
|
231
|
+
Section ROD Rank One Decomposition
|
232
|
+
Section TD Triangular Decomposition
|
233
|
+
Section SVD Singular Value Decomposition
|
234
|
+
Section SR Square Roots
|
235
|
+
Section POD Polar Decomposition
|
236
|
+
Part III. Part A Applications
|
237
|
+
Chapter 19. Section CF Curve Fitting
|
238
|
+
Chapter 20. Section SAS Sharing A Secret
|
239
|
+
Chapter 21. Contributors
|
240
|
+
Chapter 22. Definitions
|
241
|
+
|
242
|
+
=== page list ===
|
243
|
+
(No page list)
|
244
|
+
|
245
|
+
=== landmarks ===
|
246
|
+
(No heading)
|
247
|
+
Part I. Part C Core
|
248
|
+
|
249
|
+
If you need only one type of navigation, tell it to `navigation` option:
|
250
|
+
|
251
|
+
% epubinfo --navigation=toc ./linear-algebra.epub
|
252
|
+
|
253
|
+
You can specify multiple typs by pass the option multiple times:
|
254
|
+
|
255
|
+
% epubinfo --navigation=toc --navigation=landmarks ./linear-algebra.epub
|
256
|
+
|
257
|
+
Short cut options `--toc`, `--page-list` and `--landmarks` are also available. `--toc` is, for example, equivalent to `--navigation=toc`:
|
258
|
+
|
259
|
+
% epubinfo --toc ./linear-algebra.epub
|
data/docs/Home.adoc
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
EPUB Parser gem parses EPUB 3 book loosely.
|
6
6
|
|
7
|
-
image:https://gitlab.com/KitaitiMakoto/epub-parser/badges/master/
|
7
|
+
image:https://gitlab.com/KitaitiMakoto/epub-parser/badges/master/pipeline.svg[link="https://gitlab.com/KitaitiMakoto/epub-parser/commits/master",title="pipeline status"]
|
8
8
|
image:https://badge.fury.io/rb/epub-parser.svg[link="https://gemnasium.com/KitaitiMakoto/epub-parser",title="Gem Version"]
|
9
9
|
image:https://gitlab.com/KitaitiMakoto/epub-parser/badges/master/coverage.svg[link="https://kitaitimakoto.gitlab.io/epub-parser/coverage/",title="coverage report"]
|
10
10
|
|
data/lib/epub/constants.rb
CHANGED
@@ -41,4 +41,17 @@ module EPUB
|
|
41
41
|
]
|
42
42
|
CORE = IMAGE + APPLICATION + AUDIO + TEXT
|
43
43
|
end
|
44
|
+
|
45
|
+
# @see https://idpf.github.io/epub-vocabs/structure/
|
46
|
+
module Type
|
47
|
+
DOCUMENT_NAVIGATION = %w[
|
48
|
+
toc
|
49
|
+
landmarks
|
50
|
+
]
|
51
|
+
PAGINATION = %w[
|
52
|
+
pagebreak
|
53
|
+
page_list
|
54
|
+
]
|
55
|
+
TYPES = DOCUMENT_NAVIGATION + PAGINATION
|
56
|
+
end
|
44
57
|
end
|
@@ -1,8 +1,10 @@
|
|
1
|
-
require "
|
1
|
+
require "epub/content_document/typable"
|
2
2
|
|
3
3
|
module EPUB
|
4
4
|
module ContentDocument
|
5
5
|
class Navigation < XHTML
|
6
|
+
include Typable
|
7
|
+
|
6
8
|
attr_accessor :navigations
|
7
9
|
|
8
10
|
def initialize
|
@@ -72,6 +74,7 @@ module EPUB
|
|
72
74
|
|
73
75
|
class Item
|
74
76
|
include Hidable
|
77
|
+
include Typable
|
75
78
|
|
76
79
|
attr_accessor :items, :text,
|
77
80
|
:content_document, :item
|
@@ -92,49 +95,40 @@ module EPUB
|
|
92
95
|
item.traverse depth + 1, &block
|
93
96
|
end
|
94
97
|
end
|
95
|
-
end
|
96
|
-
|
97
|
-
class Navigation < Item
|
98
|
-
module Type
|
99
|
-
TOC = 'toc'
|
100
|
-
PAGE_LIST = 'page_list'
|
101
|
-
LANDMARKS = 'landmarks'
|
102
|
-
end
|
103
|
-
|
104
|
-
attr_reader :types
|
105
|
-
alias navigations items
|
106
|
-
alias navigations= items=
|
107
|
-
alias heading text
|
108
|
-
alias heading= text=
|
109
|
-
|
110
|
-
def initialize
|
111
|
-
super
|
112
|
-
@types = Set.new
|
113
|
-
end
|
114
|
-
|
115
|
-
def types=(ts)
|
116
|
-
@types = ts.kind_of?(Set) ? ts : Set.new(ts)
|
117
|
-
end
|
118
98
|
|
119
99
|
# For backward compatibility
|
120
100
|
def type
|
121
|
-
|
122
|
-
|
101
|
+
types.find {|t|
|
102
|
+
Type::TYPES.include? t
|
123
103
|
}
|
124
104
|
end
|
125
105
|
|
126
106
|
# For backward compatibility
|
127
107
|
def type=(t)
|
128
|
-
|
108
|
+
types << t
|
129
109
|
end
|
130
110
|
|
131
111
|
%w[toc page_list landmarks].each do |type|
|
132
112
|
define_method "#{type}?" do
|
133
|
-
|
113
|
+
types.include? type
|
134
114
|
end
|
135
115
|
end
|
136
116
|
end
|
137
117
|
|
118
|
+
# @todo Implement method to represent navigation structure
|
119
|
+
class Navigation < Item
|
120
|
+
module Type
|
121
|
+
TOC = 'toc'
|
122
|
+
PAGE_LIST = 'page_list'
|
123
|
+
LANDMARKS = 'landmarks'
|
124
|
+
end
|
125
|
+
|
126
|
+
alias navigations items
|
127
|
+
alias navigations= items=
|
128
|
+
alias heading text
|
129
|
+
alias heading= text=
|
130
|
+
end
|
131
|
+
|
138
132
|
class ItemList < Array
|
139
133
|
include Hidable
|
140
134
|
|
@@ -63,6 +63,7 @@ module EPUB
|
|
63
63
|
return a_or_span if a_or_span.nil?
|
64
64
|
|
65
65
|
item.text = a_or_span.content
|
66
|
+
item.types = a_or_span.attribute_with_prefix('type', 'epub')&.split(/\s+/)
|
66
67
|
if a_or_span.name == 'a'
|
67
68
|
if item.text.empty?
|
68
69
|
embedded_content = a_or_span.each_element_by_xpath('./xhtml:audio[1]|xhtml:canvas[1]|xhtml:embed[1]|xhtml:iframe[1]|xhtml:img[1]|xhtml:math[1]|xhtml:object[1]|xhtml:svg[1]|xhtml:video[1]', EPUB::NAMESPACES).first
|
data/lib/epub/parser/version.rb
CHANGED
@@ -3,9 +3,9 @@
|
|
3
3
|
<head>
|
4
4
|
<title>Table of Contents for Example Book</title>
|
5
5
|
</head>
|
6
|
-
<body>
|
6
|
+
<body epub:type="frontmatter">
|
7
7
|
<div>
|
8
|
-
<nav epub:type="
|
8
|
+
<nav epub:type="toc" id="idid" hidden="">
|
9
9
|
<hgroup>
|
10
10
|
<h2>Sub Navigation</h2>
|
11
11
|
<h1>Table of Contents</h1>
|
@@ -23,6 +23,13 @@
|
|
23
23
|
</li>
|
24
24
|
</ol>
|
25
25
|
</nav>
|
26
|
+
<nav epub:type="landmarks">
|
27
|
+
<h2>Guide</h2>
|
28
|
+
<ol>
|
29
|
+
<li><a epub:type="toc" href="#idid">Table of Contents</a></li>
|
30
|
+
<li><a epub:type="bodymatter" href="日本語.xhtml">Body</a></li>
|
31
|
+
</ol>
|
32
|
+
</nav>
|
26
33
|
</div>
|
27
34
|
</body>
|
28
35
|
</html>
|
@@ -22,10 +22,10 @@ class TestParserContentDocument < Test::Unit::TestCase
|
|
22
22
|
navs = @parser.parse_navigations doc
|
23
23
|
nav = navs.first
|
24
24
|
|
25
|
-
assert_equal
|
25
|
+
assert_equal 2, navs.length
|
26
26
|
assert_equal 'Table of Contents', nav.heading
|
27
27
|
assert_equal 'toc', nav.type
|
28
|
-
assert_equal Set.new(["toc"
|
28
|
+
assert_equal Set.new(["toc"]), nav.types
|
29
29
|
|
30
30
|
assert_equal 2, nav.items.length
|
31
31
|
assert_equal @manifest.items.first, nav.items.first.item
|
@@ -36,4 +36,22 @@ class TestParserContentDocument < Test::Unit::TestCase
|
|
36
36
|
|
37
37
|
assert_true nav.hidden?
|
38
38
|
end
|
39
|
+
|
40
|
+
def test_landmarks
|
41
|
+
epub = EPUB::Parser.parse("#{@dir}.epub")
|
42
|
+
manifest = epub.manifest
|
43
|
+
landmarks = epub.nav.content_document.landmarks
|
44
|
+
|
45
|
+
assert_equal "Guide", landmarks.heading
|
46
|
+
assert_equal "landmarks", landmarks.type
|
47
|
+
assert_equal Set.new(["landmarks"]), landmarks.types
|
48
|
+
|
49
|
+
assert_equal 2, landmarks.items.length
|
50
|
+
|
51
|
+
assert_equal manifest["nav"], landmarks.items.first.item
|
52
|
+
assert_equal manifest["japanese-filename"], landmarks.items[1].item
|
53
|
+
|
54
|
+
assert_equal "Body", landmarks.items.last.text
|
55
|
+
assert_equal "bodymatter", landmarks.items.last.types.first
|
56
|
+
end
|
39
57
|
end
|
data/test/test_searcher.rb
CHANGED
@@ -26,7 +26,8 @@ class TestSearcher < Test::Unit::TestCase
|
|
26
26
|
assert_equal(
|
27
27
|
results([
|
28
28
|
[[[:element, 2, {:name => 'spine', :id => nil}], [:itemref, 0, {:id => nil}], [:element, 0, {:name => 'head', :id => nil}], [:element, 0, {:name => 'title', :id => nil}], [:text, 0]], [[:character, 9]], [[:character, 16]]],
|
29
|
-
[[[:element, 2, {:name => 'spine', :id => nil}], [:itemref, 0, {:id => nil}], [:element, 1, {:name => 'body', :id => nil}], [:element, 0, {:name => 'div', :id => nil}], [:element, 0, {:name => 'nav', :id => 'idid'}], [:element, 0, {:name => 'hgroup', :id => nil}], [:element, 1, {:name => 'h1', :id => nil}], [:text, 0]], [[:character, 9]], [[:character, 16]]]
|
29
|
+
[[[:element, 2, {:name => 'spine', :id => nil}], [:itemref, 0, {:id => nil}], [:element, 1, {:name => 'body', :id => nil}], [:element, 0, {:name => 'div', :id => nil}], [:element, 0, {:name => 'nav', :id => 'idid'}], [:element, 0, {:name => 'hgroup', :id => nil}], [:element, 1, {:name => 'h1', :id => nil}], [:text, 0]], [[:character, 9]], [[:character, 16]]],
|
30
|
+
[[[:element, 2, {:name => 'spine', :id => nil}], [:itemref, 0, {:id => nil}], [:element, 1, {:name => 'body', :id => nil}], [:element, 0, {:name => 'div', :id => nil}], [:element, 1, {:name => 'nav', :id => nil}], [:element, 1, {:name => 'ol', :id => nil}], [:element, 0, {:name => 'li', :id => nil}], [:element, 0, {:name => 'a', :id => nil}], [:text, 0]], [[:character, 9]], [[:character, 16]]]
|
30
31
|
]),
|
31
32
|
EPUB::Searcher::Publication.search_text(@package, 'Content')
|
32
33
|
)
|
@@ -39,7 +40,9 @@ class TestSearcher < Test::Unit::TestCase
|
|
39
40
|
"epubcfi(/6/2!/4/2/2[idid]/4/4/4/2/2)",
|
40
41
|
"epubcfi(/6/2!/4/2/2[idid]/4/4/4/4/2)",
|
41
42
|
"epubcfi(/6/2!/4/2/2[idid]/4/4/4/6/2)",
|
42
|
-
"epubcfi(/6/2!/4/2/2[idid]/4/4/4/8/2)"
|
43
|
+
"epubcfi(/6/2!/4/2/2[idid]/4/4/4/8/2)",
|
44
|
+
"epubcfi(/6/2!/4/2/4/4/2/2)",
|
45
|
+
"epubcfi(/6/2!/4/2/4/4/4/2)"
|
43
46
|
],
|
44
47
|
EPUB::Searcher::Publication.search_element(@package, xpath: './/xhtml:a').collect {|result| result[:location]}.map(&:to_s)
|
45
48
|
)
|
@@ -52,7 +55,9 @@ class TestSearcher < Test::Unit::TestCase
|
|
52
55
|
"epubcfi(/6/2!/4/2/2[idid]/4/4/4/2/2)",
|
53
56
|
"epubcfi(/6/2!/4/2/2[idid]/4/4/4/4/2)",
|
54
57
|
"epubcfi(/6/2!/4/2/2[idid]/4/4/4/6/2)",
|
55
|
-
"epubcfi(/6/2!/4/2/2[idid]/4/4/4/8/2)"
|
58
|
+
"epubcfi(/6/2!/4/2/2[idid]/4/4/4/8/2)",
|
59
|
+
"epubcfi(/6/2!/4/2/4/4/2/2)",
|
60
|
+
"epubcfi(/6/2!/4/2/4/4/4/2)"
|
56
61
|
],
|
57
62
|
EPUB::Searcher::Publication.search_element(@package, xpath: './/customnamespace:a', namespaces: {'customnamespace' => 'http://www.w3.org/1999/xhtml'}).collect {|result| result[:location]}.map(&:to_s)
|
58
63
|
)
|
@@ -66,7 +71,9 @@ class TestSearcher < Test::Unit::TestCase
|
|
66
71
|
"epubcfi(/6/2!/4/2/2[idid]/4/4/4/2)",
|
67
72
|
"epubcfi(/6/2!/4/2/2[idid]/4/4/4/4)",
|
68
73
|
"epubcfi(/6/2!/4/2/2[idid]/4/4/4/6)",
|
69
|
-
"epubcfi(/6/2!/4/2/2[idid]/4/4/4/8)"
|
74
|
+
"epubcfi(/6/2!/4/2/2[idid]/4/4/4/8)",
|
75
|
+
"epubcfi(/6/2!/4/2/4/4/2)",
|
76
|
+
"epubcfi(/6/2!/4/2/4/4/4)"
|
70
77
|
],
|
71
78
|
EPUB::Searcher::Publication.search_element(@package, css: 'ol > li').collect {|result| result[:location]}.map(&:to_s)
|
72
79
|
)
|
@@ -74,7 +81,7 @@ class TestSearcher < Test::Unit::TestCase
|
|
74
81
|
|
75
82
|
class TesetResult < self
|
76
83
|
def test_to_cfi
|
77
|
-
assert_equal 'epubcfi(/6/2!/4/2/2[idid]/2/4/1,:9,:16)', EPUB::Searcher::Publication.search_text(@package, 'Content').
|
84
|
+
assert_equal 'epubcfi(/6/2!/4/2/2[idid]/2/4/1,:9,:16)', EPUB::Searcher::Publication.search_text(@package, 'Content')[1].to_cfi.to_s
|
78
85
|
end
|
79
86
|
end
|
80
87
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: epub-parser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- KITAITI Makoto
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-01-
|
11
|
+
date: 2020-01-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -356,6 +356,7 @@ files:
|
|
356
356
|
- lib/epub/constants.rb
|
357
357
|
- lib/epub/content_document.rb
|
358
358
|
- lib/epub/content_document/navigation.rb
|
359
|
+
- lib/epub/content_document/typable.rb
|
359
360
|
- lib/epub/content_document/xhtml.rb
|
360
361
|
- lib/epub/inspector.rb
|
361
362
|
- lib/epub/metadata.rb
|