epub-parser 0.2.2 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -52,6 +52,10 @@ module EPUB
52
52
  languages.first
53
53
  end
54
54
 
55
+ def modified
56
+ metas.find {|meta| meta.property == 'dcterms:modified'}
57
+ end
58
+
55
59
  def to_h
56
60
  DC_ELEMS.inject({}) do |hsh, elem|
57
61
  hsh[elem] = __send__(elem)
@@ -94,20 +98,20 @@ module EPUB
94
98
  class Identifier < DCMES
95
99
  # @note This is ad-hoc
96
100
  # @todo Define and include OPF module for opf:scheme attribute
97
- # @todo Define generale way to handle with identifier-type refiners
101
+ # @todo Define general way to handle with identifier-type refiners
98
102
  attr_accessor :scheme
99
103
 
100
104
  # @note This is ad-hoc
101
105
  # @todo Define and include OPF module for opf:scheme attribute
102
- # @todo Define generale way to handle with identifier-type refiners
106
+ # @todo Define general way to handle with identifier-type refiners
103
107
  def isbn?
108
+ scheme == 'ISBN' or
109
+ content.to_s.downcase.start_with? 'urn:isbn' or
104
110
  refiners.any? {|refiner|
105
111
  refiner.property == 'identifier-type' and
106
112
  refiner.scheme == 'onix:codelist5' and
107
113
  %w[02 15].include? refiner.content
108
- } or
109
- scheme == 'ISBN' or
110
- content.to_s.downcase.start_with? 'urn:isbn'
114
+ }
111
115
  end
112
116
  end
113
117
 
@@ -4,7 +4,6 @@ module EPUB
4
4
  module Searcher
5
5
  class Publication
6
6
  class << self
7
- # @todo Use named argument in the future
8
7
  def search(package, word, **options)
9
8
  new(word).search(package, options)
10
9
  end
@@ -14,7 +13,6 @@ module EPUB
14
13
  @word = word
15
14
  end
16
15
 
17
- # @todo Use named argument in the future
18
16
  def search(package, algorithm: :seamless)
19
17
  results = []
20
18
 
@@ -3,7 +3,9 @@ SimpleCov.start do
3
3
  add_filter '/test|deps/'
4
4
  end
5
5
 
6
+ require 'pp'
6
7
  require 'test/unit'
7
8
  require 'test/unit/rr'
8
9
  require 'test/unit/notify'
10
+ require 'pry'
9
11
  require 'epub/parser'
