epub-parser 0.3.5 → 0.3.6

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: ee9d5ae3802a16461fd85224ecf47f4b2eafc6181e0c84761a9108a61b5890f1
4
- data.tar.gz: 24d6b8164c849969121e9b4975e366a1683e7367096214d5c78ec6f3676e12f0
3
+ metadata.gz: 0f7e1c88df88ae747c9119ab1a7a5978da200d977ffa0a97b33f2c5c2d398cb8
4
+ data.tar.gz: b554ff75c8641a4f8edc3cf0a4801671440b605aa493a50d95498d278c9e49b7
5
5
  SHA512:
6
- metadata.gz: 45c6d1b877698ab09620ecd079c805fd873fde3e77210e76a251bf416390fd1d17fcb5ea4246f55d4616640952e7db00dca5f3635f6829d429851c24cf6ecec2
7
- data.tar.gz: 97e70f781221ef0036761d84fd1ae718f543588a04ce78b5209e068604c9d2b6c33ce68c57f51499420e65710cf260c86cb8016c5ee8674c21db56c348af8ad6
6
+ metadata.gz: 8a102404b9a0a7257e7899f43c08002e4ce55b29ed56df6bead42d2eef0d316b9b63ee4494627777fba1aa3849389fd2754caccc5409a9d7c7a5761243ca3367
7
+ data.tar.gz: f12125b9970efaa46bd24d71f6e32b6fe9d95d7ceb07c20f0b65124be6c3832044941c28fd46ed79722408ab0a449e6431442cfd519981a786606550fd34bfde
data/.yardopts CHANGED
@@ -1,3 +1,4 @@
1
+ --load docs/yard-forwardable_def_delegators_handler.rb
1
2
  -
2
3
  CHANGELOG.markdown
3
4
  MIT-LICENSE
@@ -1,6 +1,13 @@
1
1
  CHANGELOG
2
2
  =========
3
3
 
4
+ 0.3.6
5
+ -----
6
+ * [BUG FIX]Ignore fragment when find item by relative IRI
7
+ * Enable [PrettyBacktrace][] only when specified by env var for testing performance
8
+
9
+ [PrettyBacktrace]: https://github.com/ko1/pretty_backtrace
10
+
4
11
  0.3.5
5
12
  -----
