vectory 0.6.0 → 0.7.1

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: 50efb043c71096f66bc72c7804b8707b6210ab4af071f231d7e81f52a0c66da0
4
- data.tar.gz: a3ffda2f587f7796f2033fab1230db852d98e82da88b269d230646dad6acbd39
3
+ metadata.gz: 208113512c63f1549e160d037bf418c61ce1495cd4475fc517adaa8f962fe5e3
4
+ data.tar.gz: bbabf9cb905e9c08706d350e476feba0f8403becd943910bf704edcf80cc2a21
5
5
  SHA512:
6
- metadata.gz: aca9af8bee9a5f916fc0360b9473705307bfeda4b0086ae9fa53929381169a4791a483a126f98f1295574da06d70a2ea92bf3a706cd7359f91fa6b492c305205
7
- data.tar.gz: '05286cb944c4235c5d60d5591b63be2d15c43f796fa0d63b00205ced005fe8c84f314c2d468fd5ec2a02336682d4b4c0357fd63bd6757056f95aa727ec8a3884'
6
+ metadata.gz: b7e5fd2ad0686242cc2c578e16f9456bf15fb95128e9ad26ee95a55cbee4a22edc06d4c8dc50a19f7c63954b2dff8ebfc99091a79e9099b8ac6aa4d574ab0b87
7
+ data.tar.gz: f25e2881b8d25b8ba3b9351fd7d613247e8489a9deeba557d9a3f259cb919b5e89beda150ae6069fc62d571d0acc55fd664456b6d9bfa935e254c033c749cb00
data/lib/vectory/cli.rb CHANGED
@@ -11,6 +11,7 @@ module Vectory
11
11
  STATUS_CONVERSION_ERROR = 4
12
12
  STATUS_SYSTEM_CALL_ERROR = 5
13
13
  STATUS_INKSCAPE_NOT_FOUND_ERROR = 6
14
+ STATUS_SAME_FORMAT_ERROR = 7
14
15
 