@@ -0,0 +1,227 @@
1
+ # coding: utf-8
2
+ require_relative 'helper'
3
+ require 'epub/cfi'
4
+ require 'epub/parser/cfi'
5
+ require 'nokogiri/diff'
6
+
7
+ class TestCFI < Test::Unit::TestCase
8
+ def test_escape
9
+ assert_equal '^^^[^]^(^)^,^;^=', EPUB::CFI.escape('^[](),;=')
10
+ end
11
+
12
+ def test_unescape
13
+ assert_equal '^[](),;=', EPUB::CFI.unescape('^^^[^]^(^)^,^;^=')
14
+ end
15
+
16
+ class TestPath < self
17
+ data([
18
+ '/6/14[chap05ref]!/4[body01]/10/2/1:3[2^[1^]]',
19
+ '/6/4!/4/10/2/1:3[Ф-"spa ce"-99%-aa^[bb^]^^]',
20
+ '/6/4!/4/10/2/1:3[Ф-"spa%20ce"-99%25-aa^[bb^]^^]',
21
+ '/6/4!/4/10/2/1:3[%d0%a4-"spa%20ce"-99%25-aa^[bb^]^^]',
22
+ '/6/4[chap01ref]!/4[body01]/10[para05]/2/1:3[yyy]',
23
+ '/6/4[chap01ref]!/4[body01]/10[para05]/1:3[xx,y]',
24
+ '/6/4[chap01ref]!/4[body01]/10[para05]/2/1:3[,y]',
25
+ '/6/4[chap01ref]!/4[body01]/10[para05]/2/1:3[;s=b]',
26
+ '/6/4[chap01ref]!/4[body01]/10[para05]/2/1:3[yyy;s=b]',
27
+ '/6/4[chap01ref]!/4[body01]/10[para05]/2[;s=b]',
28
+ '/6/4[chap01ref]!/4[body01]/10[para05]/3:10',
29
+ '/6/4[chap01ref]!/4[body01]/16[svgimg]',
30
+ '/6/4[chap01ref]!/4[body01]/10[para05]/1:0',
31
+ '/6/4[chap01ref]!/4[body01]/10[para05]/2/1:0',
32
+ '/6/4[chap01ref]!/4[body01]/10[para05]/2/1:3',
33
+ ].reduce({}) {|data, cfi|
34
+ data[cfi] = cfi
35
+ data
36
+ })
37
+ def test_to_s(cfi)
38
+ assert_equal cfi, epubcfi(cfi).to_s
39
+ end
40
+
41
+ data([
42
+ 'epubcfi(/6/14[chap05ref]!/4[body01]/10/2/1:3[2^[1^]])',
43
+ 'epubcfi(/6/4!/4/10/2/1:3[Ф-"spa ce"-99%-aa^[bb^]^^])',
44
+ 'epubcfi(/6/4!/4/10/2/1:3[Ф-"spa%20ce"-99%25-aa^[bb^]^^])',
45
+ 'epubcfi(/6/4!/4/10/2/1:3[%d0%a4-"spa%20ce"-99%25-aa^[bb^]^^])',
46
+ 'epubcfi(/6/4[chap01ref]!/4[body01]/10[para05]/2/1:3[yyy])',
47
+ 'epubcfi(/6/4[chap01ref]!/4[body01]/10[para05]/1:3[xx,y])',
48
+ 'epubcfi(/6/4[chap01ref]!/4[body01]/10[para05]/2/1:3[,y])',
49
+ 'epubcfi(/6/4[chap01ref]!/4[body01]/10[para05]/2/1:3[;s=b])',
50
+ 'epubcfi(/6/4[chap01ref]!/4[body01]/10[para05]/2/1:3[yyy;s=b])',
51
+ 'epubcfi(/6/4[chap01ref]!/4[body01]/10[para05]/2[;s=b])',
52
+ 'epubcfi(/6/4[chap01ref]!/4[body01]/10[para05]/3:10)',
53
+ 'epubcfi(/6/4[chap01ref]!/4[body01]/16[svgimg])',
54
+ 'epubcfi(/6/4[chap01ref]!/4[body01]/10[para05]/1:0)',
55
+ 'epubcfi(/6/4[chap01ref]!/4[body01]/10[para05]/2/1:0)',
56
+ 'epubcfi(/6/4[chap01ref]!/4[body01]/10[para05]/2/1:3)',
57
+ ].reduce({}) {|data, cfi|
58
+ data[cfi] = cfi
59
+ data
60
+ })
61
+ def test_to_fragment(cfi)
62
+ assert_equal cfi, EPUB::Parser::CFI.parse(cfi).to_fragment
63
+ end
64
+
65
+ def test_compare
66
+ assert_equal -1, epubcfi('/6/4[id]') <=> epubcfi('/6/5')
67
+ assert_equal 0, epubcfi('/6/4') <=> epubcfi('/6/4')
68
+ assert_equal 1, epubcfi('/6/4') <=> epubcfi('/4/6')
69
+ assert_equal 1, epubcfi('/6/4!/4@3:7') <=> epubcfi('/6/4!/4')
70
+ assert_equal 1,
71
+ epubcfi('/6/4[chap01ref]!/4[body01]/10[para05]/2/1:3[yyy]') <=>
72
+ epubcfi('/6/4[chap01ref]!/4[body01]/10[para05]/1:3[xx,y]')
73
+ assert_nil epubcfi('/6/4[chap01ref]!/4[body01]/10[para05]/3:10') <=>
74
+ epubcfi('/6/4[chap01ref]!/4[body01]/10[para05]/3!:10')
75
+ assert_equal 1, epubcfi('/6/4') <=> epubcfi('/6')
76
+ end
77
+ end
78
+
79
+ class TestRange < self
80
+ def test_attributes
81
+ parent = epubcfi('/6/4[chap01ref]!/4[body01]/10[para05]')
82
+ first = epubcfi('/6/4[chap01ref]!/4[body01]/10[para05]/2/1:1')
83
+ last = epubcfi('/6/4[chap01ref]!/4[body01]/10[para05]/3:4')
84
+ range = epubcfi('/6/4[chap01ref]!/4[body01]/10[para05],/2/1:1,/3:4')
85
+ assert_equal 0, first <=> range.first
86
+ assert_equal 0, last <=> range.last
87
+
88
+ assert_equal 0, parent <=> range.parent
89
+ end
90
+
91
+ def test_to_s
92
+ assert_equal 'epubcfi(/6/4[chap01ref]!/4[body01]/10[para05]/2/1:1)..epubcfi(/6/4[chap01ref]!/4[body01]/10[para05]/3:4)', epubcfi('/6/4[chap01ref]!/4[body01]/10[para05],/2/1:1,/3:4').to_s
93
+ assert_equal 'epubcfi(/6/4[chap01ref]!/4[body01]/10[para05]!/2/1:1)..epubcfi(/6/4[chap01ref]!/4[body01]/10[para05]!/3:4)', epubcfi('/6/4[chap01ref]!/4[body01]/10[para05],!/2/1:1,!/3:4').to_s
94
+ end
95
+
96
+ def test_to_fragment
97
+ cfi = '/6/4[chap01ref]!/4[body01]/10[para05],/2/1:1,/3:4'
98
+ assert_equal 'epubcfi(' + cfi + ')', epubcfi('/6/4[chap01ref]!/4[body01]/10[para05],/2/1:1,/3:4').to_fragment
99
+ end
100
+
101
+ def test_cover
102
+ assert_true epubcfi('/6/4[chap01ref]!/4[body01]/10[para05],/2/1:1,/3:4').cover? epubcfi('/6/4[chap01ref]!/4[body01]/10[para05]/2/2/4')
103
+ end
104
+ end
105
+
106
+ class TestStep < self
107
+ def test_to_s
108
+ assert_equal '/6', EPUB::CFI::Step.new(6).to_s
109
+ assert_equal '/4[id]', EPUB::CFI::Step.new(4, EPUB::CFI::IDAssertion.new('id')).to_s
110
+ end
111
+
112
+ def test_compare
113
+ assert_equal 0, EPUB::CFI::Step.new(6) <=> EPUB::CFI::Step.new(6, 'assertion')
114
+ assert_equal -1, EPUB::CFI::Step.new(6) <=> EPUB::CFI::Step.new(7)
115
+ end
116
+ end
117
+
118
+ class TestIDAssertion < self
119
+ def test_to_s
120
+ assert_equal '[id]', EPUB::CFI::IDAssertion.new('id').to_s
121
+ assert_equal '[id;p=a]', EPUB::CFI::IDAssertion.new('id', {'p' => ['a']}).to_s
122
+ end
123
+ end
124
+
125
+ class TestTextLocationAssertion < self
126
+ def test_to_s
127
+ assert_equal '[yyy]', EPUB::CFI::TextLocationAssertion.new('yyy').to_s
128
+ assert_equal '[xx,y]', EPUB::CFI::TextLocationAssertion.new('xx', 'y').to_s
129
+ assert_equal '[,y]', EPUB::CFI::TextLocationAssertion.new(nil, 'y').to_s
130
+ assert_equal '[;s=b]', EPUB::CFI::TextLocationAssertion.new(nil, nil, {'s' => ['b']}).to_s
131
+ assert_equal '[yyy;s=b]', EPUB::CFI::TextLocationAssertion.new('yyy', nil, {'s' => ['b']}).to_s
132
+ end
133
+ end
134
+
135
+ class TestCharacterOffset < self
136
+ def test_to_s
137
+ assert_equal ':1', EPUB::CFI::CharacterOffset.new(1).to_s
138
+ assert_equal ':2[yyy]', EPUB::CFI::CharacterOffset.new(2, EPUB::CFI::TextLocationAssertion.new('yyy')).to_s
139
+ end
140
+
141
+ def test_compare
142
+ assert_equal 0,
143
+ EPUB::CFI::CharacterOffset.new(3) <=>
144
+ EPUB::CFI::CharacterOffset.new(3, EPUB::CFI::TextLocationAssertion.new('yyy'))
145
+ assert_equal -1,
146
+ EPUB::CFI::CharacterOffset.new(4) <=>
147
+ EPUB::CFI::CharacterOffset.new(5)
148
+ assert_equal 1,
149
+ EPUB::CFI::CharacterOffset.new(4, EPUB::CFI::TextLocationAssertion.new(nil, 'xx')) <=>
150
+ EPUB::CFI::CharacterOffset.new(2)
151
+ end
152
+ end
153
+
154
+ class TestSpatialOffset < self
155
+ def test_to_s
156
+ assert_equal '@0.5:30.2', EPUB::CFI::TemporalSpatialOffset.new(nil, 0.5, 30.2).to_s
157
+ assert_equal '@0:100', EPUB::CFI::TemporalSpatialOffset.new(nil, 0, 100).to_s
158
+ assert_equal '@50:50.0', EPUB::CFI::TemporalSpatialOffset.new(nil, 50, 50.0).to_s
159
+ end
160
+
161
+ def test_compare
162
+ assert_equal 0,
163
+ EPUB::CFI::TemporalSpatialOffset.new(nil, 30, 40) <=>
164
+ EPUB::CFI::TemporalSpatialOffset.new(nil, 30, 40)
165
+ assert_equal 1,
166
+ EPUB::CFI::TemporalSpatialOffset.new(nil, 30, 40) <=>
167
+ EPUB::CFI::TemporalSpatialOffset.new(nil, 40, 30)
168
+ end
169
+ end
170
+
171
+ class TestTemporalOffset < self
172
+ def test_to_s
173
+ assert_equal '~23.5', EPUB::CFI::TemporalSpatialOffset.new(23.5).to_s
174
+ end
175
+
176
+ def test_compare
177
+ assert_equal 0,
178
+ EPUB::CFI::TemporalSpatialOffset.new(23.5) <=>
179
+ EPUB::CFI::TemporalSpatialOffset.new(23.5)
180
+ assert_equal -1,
181
+ EPUB::CFI::TemporalSpatialOffset.new(23) <=>
182
+ EPUB::CFI::TemporalSpatialOffset.new(23.5)
183
+ end
184
+ end
185
+
186
+ class TestTemporalSpatialOffset < self
187
+ def test_to_s
188
+ assert_equal '~23.5@50:30.0', EPUB::CFI::TemporalSpatialOffset.new(23.5, 50, 30.0).to_s
189
+ end
190
+
191
+ def test_compare
192
+ assert_equal 0,
193
+ EPUB::CFI::TemporalSpatialOffset.new(23.5, 30, 40) <=>
194
+ EPUB::CFI::TemporalSpatialOffset.new(23.5, 30, 40.0)
195
+ assert_equal 1,
196
+ EPUB::CFI::TemporalSpatialOffset.new(23.5, 30, 40) <=>
197
+ EPUB::CFI::TemporalSpatialOffset.new(23.5)
198
+ assert_equal -1,
199
+ EPUB::CFI::TemporalSpatialOffset.new(nil, 30, 40) <=>
200
+ EPUB::CFI::TemporalSpatialOffset.new(23.5, 30, 40)
201
+ assert_equal -1,
202
+ EPUB::CFI::TemporalSpatialOffset.new(23.5, 30, 40) <=>
203
+ EPUB::CFI::TemporalSpatialOffset.new(23.5, 30, 50)
204
+ assert_equal 1,
205
+ EPUB::CFI::TemporalSpatialOffset.new(24, 30, 40) <=>
206
+ EPUB::CFI::TemporalSpatialOffset.new(23.5, 100, 100)
207
+ end
208
+ end
209
+
210
+ private
211
+
212
+ def epubcfi(string)
213
+ EPUB::Parser::CFI.new.parse(string)
214
+ end
215
+
216
+ def assert_equal_node(expected, actual, message='')
217
+ diff = AssertionMessage.delayed_diff(expected.to_s, actual.to_s)
218
+ message = build_message(message, <<EOT, expected, actual, diff)
219
+ <?>
220
+ expected but was
221
+ <?>.?
222
+ EOT
223
+ assert_block message do
224
+ expected.tdiff_equal actual
225
+ end
226
+ end
227
+ end
@@ -65,7 +65,7 @@ class TestContentDocument < Test::Unit::TestCase
65
65
  item = EPUB::Publication::Package::Manifest::Item.new