6
13
  * [BUG FIX]Fix a bug that {EPUB::ContentDocument::Navigation::Item#item} is `nil` when `href` includes double dots(`..`)(Thanks [aelkiss][]!)
@@ -64,7 +64,7 @@ See document's {file:docs/Home.markdown} or [API Documentation][rubydoc] for mor
64
64
  Unique identifier: 978-1-934356-91-3
65
65
  Epub version: 2.0
66
66
 
67
- See {file:docs/Epubinfo} for more info.
67
+ See {file:docs/Epubinfo.markdown} for more info.
68
68
 
69
69
  ### `epub-open` command-line tool
70
70
 
@@ -96,7 +96,7 @@ IRB starts. `self` becomes the EPUB book and can access to methods of `EPUB`.
96
96
  => nil
97
97
  exit # Enter "exit" when exit the session
98
98
 
99
- See {file:docs/EpubOpen} for more info.
99
+ See {file:docs/EpubOpen.markdown} for more info.
100
100
 
101
101
  DOCUMENTATION
102
102
  -------------
@@ -159,6 +159,14 @@ If you find other gems, please tell me or request a pull request.
159
159
  RECENT CHANGES
160
160
  --------------
161
161
 
162
+ ### 0.3.6
163
+
164
+ * [BUG FIX]Ignore fragment when find item by relative IRI
165
+ * Disable [PrettyBacktrace][] by default
166
+
167
+ [PrettyBacktrace]: https://github.com/ko1/pretty_backtrace
168
+
169
+
162
170
  ### 0.3.5
163
171
 
164
172
  * [BUG FIX]Fix a bug that {EPUB::ContentDocument::Navigation::Item#item} is `nil` when `href` includes double dots(`..`)(Thanks [aelkiss][]!)
@@ -176,14 +184,11 @@ RECENT CHANGES
176
184
  * [BREAKING CHANGE]Remove deprecated second argument from `EPUB::Parser::Publication#initialize`
177
185
  * Add `detect_encoding` keyword argument to `Publication::Package::Manifest::Item#read` and `ContentDocument::XHTML#read`
178
186
 
179
- ### 0.3.2
180
-
181
- * Use epub-cfi gem for EPUB CFI
182
-
183
187
  See {file:CHANGELOG.markdown} for older changelogs and details.
184
188
 
185
189
  TODOS
186
190
  -----
191
+ * Consider to implement IRI feature instead of to use Addressable
187
192
  * EPUB 3.0.1
188
193
  * EPUB 3.1
189
194
  * Help features for `epub-open` tool
data/Rakefile CHANGED
@@ -51,38 +51,3 @@ Gem::Tasks.new do |tasks|
51
51
  tasks.console.command = 'pry'
52
52
  end
53
53
  task :build => :clean
54
-
55
- class ForwardableDefDelegatorsHandler < YARD::Handlers::Ruby::Base
56
- handles method_call(:def_delegators)
57
- namespace_only
58
-
59
- def process
60
- params = validated_attribute_names(statement.parameters(false))
61
- accessor = params.shift
62
- params.each do |param|
63
- object = YARD::CodeObjects::MethodObject.new(namespace, param)
64
- object.docstring = "Forwarded to +#{accessor}+"
65
- end
66
- end
67
-
68
- protected
69
-
70
- # Strips out any non-essential arguments from the attr statement.
71
- #
72
- # @param [Array<Parser::Ruby::AstNode>] params a list of the parameters
73
- # in the attr call.
74
- # @return [Array<String>] the validated attribute names
75
- # @raise [Parser::UndocumentableError] if the arguments are not valid.
76
- def validated_attribute_names(params)
77
- params.map do |obj|
78
- case obj.type
79
- when :symbol_literal
80
- obj.jump(:ident, :op, :kw, :const).source
81
- when :string_literal
82
- obj.jump(:string_content).source
83
- else
84
- raise YARD::Parser::UndocumentableError, obj.source
85
- end
86
- end
87
- end
88
- end
@@ -39,11 +39,16 @@ unless File.readable? file
39
39
  end
40
40
  end
41
41
  book = EPUB::Parser.parse(file)
42
- data = {'Title' => [book.title]}
42
+ data = {'title' => book.title}
43
43
  data.merge!(book.metadata.to_h)
44
- data['modified'] = [book.modified]
45
- data['Unique identifier'] = [book.metadata.unique_identifier]
46
- data['EPUB Version'] = [book.package.version]
44
+ data['modified'] = book.modified
45
+ data['unique identifier'] = book.metadata.unique_identifier
46
+ data['epub version'] = book.package.version
47
+
48
+ data.each_pair do |(key, value)|
49
+ data[key] = value.respond_to?(:join) ? value.join(", ") : value.to_s
50
+ end
51
+
47
52
  counts = {:chars => 0, :words => 0}
48
53
  if options[:words] or options[:chars]
49
54
  book.resources.select(&:xhtml?).each do |xhtml|
@@ -60,12 +65,12 @@ if options[:words] or options[:chars]
60
65
  end
61
66
  end
62
67
  end
63
- data['Words'] = [counts[:words]] if options[:words]
64
- data['Characters'] = [counts[:chars]] if options[:chars]
68
+ data['words'] = counts[:words] if options[:words]
69
+ data['characters'] = counts[:chars] if options[:chars]
65
70
  if options[:format] == :line
66
71
  key_width = data.keys.map {|k| k.length}.max + 3
67
72
  data.each_pair do |k, v|
68
- puts (k.to_s.capitalize + ':').ljust(key_width) + v.join(', ')
73
+ puts (k.to_s.capitalize + ':').ljust(key_width) + v.to_s
69
74
  end
70
75
  else
71
76
  require options[:format].to_s
@@ -1,4 +1,4 @@
1
- {file:docs/Home} > **{file:docs/EpubOpen}**
1
+ {file:docs/Home} > **{file:docs/EpubOpen.markdown}**
2
2
 
3
3
  `epub-open` command-line tool
4
4
  =============================
@@ -1,4 +1,4 @@
1
- {file:docs/Home} > **{file:docs/Epubinfo}**
1
+ {file:docs/Home} > **{file:docs/Epubinfo.markdown}**
2
2
 
3
3
  `epubinfo` command-line tool
4
4
  ============================
@@ -12,7 +12,7 @@ Usage
12
12
 
13
13
  Example:
14
14
 
15
- $ epubinfo ~/Documebts/Books/build_awesome_command_line_applications_in_ruby_fo.epub
15
+ $ epubinfo ~/Documebts/Books/build_awesome_command_line_applications_in_ruby_fo.epub
16
16
  Title: Build Awesome Command-Line Applications in Ruby (for KITAITI MAKOTO)
17
17
  Identifiers: 978-1-934356-91-3
18
18
  Titles: Build Awesome Command-Line Applications in Ruby (for KITAITI MAKOTO)
@@ -34,4 +34,95 @@ Example:
34
34
 
35
35
  To see help:
36
36
 
37
- epubinfo -h
37
+ $ epubinfo -h
38
+ Show metadata of an EPUB file
39
+
40
+ Usage: epubinfo [options] EPUBFILE
41
+
42
+ -f, --format=FORMAT format of output(line, json or yaml), defaults to line(for console)
43
+ --words count words of content documents
44
+ --chars count charactors of content documents
45
+
46
+ Output formats
47
+ --------------
48
+
49
+ `epubinfo` can output in three formats: line, JSON and YAML. You can specify format by `--format`(`-f`) command-line option
50
+
51
+ ### JSON ###
52
+
53
+ $ epubinfo --format=json ~/Documebts/Books/build_awesome_command_line_applications_in_ruby_fo.epub | jq .
54
+ {
55
+ "title": "Build Awesome Command-Line Applications in Ruby (for KITAITI MAKOTO)",
56
+ "identifiers": "978-1-934356-91-3",
57
+ "titles": "Build Awesome Command-Line Applications in Ruby (for KITAITI MAKOTO)",
58
+ "languages": "en",
59
+ "contributors": "",
60
+ "coverages": "",
61
+ "creators": "David Bryant Copeland",
62
+ "dates": "",
63
+ "descriptions": "",
64
+ "formats": "",
65
+ "publishers": "The Pragmatic Bookshelf, LLC (338304)",
66
+ "relations": "",
67
+ "rights": "Copyright © 2012 Pragmatic Programmers, LLC",
68
+ "sources": "",
69
+ "subjects": "Pragmatic Bookshelf",
70
+ "types": "",
71
+ "modified": "",
72
+ "unique identifier": "978-1-934356-91-3",
73
+ "epub version": "2.0"
74
+ }
75
+
76
+ ### YAML ###
77
+
78
+ $ epubinfo --format=yaml ~/Documebts/Books/build_awesome_command_line_applications_in_ruby_fo.epub
79
+ ---
80
+ title: Build Awesome Command-Line Applications in Ruby (for KITAITI MAKOTO)
81
+ :identifiers: 978-1-934356-91-3
82
+ :titles: Build Awesome Command-Line Applications in Ruby (for KITAITI MAKOTO)
83
+ :languages: en
84
+ :contributors: ''
85
+ :coverages: ''
86
+ :creators: David Bryant Copeland
87
+ :dates: ''
88
+ :descriptions: ''
89
+ :formats: ''
90
+ :publishers: The Pragmatic Bookshelf, LLC (338304)
91
+ :relations: ''
92
+ :rights: Copyright © 2012 Pragmatic Programmers, LLC
93
+ :sources: ''
94
+ :subjects: Pragmatic Bookshelf
95
+ :types: ''
96
+ modified: ''
97
+ unique identifier: 978-1-934356-91-3
98
+ epub Version: '2.0'
99
+
100
+ Character and word count
101
+ ------------------------
102
+
103
+ `epubinfo` can count characters and words(space perarated) in EPUB document. Pass `--chars` and `--words` options to the command.
104
+
105
+ Note that this makes process slower because it will read all the document.
106
+
107
+ $ epubinfo --chars --words ~/Documebts/Books/build_awesome_command_line_applications_in_ruby_fo.epub
108
+ Title: Build Awesome Command-Line Applications in Ruby (for IKEDA TATSUNOBU)
109
+ Identifiers: 978-1-934356-91-3
110
+ Titles: Build Awesome Command-Line Applications in Ruby (for IKEDA TATSUNOBU)
111
+ Languages: en
112
+ Contributors:
113
+ Coverages:
114
+ Creators: David Bryant Copeland
115
+ Dates:
116
+ Descriptions:
117
+ Formats:
118
+ Publishers: The Pragmatic Bookshelf, LLC (338304)
119
+ Relations:
120
+ Rights: Copyright © 2012 Pragmatic Programmers, LLC
121
+ Sources:
122
+ Subjects: Pragmatic Bookshelf
123
+ Types:
124
+ Modified:
125
+ Unique identifier: 978-1-934356-91-3
126
+ Epub version: 2.0
127
+ Words: 65006
128
+ Characters: 445924
@@ -17,13 +17,13 @@ Usage
17
17
 
18
18
  `epubinfo` tool extracts and shows the metadata of specified EPUB book.
19
19
 
20
- See {file:docs/Epubinfo}.
20
+ See {file:docs/Epubinfo.markdown}.
21
21
 
22
22
  #### epub-open
23
23
 
24
24
  `epub-open` tool provides interactive shell(IRB) which helps you research about EPUB book.
25
25
 
26
- See {file:docs/EpubOpen}.
26
+ See {file:docs/EpubOpen.markdown}.
27
27
 
28
28
  ### As a library
29
29
 
@@ -0,0 +1,34 @@
1
+ class ForwardableDefDelegatorsHandler < YARD::Handlers::Ruby::Base
2
+ handles method_call(:def_delegators)
3
+ namespace_only
4
+
5
+ def process
6
+ params = validated_attribute_names(statement.parameters(false))
7
+ accessor = params.shift
8
+ params.each do |param|
9
+ object = YARD::CodeObjects::MethodObject.new(namespace, param)
10
+ object.docstring = "Forwarded to +#{accessor}+"
11
+ end
12
+ end
13
+
14
+ protected
15
+
16
+ # Strips out any non-essential arguments from the attr statement.
17
+ #
18
+ # @param [Array<Parser::Ruby::AstNode>] params a list of the parameters
19
+ # in the attr call.
20
+ # @return [Array<String>] the validated attribute names
21
+ # @raise [Parser::UndocumentableError] if the arguments are not valid.
22
+ def validated_attribute_names(params)
23
+ params.map do |obj|
24
+ case obj.type
25
+ when :symbol_literal
26
+ obj.jump(:ident, :op, :kw, :const).source
27
+ when :string_literal
28
+ obj.jump(:string_content).source
29
+ else
30
+ raise YARD::Parser::UndocumentableError, obj.source
31
+ end
32
+ end
33
+ end
34
+ end
@@ -82,13 +82,7 @@ module EPUB
82
82
  item.text = extract_attribute(a_or_span, 'title').to_s if item.text.nil? || item.text.empty?
83
83
  end
84
84
  item.href = extract_attribute(a_or_span, 'href')
85
- # TODO: too dirty and with potential performance issue
86
- full_path = EPUB::Publication::Package::Manifest::Item::DUMMY_ROOT_IRI + @item.manifest.package.full_path + @item.href + item.href
87
- full_path.scheme = nil
88
- full_path.host = nil
89
- full_path.path = full_path.path[1..-1]
90
- full_path.fragment = nil
91
- item.item = @item.manifest.items.find {|it| it.full_path == full_path}
85
+ item.item = @item.find_item_by_relative_iri(item.href)
92
86
  end
93
87
  item.items = element.xpath('./xhtml:ol[1]/xhtml:li', EPUB::NAMESPACES).map {|li| parse_navigation_item(li)}
94
88
 
@@ -1,5 +1,5 @@
1
1
  module EPUB
2
2
  class Parser
3
- VERSION = "0.3.5"
3
+ VERSION = "0.3.6"
4
4
  end
5
5
  end
@@ -227,6 +227,7 @@ module EPUB
227
227
  segment == '..' ? clean_segments.pop : clean_segments << segment
228
228
  end
229
229
  target_iri = Addressable::URI.parse(clean_segments.join(Addressable::URI::SLASH))
230
+ target_iri.fragment = nil
230
231
  manifest.items.find { |item| item.href == target_iri}
231
232
  end
232
233
 
@@ -9,7 +9,9 @@ require 'test/unit'
9
9
  require 'test/unit/rr'
10
10
  require 'test/unit/notify'
11
11
  require 'pry'
12
- require 'pretty_backtrace'
13
- PrettyBacktrace.enable
12
+ if ENV["PRETTY_BACKTRACE"]
13
+ require 'pretty_backtrace'
14
+ PrettyBacktrace.enable
15
+ end
14
16
 
15
17
  require 'epub/parser'
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.5
4
+ version: 0.3.6
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-03-04 00:00:00.000000000 Z
11
+ date: 2018-03-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -313,6 +313,7 @@ files:
313
313
  - docs/Publication.markdown
314
314
  - docs/Searcher.markdown
315
315
  - docs/UnpackedArchive.markdown
316
+ - docs/yard-forwardable_def_delegators_handler.rb
316
317
  - epub-parser.gemspec
317
318
  - examples/aggregate-contents-from-web.rb
318
319
  - examples/exctract-content-using-cfi.rb