asciidoctor-fb2 0.2.4 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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