66
66
  item.media_type = 'application/xhtml+xml'
67
67
  item.properties = %w[nav]
68
- item.href = Addressable::URI.parse('nav.xhtml')
68
+ item.href = 'nav.xhtml'
69
69
  stub(item).read {File.read(File.expand_path('../fixtures/book/OPS/nav.xhtml', __FILE__))}
70
70
  manifest << item
71
71
  nav_doc = EPUB::Parser::ContentDocument.new(item).parse
@@ -53,13 +53,13 @@ class TestOCFPhysicalContainer < Test::Unit::TestCase
53
53
  end
54
54
  end
55
55
 
56
- class TestFile < self
56
+ class TestUnpackedDirectory < self
57
57
  include ConcreteContainer
58
58
 
59
59
  def setup
60
60
  super
61
61
  @container_path = @container_path[0..-'.epub'.length-1]
62
- @class = EPUB::OCF::PhysicalContainer::File
62
+ @class = EPUB::OCF::PhysicalContainer::UnpackedDirectory
63
63
  @container = @class.new(@container_path)
64
64
  end
65
65
 
@@ -29,7 +29,7 @@ class TestParser < Test::Unit::TestCase
29
29
  def test_parse_from_file_system
30
30
  adapter = EPUB::OCF::PhysicalContainer.adapter
