asciidoctor-fb2 0.2.4 → 0.3.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: 10a3aff0401e84e1ad7ef6e5beb2cd823dacb368ccd5171326597eb72fadb355
4
- data.tar.gz: 0120b9bf29fbde68b6bdea2245bc903a27404da357f419116b07ba41c35e7742
3
+ metadata.gz: 2fe8aeff6fa259f44c96b2adcc9f2f2074e68b918f1dc4ec0d509691b34b67e4
4
+ data.tar.gz: 6ca94abe536faeeb639bea944ac21a90b6cabe6de42ad733fe7879148665441d
5
5
  SHA512:
6
- metadata.gz: 8e1d26f435621c97a0b0a62d2de350ad39fa6d4acac36bf6b5d15d330e881bd7dfd5bcf55cbeea8c4e76ac0cf996583ecf27931012427ee4e34b30f7a8f49d2b
7
- data.tar.gz: fbd79588f67f4295829c4b0012d5178dd292167c14be8d5294fe9fe514fa20073b2afd2fea6d2db8db99a58964fc59c1e9b7a505ebe7871b153dbb97d4ec10c0
6
+ metadata.gz: b18f5a752a529d7a13e7beb1cc30c097914d2696a39f1bfdb736a748b16ee2fcf32544a6fa6b5166b8611a524411a812acc4530550e366a19210dab66ac3cdd2
7
+ data.tar.gz: 8d6eee70a2a3bbaa328f8f2d9056cf4a25150b0bb6d398323d6ab509cb8a43489171c564492720b21acfda4b52bb0060867d11ad608a76371ba8cbf3565ced2a
@@ -7,6 +7,11 @@
7
7
  This document provides a high-level view of the changes to the {project-name} by release.
8
8
  For a detailed view of what has changed, refer to the {uri-project}/commits/master[commit history] on GitHub.
9
9
 
10
+ == 0.3.0 (2020-11-25) - @slonopotamus
11
+
12
+ * output MIME type for FB2 embedded binary files. https://github.com/slonopotamus/asciidoctor-fb2/issues/19[#19]
13
+ * handle `+image:file[]+` syntax for `+:front-cover-image:+` document attribute. https://github.com/slonopotamus/asciidoctor-fb2/issues/19[#19]
14
+
10
15
  == 0.2.4 (2020-11-24) - @slonopotamus
11
16
 
12
17
  * add support for table captions
@@ -20,10 +20,11 @@ Gem::Specification.new do |s|
20
20
 
21
21
  s.add_runtime_dependency 'asciidoctor', '~> 2.0'
22
22
  s.add_runtime_dependency 'fb2rb', '~> 0.4.0'
23
+ s.add_runtime_dependency 'mime-types', '~> 3.0'
23
24
 
24
25
  s.add_development_dependency 'asciidoctor-diagram', '~> 2.0'
25
26
  s.add_development_dependency 'rake', '~> 13.0'
26
27
  s.add_development_dependency 'rspec', '~> 3.10.0'
27
- s.add_development_dependency 'rubocop', '~> 0.93.0'
28
- s.add_development_dependency 'rubocop-rspec', '~> 1.44.0'
28
+ s.add_development_dependency 'rubocop', '~> 1.4.0'
29
+ s.add_development_dependency 'rubocop-rspec', '~> 2.0.0'
29
30
  end
@@ -3,6 +3,7 @@
3
3
  require 'asciidoctor'
4
4
  require 'asciidoctor/converter'
5
5
  require 'fb2rb'
6
+ require 'mime/types'
6
7
 
7
8
  module Asciidoctor
8
9
  module FB2
@@ -13,6 +14,7 @@ module Asciidoctor
13
14
  include ::Asciidoctor::Writer
14
15
 
15
16
  CSV_DELIMITER_REGEX = /\s*,\s*/.freeze
17
+ IMAGE_ATTRIBUTE_VALUE_RX = /^image:{1,2}(.*?)\[(.*?)\]$/.freeze
16
18
 
17
19
  register_for 'fb2'
18
20
 
@@ -62,8 +64,9 @@ module Asciidoctor
62
64
  title_info.date = document_info.date = fb2date