15
16
  MAP_ERROR_TO_STATUS = {
16
17
  Vectory::ConversionError => STATUS_CONVERSION_ERROR,
@@ -62,6 +63,10 @@ module Vectory
62
63
  end
63
64
 
64
65
  input_format = detect_input_format(file)
66
+ if same_format?(input_format, options[:format])
67
+ return same_format_error(options[:format])
68
+ end
69
+
65
70
  unless supported_input_format?(input_format)
66
71
  return unsupported_input_format_error
67
72
  end
@@ -93,6 +98,16 @@ module Vectory
93
98
  FileMagic.detect(file)
94
99
  end
95
100
 
101
+ def same_format?(input_format, output_format)
102
+ input_format.to_s == output_format
103
+ end
104
+
105
+ def same_format_error(format)
106
+ Vectory.ui.error("Could not convert to the same format '#{format}'.")
107
+
108
+ STATUS_SAME_FORMAT_ERROR
109
+ end
110
+
96
111
  def supported_input_format?(format)
97
112
  SupportedInputFormats.all.include?(format)
98
113
  end
@@ -0,0 +1,70 @@
1
+ require "image_size"
2
+
3
+ module Vectory
4
+ class ImageResize
5
+ def call(img, path, maxheight, maxwidth)
6
+ s, realsize = get_image_size(img, path)
7
+ img.name == "svg" && !img["viewBox"] && s[0] && s[1] and
8
+ img["viewBox"] = "0 0 #{s[0]} #{s[1]}"
9
+ s, skip = image_dont_resize(s, realsize)
10
+ skip and return s
11
+ s = image_size_fillin(s, realsize)
12
+ image_shrink(s, maxheight, maxwidth)
13
+ end
14
+
15
+ def get_image_size(img, path)
16
+ realsize = ImageSize.path(path).size
17
+ s = image_size_interpret(img, realsize || [nil, nil])
18
+ image_size_zeroes_complete(s, realsize)
19
+ end
20
+
21
+ private
22
+
23
+ def image_dont_resize(dim, realsize)
24
+ dim.nil? and return [[nil, nil], true]
25
+ realsize.nil? and return [dim, true]
26
+ dim[0] == nil && dim[1] == nil and return [dim, true]
27
+ [dim, false]
28
+ end
29
+
30
+ def image_size_fillin(dim, realsize)
31
+ dim[1] = fill_size(dim[1], dim[0], realsize[1], realsize[0])
32
+ dim[0] = fill_size(dim[0], dim[1], realsize[0], realsize[1])
33
+
34
+ dim
35
+ end
36
+
37
+ def fill_size(current, another, real_current, real_another)
38
+ return current unless current.zero? && !another.zero?
39
+
40
+ another * real_current / real_another
41
+ end
42
+
43
+ def image_shrink(dim, maxheight, maxwidth)
44
+ dim[1] > maxheight and
45
+ dim = [(dim[0] * maxheight / dim[1]).ceil, maxheight]
46
+ dim[0] > maxwidth and
47
+ dim = [maxwidth, (dim[1] * maxwidth / dim[0]).ceil]
48
+ dim
49
+ end
50
+
51
+ def image_size_interpret(img, realsize)
52
+ w = image_size_percent(img["width"], realsize[0])
53
+ h = image_size_percent(img["height"], realsize[1])
54
+ [w, h]
55
+ end
56
+
57
+ def image_size_percent(value, real)
58
+ /%$/.match?(value) && !real.nil? and
59
+ value = real * (value.sub(/%$/, "").to_f / 100)
60
+ value.to_i
61
+ end
62
+
63
+ def image_size_zeroes_complete(dim, realsize)
64
+ if dim[0].zero? && dim[1].zero?
65
+ dim = realsize
66
+ end
67
+ [dim, realsize]
68
+ end
69
+ end
70
+ end
data/lib/vectory/utils.rb CHANGED
@@ -19,7 +19,7 @@ module Vectory
19
19
  path = path_which_exist(uri, local_dir)
20
20
  path and return encode_datauri(path)
21
21
 
22
- warn "Image specified at `#{uri}` does not exist."
22
+ Vectory.ui.warn "Image specified at `#{uri}` does not exist."
23
23
  uri # Return original provided location
24
24
  end
25
25
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Vectory
4
- VERSION = "0.6.0"
4
+ VERSION = "0.7.1"
5
5
  end
data/lib/vectory.rb CHANGED
@@ -4,6 +4,7 @@ require "logger"
4
4
  require_relative "vectory/version"
5
5
  require_relative "vectory/utils"
6
6
  require_relative "vectory/image"
7
+ require_relative "vectory/image_resize"
7
8
  require_relative "vectory/datauri"
8
9
  require_relative "vectory/vector"
9
10
  require_relative "vectory/eps"
@@ -41,4 +42,8 @@ module Vectory
41
42
  def self.convert(image, format)
42
43
  image.convert(format)
43
44
  end
45
+
46
+ def self.image_resize(img, path, maxheight, maxwidth)
47
+ Vectory::ImageResize.new.call(img, path, maxheight, maxwidth)
48
+ end
44
49
  end
data/vectory.gemspec CHANGED
@@ -27,6 +27,7 @@ Gem::Specification.new do |spec|
27
27
  spec.required_ruby_version = ">= 2.5.0"
28
28
 
29
29
  spec.add_runtime_dependency "emf2svg"
30
+ spec.add_runtime_dependency "image_size", ">= 3.2.0"
30
31
  spec.add_runtime_dependency "marcel", "~> 1.0.0"
31
32
  spec.add_runtime_dependency "nokogiri", "~> 1.14"
32
33
  spec.add_runtime_dependency "thor", "~> 1.2.1"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vectory
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-01-04 00:00:00.000000000 Z
11
+ date: 2024-01-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: emf2svg
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: image_size
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 3.2.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 3.2.0
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: marcel
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -94,6 +108,7 @@ files:
94
108
  - lib/vectory/eps.rb
95
109
  - lib/vectory/file_magic.rb
96
110
  - lib/vectory/image.rb
111
+ - lib/vectory/image_resize.rb
97
112
  - lib/vectory/inkscape_converter.rb
98
113
  - lib/vectory/ps.rb
99
114
  - lib/vectory/svg.rb