31
31
  begin
32
- EPUB::OCF::PhysicalContainer.adapter = :File
32
+ EPUB::OCF::PhysicalContainer.adapter = :UnpackedDirectory
33
33
  epub = EPUB::Parser.parse('test/fixtures/book')
34
34
  assert_instance_of EPUB::Book, epub
35
35
  assert_equal 'Mon premier guide de cuisson, un Mémoire', epub.main_title
@@ -39,11 +39,11 @@ class TestParser < Test::Unit::TestCase
39
39
  end
40
40
 
41
41
  def test_can_specify_container_adapter_when_parsing_individually
42
- epub = EPUB::Parser.parse('test/fixtures/book', container_adapter: :File)
42
+ epub = EPUB::Parser.parse('test/fixtures/book', container_adapter: :UnpackedDirectory)
43
43
 
44
44
  assert_equal 'Mon premier guide de cuisson, un Mémoire', epub.main_title
45
45
  assert_equal File.read('test/fixtures/book/OPS/nav.xhtml'), epub.nav.read
46
- assert_equal EPUB::OCF::PhysicalContainer::File, epub.container_adapter
46
+ assert_equal EPUB::OCF::PhysicalContainer::UnpackedDirectory, epub.container_adapter
47
47
  assert_equal EPUB::OCF::PhysicalContainer::Zipruby, EPUB::OCF::PhysicalContainer.adapter