63
65
 
64
66
  unless (cover_image = node.attr('front-cover-image')).nil?
67
+ cover_image = Regexp.last_match(1) if cover_image =~ IMAGE_ATTRIBUTE_VALUE_RX
65
68
  cover_image_path = node.image_uri(cover_image)
66
- register_binary(node, cover_image_path)
69
+ register_binary(node, cover_image_path, 'image')
67
70
  title_info.coverpage = FB2rb::Coverpage.new([%(##{cover_image_path})])
68
71
  end
69
72
 
@@ -247,13 +250,13 @@ module Asciidoctor
247
250
 
248
251
  # @param node [Asciidoctor::Inline]
249
252
  def convert_inline_image(node)
250
- image_attrs = register_binary(node, node.image_uri(node.target))
253
+ image_attrs = register_binary(node, node.image_uri(node.target), 'image')
251
254
  %(<image #{image_attrs * ' '}/>)
252
255
  end
253
256
 
254
257
  # @param node [Asciidoctor::Block]
255
258
  def convert_image(node)
256
- image_attrs = register_binary(node, node.image_uri(node.attr('target')))
259
+ image_attrs = register_binary(node, node.image_uri(node.attr('target')), 'image')
257
260
  image_attrs << %(title="#{node.captioned_title}") if node.title?
258
261
  image_attrs << %(id="#{node.id}") if node.id
259
262
  %(<p><image #{image_attrs * ' '}/></p>)
@@ -266,9 +269,15 @@ module Asciidoctor
266
269
  doc
267
270
  end
268
271
 
272
+ def determine_mime_type(filename, media_type)
273
+ mime_types = MIME::Types.type_for(filename)
274
+ mime_types.delete_if { |x| x.media_type != media_type }
275
+ mime_types.empty? ? nil : mime_types[0].content_type
276
+ end
277
+
269
278
  # @param node [Asciidoctor::AbstractNode]
270
279
  # @param target [String]
271
- def register_binary(node, target) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
280
+ def register_binary(node, target, media_type) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
272
281
  unless Asciidoctor::Helpers.uriish?(target)
273
282
  out_dir = node.attr('outdir', nil, true) || doc_option(node.document, :to_dir)
274
283
  fs_path = File.join(out_dir, target)
@@ -282,7 +291,8 @@ module Asciidoctor
282
291
  target.sub!('/', '_')
283
292
  target.sub!('\\', '_')
284
293
 
285
- @book.add_binary(target, fs_path)
294
+ mime_type = determine_mime_type(target, media_type)
295
+ @book.add_binary(target, fs_path, mime_type)
286
296
  target = %(##{target})
287
297
  end
288
298
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Asciidoctor
4
4
  module FB2
5
- VERSION = '0.2.4'
5
+ VERSION = '0.3.0'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: asciidoctor-fb2
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marat Radchenko
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-11-24 00:00:00.000000000 Z
11
+ date: 2020-11-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: asciidoctor
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: 0.4.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: mime-types
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: asciidoctor-diagram
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -86,28 +100,28 @@ dependencies:
86
100
  requirements:
87
101
  - - "~>"
88
102
  - !ruby/object:Gem::Version
89
- version: 0.93.0
103
+ version: 1.4.0
90
104
  type: :development
91
105
  prerelease: false
92
106
  version_requirements: !ruby/object:Gem::Requirement
93
107
  requirements:
94
108
  - - "~>"
95
109
  - !ruby/object:Gem::Version
96
- version: 0.93.0
110
+ version: 1.4.0
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: rubocop-rspec
99
113
  requirement: !ruby/object:Gem::Requirement
100
114
  requirements:
101
115
  - - "~>"
102
116
  - !ruby/object:Gem::Version
103
- version: 1.44.0
117
+ version: 2.0.0
104
118
  type: :development
105
119
  prerelease: false
106
120
  version_requirements: !ruby/object:Gem::Requirement
107
121
  requirements:
108
122
  - - "~>"
109
123
  - !ruby/object:Gem::Version
110
- version: 1.44.0
124
+ version: 2.0.0
111
125
  description:
112
126
  email:
113
127
  - marat@slonopotamus.org