epub-parser 0.3.9 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5961049ade105ba54596ed40e0c6ff1f492b48fbb37957b90ce0a35bff61fda1
4
- data.tar.gz: 1c6d046515c6dd279a113b69040eae5d713813a35561b960882571cd02356792
3
+ metadata.gz: b8eeea7d5a67b4f9aaa7c71088837f4bb7156090c48e5411628e960de7b24233
4
+ data.tar.gz: b4d0b181946da274c66927caea49cf59c62d5507cd9543dde59bf1d3deae43d8
5
5
  SHA512:
6
- metadata.gz: 8d295d2df9ea39e38a52140e1c812901edc21189c98ad32c2ed25e1078372099483b4d671ca2a1a320d0c5c05f179762bf6ad9b27f960c40b3eb9548b1053239
7
- data.tar.gz: e45a6b0d495458fa4de9b9aaff379f0d20d11723bf8d7bac30686045811387d6ee641fb759c6b5bc218c1de8f309d1d8a981db03e1e9a6b16da2bc3f62eb5d92
6
+ metadata.gz: 3f9441b1dd0b6c4ac0d8acf04ff35fcdd0df4d3e880bb8a496e4a2e5127d99dc2ffc98927dd9d9907327cef08b7e8b76280f324cc1543ca38b7c80fe824fd8f1
7
+ data.tar.gz: 158ac997006c5ee7967132c294d6f4183dbb4dc29927653dca49e05399c63793929910beb9cd2673d8a9ea5b5175adff5f45bc712097e8b5055cb1e69df9565e
@@ -39,7 +39,7 @@ test:2.5:
39
39
  - deps
40
40
 
41
41
  test:2.6:
42
- image: ruby:2.6-rc
42
+ image: ruby:2.6
43
43
  script: bundle exec rake test
44
44
  except:
45
45
  - tags
@@ -51,9 +51,9 @@ test:2.6:
51
51
  pages:
52
52
  stage: deploy
53
53
  dependencies:
54
- - test:2.5
54
+ - test:2.6
55
55
  script:
56
- - bundle exec rake doc:yard
56
+ - bundle exec rake test doc:yard
57
57
  - mv doc public
58
58
  - mv coverage public/
59
59
  artifacts:
@@ -62,6 +62,6 @@ pages:
62
62
  only:
63
63
  - master
64
64
  cache:
65
- key: ruby:2.5
65
+ key: ruby:2.6
66
66
  paths:
67
67
  - deps
@@ -1,5 +1,10 @@
1
1
  = CHANGELOG
2
2
 
3
+ == 0.4.0
4
+
5
+ * [REFACTORING]Make submodules for `XMLDocument::Refinements`
6
+ * [BUG FIX]Make epub:type a Set
7
+
3
8
  == 0.3.9
4
9
 