48
48
  end
49
49
 
@@ -0,0 +1,38 @@
1
+ # coding: utf-8
2
+ require_relative 'helper'
3
+ require 'epub/parser/cfi'
4
+
5
+ class TestParserCFI < Test::Unit::TestCase
6
+ def setup
7
+ @parser = EPUB::Parser::CFI.new(debug: true)
8
+ end
9
+
10
+ # from http://www.idpf.org/epub/linking/cfi/epub-cfi.html
11
+ data([
12
+ 'epubcfi(/6/14[chap05ref]!/4[body01]/10/2/1:3[2^[1^]])',
13
+ 'epubcfi(/6/4!/4/10/2/1:3[Ф-"spa ce"-99%-aa^[bb^]^^])',
14
+ 'epubcfi(/6/4!/4/10/2/1:3[Ф-"spa%20ce"-99%25-aa^[bb^]^^])',
15
+ 'epubcfi(/6/4!/4/10/2/1:3[%d0%a4-"spa%20ce"-99%25-aa^[bb^]^^])',
16
+ 'epubcfi(/6/4[chap01ref]!/4[body01]/10[para05]/2/1:3[yyy])',
17
+ 'epubcfi(/6/4[chap01ref]!/4[body01]/10[para05]/1:3[xx,y])',
18
+ 'epubcfi(/6/4[chap01ref]!/4[body01]/10[para05]/2/1:3[,y])',
19
+ 'epubcfi(/6/4[chap01ref]!/4[body01]/10[para05]/2/1:3[;s=b])',
20
+ 'epubcfi(/6/4[chap01ref]!/4[body01]/10[para05]/2/1:3[yyy;s=b])',
21
+ 'epubcfi(/6/4[chap01ref]!/4[body01]/10[para05]/2[;s=b])',
22
+ 'epubcfi(/6/4[chap01ref]!/4[body01]/10[para05]/3:10)',
23
+ 'epubcfi(/6/4[chap01ref]!/4[body01]/16[svgimg])',
24
+ 'epubcfi(/6/4[chap01ref]!/4[body01]/10[para05]/1:0)',
25
+ 'epubcfi(/6/4[chap01ref]!/4[body01]/10[para05]/2/1:0)',
26
+ 'epubcfi(/6/4[chap01ref]!/4[body01]/10[para05]/2/1:3)',
27
+ 'epubcfi(/6/4[chap01ref]!/4[body01]/10[para05],/2/1:1,/3:4)',
28
+ 'epubcfi(/6,:1,:3)'
29
+ ].reduce({}) {|data, cfi|
30
+ data[cfi] = cfi
31
+ data
32
+ })
33
+ def test_raise_no_error_on_parsing_valid_cfi(cfi)
34
+ assert_nothing_raised do
35
+ @parser.parse(cfi)
36
+ end
37
+ end
38
+ end
@@ -7,7 +7,7 @@ class TestParserContentDocument < Test::Unit::TestCase
7
7
  %w[item-1.xhtml item-2.xhtml nav.xhtml].each.with_index do |href, index|
8
8
  item = EPUB::Publication::Package::Manifest::Item.new
9
9
  item.id = index
10
- item.href = Addressable::URI.parse(href)
10
+ item.href = href
11
11
  @manifest << item
12
12
  end
13
13
 
@@ -280,19 +280,27 @@ class TestPublication < Test::Unit::TestCase
280
280
 
281
281
  def test_find_item_by_relative_iri_returns_item_which_has_resolved_iri_as_href
282
282
  manifest = Package::Manifest.new
283
- manifest << xhtml_item = Package::Manifest::Item.new.tap {|item| item.href = Addressable::URI.parse('text/01.xhtml')}
284
- manifest << image_item = Package::Manifest::Item.new.tap {|item| item.href = Addressable::URI.parse('image/01.png')}
283
+ manifest << xhtml_item = Package::Manifest::Item.new.tap {|item| item.href = 'text/01.xhtml'}
284
+ manifest << image_item = Package::Manifest::Item.new.tap {|item| item.href = 'image/01.png'}
285
285
 
286
286
  assert_equal image_item, xhtml_item.find_item_by_relative_iri(Addressable::URI.parse('../image/01.png'))
287
287
  end
288
288
 
289
289
  def test_find_item_by_relative_iri_returns_nil_when_no_item_found
290
290
  manifest = Package::Manifest.new