5
10
  * [BUG FIX]Set {EPUB::Metadata::DCMES#lang} properly from xml:lang attribute
@@ -174,6 +174,10 @@ If you find other gems, please tell me or request a pull request.
174
174
 
175
175
  == RECENT CHANGES
176
176
 
177
+ === 0.4.0
178
+
179
+ * [BUG FIX]Make epub:type a Set
180
+
177
181
  === 0.3.9
178
182
 
179
183
  * [BUG FIX]Set {EPUB::Metadata::DCMES#lang} properly from xml:lang attribute
@@ -186,18 +190,6 @@ If you find other gems, please tell me or request a pull request.
186
190
  * Make XML library switchable between REXML and Nokogiri
187
191
  * Make REXML a default XML backend
188
192
 
189
- === 0.3.7
190
-
191
- * Strip leading and trailing white spaces from identifiers
192
- * Change home page and documentation from rubydoc.info to GitLab Pages
193
- * Make {EPUB::Book::Features#cover_image Book::Features#cover_image} return EPUB 2 cover image if EPUB 3's not available
194
- * Add `epub-cover` command-line tool. See {file:docs/EpubCover.adoc} for details.
195
-
196
- === 0.3.6
197
-
198
- * [BUG FIX]Ignore fragment when find item by relative IRI
199
- * Disable https://github.com/ko1/pretty_backtrace[PrettyBacktrace] by default
200
-
201
193
  See {file:CHANGELOG.adoc} for older changelogs and details.
202
194
 
203
195
  == TODOS
@@ -5,7 +5,6 @@
5
5
  EPUB Parser gem parses EPUB 3 book loosely.
6
6
 
7
7
  image:https://gitlab.com/KitaitiMakoto/epub-parser/badges/master/build.svg[link="https://gitlab.com/KitaitiMakoto/epub-parser/commits/master", title="pipeline status"]
8
- image:https://gemnasium.com/KitaitiMakoto/epub-parser.png[link="https://gitlab.com/KitaitiMakoto/epub-parser/commits/master",title="Dependency Status"]
9
8
  image:https://badge.fury.io/rb/epub-parser.svg[link="https://gemnasium.com/KitaitiMakoto/epub-parser",title="Gem Version"]
10
9
  image:https://gitlab.com/KitaitiMakoto/epub-parser/badges/master/coverage.svg[link="https://kitaitimakoto.gitlab.io/epub-parser/coverage/",title="coverage report"]
11
10
 
@@ -23,6 +23,7 @@ Gem::Specification.new do |s|
23
23
  s.test_files = s.files & Dir['{test,spec,features}/**/*.{rb,feature}']
24
24
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
25
25
  s.require_paths = ["lib"]
26
+ s.metadata["yard.run"] = "yard"
26
27
 
27
28
  s.add_development_dependency 'rake'
28
29
  s.add_development_dependency 'rubygems-tasks'
@@ -1,3 +1,5 @@
1
+ require "set"
2
+
1
3
  module EPUB
2
4
  module ContentDocument
3
5
  class Navigation < XHTML
@@ -99,12 +101,33 @@ module EPUB
99
101
  LANDMARKS = 'landmarks'
100
102
  end
101
103
 
102
- attr_accessor :type
104
+ attr_reader :types
103
105
  alias navigations items
104
106
  alias navigations= items=
105
107
  alias heading text
106
108
  alias heading= text=
107
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
+
119
+ # For backward compatibility
120
+ def type
121
+ @types.find {|t|
122
+ %w[toc page_list landmarks].include? t
123
+ }
124
+ end
125
+
126
+ # For backward compatibility
127
+ def type=(t)
128
+ @types << t
129
+ end
130
+
108
131
  %w[toc page_list landmarks].each do |type|
109
132
  define_method "#{type}?" do
110
133
  type == Type.const_get(type.upcase)
@@ -48,7 +48,7 @@ module EPUB
48
48
  nav.text = find_heading(element)
49
49
  hidden = element.attribute_with_prefix('hidden')
50
50
  nav.hidden = hidden.nil? ? nil : true
51
- nav.type = element.attribute_with_prefix('type', 'epub')
51
+ nav.types = element.attribute_with_prefix('type', 'epub')&.split(/\s+/)
52
52
  element.each_element_by_xpath('./xhtml:ol/xhtml:li', EPUB::NAMESPACES).map do |elem|
53
53
  nav.items << parse_navigation_item(elem)
54
54
  end
@@ -1,5 +1,5 @@
1
1
  module EPUB
2
2
  class Parser
3
- VERSION = "0.3.9"
3
+ VERSION = "0.4.0"
4
4
  end
5
5
  end
@@ -1,5 +1,3 @@
1
- require "rexml/document"
2
-
3
1
  module EPUB
4
2
  class Parser
5
3
  class XMLDocument
@@ -14,67 +12,14 @@ module EPUB
14
12
  end
15
13
  end
16
14
  end
17
-
18
- begin
19
- require "nokogiri"
20
- @backend = :Nokogiri
21
- rescue LoadError
22
- @backend = :REXML
23
- end
24
-
25
- module Refinements
26
- [REXML::Element, REXML::Text].each do |klass|
27
- refine klass do
28
- %i[document element text].each do |type|
29
- define_method "#{type}?" do
30
- node_type == type
31
- end
32
- end
33
- end
34
- end
35
-
36
- refine REXML::Element do
37
- def each_element_by_xpath(xpath, namespaces = nil, &block)
38
- REXML::XPath.each self, xpath, namespaces, &block
39
- end
40
-
41
- def attribute_with_prefix(name, prefix = nil)
42
- attribute(name, EPUB::NAMESPACES[prefix])&.value
43
- end
44
-
45
- alias namespace_uri namespace
46
-
47
- def content
48
- texts.join
49
- end
50
- end
51
-
52
- refine REXML::Text do
53
- alias content value
54
- end
55
-
56
- if const_defined? :Nokogiri
57
- refine Nokogiri::XML::Node do
58
- def each_element_by_xpath(xpath, namespaces = nil, &block)
59
- xpath(xpath, namespaces).each &block
60
- end
61
-
62
- def attribute_with_prefix(name, prefix = nil)
63
- attribute_with_ns(name, EPUB::NAMESPACES[prefix])&.value
64
- end
65
-
66
- def each_element(xpath = nil, &block)
67
- element_children.each(&block)
68
- end
69
-
70
- alias elements element_children
71
-
72
- def namespace_uri
73
- namespace.href
74
- end
75
- end
76
- end
77
- end
78
15
  end
79
16
  end
80
17
  end
18
+
19
+ require "epub/parser/xml_document/refinements/rexml"
20
+ begin
21
+ require "epub/parser/xml_document/refinements/nokogiri"
22
+ EPUB::Parser::XMLDocument.backend = :Nokogiri
23
+ rescue LoadError
24
+ EPUB::Parser::XMLDocument.backend = :REXML
25
+ end
@@ -0,0 +1,33 @@
1
+ require "nokogiri"
2
+
3
+ module EPUB
4
+ class Parser
5
+ class XMLDocument
6
+ module Refinements
7
+ module Nokogiri
8
+ refine ::Nokogiri::XML::Node do
9
+ def each_element_by_xpath(xpath, namespaces = nil, &block)
10
+ xpath(xpath, namespaces).each &block
11
+ end
12
+
13
+ def attribute_with_prefix(name, prefix = nil)
14
+ attribute_with_ns(name, EPUB::NAMESPACES[prefix])&.value
15
+ end
16
+
17
+ def each_element(xpath = nil, &block)
18
+ element_children.each(&block)
19
+ end
20
+
21
+ alias elements element_children
22
+
23
+ def namespace_uri
24
+ namespace.href
25
+ end
26
+ end
27
+ end
28
+
29
+ include Nokogiri
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,43 @@
1
+ require "rexml/document"
2
+
3
+ module EPUB
4
+ class Parser
5
+ class XMLDocument
6
+ module Refinements
7
+ module REXML
8
+ [::REXML::Element, ::REXML::Text].each do |klass|
9
+ refine klass do
10
+ %i[document element text].each do |type|
11
+ define_method "#{type}?" do
12
+ node_type == type
13
+ end
14
+ end
15
+ end
16
+ end
17
+
18
+ refine ::REXML::Element do
19
+ def each_element_by_xpath(xpath, namespaces = nil, &block)
20
+ ::REXML::XPath.each self, xpath, namespaces, &block
21
+ end
22
+
23
+ def attribute_with_prefix(name, prefix = nil)
24
+ attribute(name, EPUB::NAMESPACES[prefix])&.value
25
+ end
26
+
27
+ alias namespace_uri namespace
28
+
29
+ def content
30
+ texts.join
31
+ end
32
+ end
33
+
34
+ refine ::REXML::Text do
35
+ alias content value
36
+ end
37
+ end
38
+
39
+ include REXML
40
+ end
41
+ end
42
+ end
43
+ end
@@ -24,6 +24,7 @@ module EPUB
24
24
  @package = package
25
25
  end
26
26
 
27
+ # @return [Array<Result>]
27
28
  def search_text(word, algorithm: :seamless)
28
29
  results = []
29
30
 
@@ -41,10 +42,10 @@ module EPUB
41
42
 
42
43
  # @todo: Refactoring
43
44
  # @return [Array<Hash>] An array of rearch results. Each result is composed of:
44
- # :element: [REXML::Element, Nokogiri::XML::ELement] Found element
45
- # :itemref: [EPUB::Publication::Package::Spine::Itemref] Itemref that element's document belongs to
46
- # :location: [EPUB::CFI::Location] CFI that indicates the element
47
- # :package: [EPUB::Publication::Package] Package that the element belongs to
45
+ # * +:element+: [REXML::Element, Nokogiri::XML::ELement] Found element
46
+ # * +:itemref+: [EPUB::Publication::Package::Spine::Itemref] Itemref that element's document belongs to
47
+ # * +:location+: [EPUB::CFI::Location] CFI that indicates the element
48
+ # * +:package+: [EPUB::Publication::Package] Package that the element belongs to
48
49
  def search_element(css: nil, xpath: nil, namespaces: {})
49
50
  raise ArgumentError, 'Both css and xpath are nil' if css.nil? && xpath.nil?
50
51
 
@@ -5,7 +5,7 @@
5
5
  </head>
6
6
  <body>
7
7
  <div>
8
- <nav epub:type="toc" id="idid" hidden="">
8
+ <nav epub:type="frontmatter toc" id="idid" hidden="">
9
9
  <hgroup>
10
10
  <h2>Sub Navigation</h2>
11
11
  <h1>Table of Contents</h1>
@@ -25,6 +25,7 @@ class TestParserContentDocument < Test::Unit::TestCase
25
25
  assert_equal 1, navs.length
26
26
  assert_equal 'Table of Contents', nav.heading
27
27
  assert_equal 'toc', nav.type
28
+ assert_equal Set.new(["toc", "frontmatter"]), nav.types
28
29
 
29
30
  assert_equal 2, nav.items.length
30
31
  assert_equal @manifest.items.first, nav.items.first.item
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.3.9
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - KITAITI Makoto
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-11-05 00:00:00.000000000 Z
11
+ date: 2019-05-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -364,6 +364,8 @@ files:
364
364
  - lib/epub/parser/publication.rb
365
365
  - lib/epub/parser/version.rb
366
366
  - lib/epub/parser/xml_document.rb
367
+ - lib/epub/parser/xml_document/refinements/nokogiri.rb
368
+ - lib/epub/parser/xml_document/refinements/rexml.rb
367
369
  - lib/epub/publication.rb
368
370
  - lib/epub/publication/fixed_layout.rb
369
371
  - lib/epub/publication/package.rb
@@ -413,7 +415,8 @@ files:
413
415
  homepage: https://kitaitimakoto.gitlab.io/epub-parser/file.Home.html
414
416
  licenses:
415
417
  - MIT
416
- metadata: {}
418
+ metadata:
419
+ yard.run: yard
417
420
  post_install_message:
418
421
  rdoc_options: []
419
422
  require_paths:
@@ -429,8 +432,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
429
432
  - !ruby/object:Gem::Version
430
433
  version: '0'
431
434
  requirements: []
432
- rubyforge_project:
433
- rubygems_version: 2.7.6
435
+ rubygems_version: 3.0.3
434
436
  signing_key:
435
437
  specification_version: 4
436
438
  summary: EPUB 3 Parser