291
- manifest << xhtml_item = Package::Manifest::Item.new.tap {|item| item.href = Addressable::URI.parse('text/01.xhtml')}
291
+ manifest << xhtml_item = Package::Manifest::Item.new.tap {|item| item.href = 'text/01.xhtml'}
292
292
 
293
293
  assert_nil xhtml_item.find_item_by_relative_iri(Addressable::URI.parse('../image/01.png'))
294
294
  end
295
295
 
296
+ def test_find_item_by_relative_iri_raises_error_when_iri_starts_with_slash
297
+ item = Package::Manifest::Item.new
298
+
299
+ assert_raise ArgumentError do
300
+ item.find_item_by_relative_iri Addressable::URI.parse('/starting/with/slash')
301
+ end
302
+ end
303
+
296
304
  data('UTF-8' => [Encoding::UTF_8, 'utf-8-encoded'],
297
305
  'EUC-JP' => [Encoding::EUC_JP, 'euc-jp-encoded'],
298
306
  'Shift-JIS' => [Encoding::Shift_JIS, 'shift_jis-encoded'])
@@ -305,7 +313,7 @@ class TestPublication < Test::Unit::TestCase
305
313
 
306
314
  def test_entry_name_returns_normalized_iri
307
315
  item = Package::Manifest::Item.new
308
- item.href = Addressable::URI.parse('../style.css')
316
+ item.href = '../style.css'
309
317
  obj = Object.new
310
318
  stub(item).manifest {obj}
311
319
  stub(obj).package {obj}
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.2.2
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - KITAITI Makoto
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-07-04 00:00:00.000000000 Z
11
+ date: 2015-12-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -179,7 +179,7 @@ dependencies:
179
179
  - !ruby/object:Gem::Version
180
180
  version: '0'
181
181
  - !ruby/object:Gem::Dependency
182
- name: aruba
182
+ name: racc
183
183
  requirement: !ruby/object:Gem::Requirement
184
184
  requirements:
185
185
  - - ">="
@@ -193,13 +193,13 @@ dependencies:
193
193
  - !ruby/object:Gem::Version
194
194
  version: '0'
195
195
  - !ruby/object:Gem::Dependency
196
- name: zipruby
196
+ name: nokogiri-diff
197
197
  requirement: !ruby/object:Gem::Requirement
198
198
  requirements:
199
199
  - - ">="
200
200
  - !ruby/object:Gem::Version
201
201
  version: '0'
202
- type: :runtime
202
+ type: :development
203
203
  prerelease: false
204
204
  version_requirements: !ruby/object:Gem::Requirement
205
205
  requirements:
@@ -207,33 +207,33 @@ dependencies:
207
207
  - !ruby/object:Gem::Version
208
208
  version: '0'
209
209
  - !ruby/object:Gem::Dependency
210
- name: nokogiri
210
+ name: zipruby
211
211
  requirement: !ruby/object:Gem::Requirement
212
212
  requirements:
213
- - - "~>"
213
+ - - ">="
214
214
  - !ruby/object:Gem::Version
215
- version: '1.6'
215
+ version: '0'
216
216
  type: :runtime
217
217
  prerelease: false
218
218
  version_requirements: !ruby/object:Gem::Requirement
219
219
  requirements:
220
- - - "~>"
220
+ - - ">="
221
221
  - !ruby/object:Gem::Version
222
- version: '1.6'
222
+ version: '0'
223
223
  - !ruby/object:Gem::Dependency
224
- name: nokogumbo
224
+ name: nokogiri
225
225
  requirement: !ruby/object:Gem::Requirement
226
226
  requirements:
227
- - - ">="
227
+ - - "~>"
228
228
  - !ruby/object:Gem::Version
229
- version: '0'
229
+ version: '1.6'
230
230
  type: :runtime
231
231
  prerelease: false
232
232
  version_requirements: !ruby/object:Gem::Requirement
233
233
  requirements:
234
- - - ">="
234
+ - - "~>"
235
235
  - !ruby/object:Gem::Version
236
- version: '0'
236
+ version: '1.6'
237
237
  - !ruby/object:Gem::Dependency
238
238
  name: addressable
239
239
  requirement: !ruby/object:Gem::Requirement
@@ -295,12 +295,10 @@ files:
295
295
  - docs/UnpackedArchive.markdown
296
296
  - epub-parser.gemspec
297
297
  - examples/aggregate-contents-from-web.rb
298
- - features/epubinfo.feature
299
- - features/step_definitions/epubinfo_steps.rb
300
- - features/support/env.rb
301
298
  - lib/epub.rb
302
299
  - lib/epub/book.rb
303
300
  - lib/epub/book/features.rb
301
+ - lib/epub/cfi.rb
304
302
  - lib/epub/constants.rb
305
303
  - lib/epub/content_document.rb
306
304
  - lib/epub/content_document/navigation.rb
@@ -313,12 +311,15 @@ files:
313
311
  - lib/epub/ocf/metadata.rb
314
312
  - lib/epub/ocf/physical_container.rb
315
313
  - lib/epub/ocf/physical_container/archive_zip.rb
316
- - lib/epub/ocf/physical_container/file.rb
314
+ - lib/epub/ocf/physical_container/unpacked_directory.rb
317
315
  - lib/epub/ocf/physical_container/unpacked_uri.rb
318
316
  - lib/epub/ocf/physical_container/zipruby.rb
319
317
  - lib/epub/ocf/rights.rb
320
318
  - lib/epub/ocf/signatures.rb
321
319
  - lib/epub/parser.rb
320
+ - lib/epub/parser/cfi.rb
321
+ - lib/epub/parser/cfi.tab.rb
322
+ - lib/epub/parser/cfi.y
322
323
  - lib/epub/parser/content_document.rb
323
324
  - lib/epub/parser/ocf.rb
324
325
  - lib/epub/parser/publication.rb
@@ -354,12 +355,14 @@ files:
354
355
  - test/fixtures/book/OPS/日本語.xhtml
355
356
  - test/fixtures/book/mimetype
356
357
  - test/helper.rb
358
+ - test/test_cfi.rb
357
359
  - test/test_content_document.rb
358
360
  - test/test_epub.rb
359
361
  - test/test_fixed_layout.rb
360
362
  - test/test_inspect.rb
361
363
  - test/test_ocf_physical_container.rb
362
364
  - test/test_parser.rb
365
+ - test/test_parser_cfi.rb
363
366
  - test/test_parser_content_document.rb
364
367
  - test/test_parser_fixed_layout.rb
365
368
  - test/test_parser_ocf.rb
@@ -386,21 +389,20 @@ required_rubygems_version: !ruby/object:Gem::Requirement
386
389
  version: '0'
387
390
  requirements: []
388
391
  rubyforge_project:
389
- rubygems_version: 2.4.6
392
+ rubygems_version: 2.5.1
390
393
  signing_key:
391
394
  specification_version: 4
392
395
  summary: EPUB 3 Parser
393
396
  test_files:
394
- - features/epubinfo.feature
395
- - features/step_definitions/epubinfo_steps.rb
396
- - features/support/env.rb
397
397
  - test/helper.rb
398
+ - test/test_cfi.rb
398
399
  - test/test_content_document.rb
399
400
  - test/test_epub.rb
400
401
  - test/test_fixed_layout.rb
401
402
  - test/test_inspect.rb
402
403
  - test/test_ocf_physical_container.rb
403
404
  - test/test_parser.rb
405
+ - test/test_parser_cfi.rb
404
406
  - test/test_parser_content_document.rb
405
407
  - test/test_parser_fixed_layout.rb
406
408
  - test/test_parser_ocf.rb