distorted 0.5.7 → 0.6.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.
@@ -0,0 +1,4 @@
1
+ # Some of these custom MIME::Types will be just for DD, but
2
+ # I will submit some others of these to the mime-types-data project
3
+ # if and when it makes sense to do so. Here's how:
4
+ # https://github.com/mime-types/mime-types-data/blob/master/Contributing.md
@@ -0,0 +1,8 @@
1
+ # Define our own type to trigger Last Resort instead of abusing application/x-imagemap :)
2
+ - !ruby/object:MIME::Type
3
+ content-type: application/x.distorted.last-resort
4
+ encoding: 8bit
5
+ xrefs:
6
+ person:
7
+ - okeeblow
8
+ registered: false
@@ -0,0 +1,29 @@
1
+
2
+ # RFC8081 defines the top-level `font` media-type and includes
3
+ # definitions for font/ttf, font/otf, and font/collection,
4
+ # but neglects to include the OpenType Collection (.otc)
5
+ # file extension, meaning the IANA DB's font/collection
6
+ # only covers TTC and not OTC:
7
+ #
8
+ # https://tools.ietf.org/html/rfc8081#section-4.4.4
9
+ # "Type name: font
10
+ # Subtype name: collection
11
+ # Required parameters: None
12
+ # Optional parameters
13
+ # Name: outlines
14
+ # Values: a comma-separated subset of TTF, CFF, and SVG
15
+ #
16
+ # https://docs.microsoft.com/en-us/typography/opentype/spec/otff
17
+ # "OpenType fonts may have the extension .OTF, .TTF, .OTC or .TTC.
18
+ # The extensions .OTC and .TTC should only be used for font collection files."
19
+ - !ruby/object:MIME::Type
20
+ content-type: font/collection
21
+ encoding: base64
22
+ extensions:
23
+ - otc
24
+ xrefs:
25
+ template:
26
+ - font/collection
27
+ xref_urls:
28
+ - "https://docs.microsoft.com/en-us/typography/opentype/spec/otff#filenames"
29
+ registered: false
@@ -13,8 +13,10 @@
13
13
  # `/oooooooooooooo:`-+o+/. `+oo+o++++ooo+oooooo- `-+oo/` :oooooooooooooo/
14
14
  #
15
15
 
16
+ require_relative 'modular_technology/triple_counter'
17
+
16
18
  module Cooltrainer
17
19
  module DistorteD
18
- VERSION = '0.5.7'.freeze
20
+ VERSION = TripleCounter.new(0, 6, 0)
19
21
  end
20
22
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: distorted
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.7
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - okeeblow
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-07-28 00:00:00.000000000 Z
11
+ date: 2020-10-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: '3.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: ruby-filemagic
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '0.7'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '0.7'
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: ruby-vips
85
99
  requirement: !ruby/object:Gem::Requirement
@@ -185,19 +199,30 @@ files:
185
199
  - font/850/Profont/readme.txt
186
200
  - font/932/LICENSE/README-ttf.txt
187
201
  - font/932/mona.ttf
202
+ - lib/distorted/checking_you_out.rb
188
203
  - lib/distorted/error_code.rb
189
- - lib/distorted/font.rb
190
- - lib/distorted/image.rb
204
+ - lib/distorted/injection_of_love.rb
191
205
  - lib/distorted/modular_technology/pango.rb
206
+ - lib/distorted/modular_technology/triple_counter.rb
207
+ - lib/distorted/modular_technology/ttfunk.rb
208
+ - lib/distorted/modular_technology/vips.rb
209
+ - lib/distorted/modular_technology/vips_load.rb
210
+ - lib/distorted/modular_technology/vips_save.rb
211
+ - lib/distorted/molecule/C18H27NO3.rb
212
+ - lib/distorted/molecule/font.rb
213
+ - lib/distorted/molecule/image.rb
214
+ - lib/distorted/molecule/pdf.rb
215
+ - lib/distorted/molecule/svg.rb
216
+ - lib/distorted/molecule/text.rb
217
+ - lib/distorted/molecule/video.rb
192
218
  - lib/distorted/monkey_business/hash.rb
193
219
  - lib/distorted/monkey_business/mnemoniq.rb
194
220
  - lib/distorted/monkey_business/set.rb
195
221
  - lib/distorted/monkey_business/string.rb
196
- - lib/distorted/pdf.rb
197
- - lib/distorted/svg.rb
198
- - lib/distorted/text.rb
222
+ - lib/distorted/types/README
223
+ - lib/distorted/types/application.yaml
224
+ - lib/distorted/types/font.yaml
199
225
  - lib/distorted/version.rb
200
- - lib/distorted/video.rb
201
226
  - test/distorted_test.rb
202
227
  - test/test_helper.rb
203
228
  homepage: https://cooltrainer.org
@@ -1,121 +0,0 @@
1
- # Requiring libvips 8.8 for HEIC/HEIF (moo) support, `justify` support in the
2
- # Vips::Image text operator, animated WebP support, and more:
3
- # https://libvips.github.io/libvips/2019/04/22/What's-new-in-8.8.html
4
- VIPS_MINIMUM_VER = [8, 8, 0]
5
-
6
- # Tell the user to install the shared library if it's missing.
7
- begin
8
- require 'vips'
9
-
10
- we_good = false
11
- if Vips::version(0) >= VIPS_MINIMUM_VER[0]
12
- if Vips::version(1) >= VIPS_MINIMUM_VER[1]
13
- if Vips::version(2) >= VIPS_MINIMUM_VER[2]
14
- we_good = true
15
- end
16
- end
17
- end
18
- unless we_good
19
- raise LoadError.new("libvips is older than DistorteD's minimum requirement: needed #{VIPS_MINIMUM_VER.join('.'.freeze)} vs available '#{Vips::version_string}'")
20
- end
21
-
22
- rescue LoadError => le
23
- # Only match libvips.so load failure
24
- raise unless le.message =~ /libvips.so/
25
-
26
- # Multiple OS help
27
- help = <<~INSTALL
28
-
29
- Please install the libvips image processing library.
30
-
31
- FreeBSD:
32
- pkg install graphics/vips
33
-
34
- macOS:
35
- brew install vips
36
-
37
- Debian/Ubuntu/Mint:
38
- apt install libvips libvips-dev
39
- INSTALL
40
-
41
- # Re-raise with install message
42
- raise $!, "#{help}\n#{$!}", $!.backtrace
43
- end
44
-
45
- require 'set'
46
-
47
- require 'mime/types'
48
-
49
- module Cooltrainer
50
- module DistorteD
51
- class Image
52
-
53
- MEDIA_TYPE = 'image'.freeze
54
-
55
- # SVG support is a sub-class and not directly supported here:
56
- # `write_to_file': No known saver for '/home/okeeblow/Works/cooltrainer/_site/IIDX-turntable.svg'. (Vips::Error)
57
- MIME_TYPES = MIME::Types[/^#{MEDIA_TYPE}\/(?!svg)/, :complete => true].to_set
58
-
59
- # Attributes for our <picture>/<img>.
60
- # Automatically enabled as attrs for DD Liquid Tag.
61
- # https://developer.mozilla.org/en-US/docs/Web/HTML/Element/picture#Attributes
62
- # https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img#Attributes
63
- # https://developer.mozilla.org/en-US/docs/Web/Performance/Lazy_loading
64
- # :crop is a Vips-only attr
65
- ATTRS = Set[:alt, :caption, :href, :crop, :loading]
66
-
67
- # Defaults for HTML Element attributes.
68
- # Not every attr has to be listed here.
69
- # Many need no default and just won't render.
70
- ATTRS_DEFAULT = {
71
- :crop => :attention,
72
- :loading => :eager,
73
- }
74
- ATTRS_VALUES = {
75
- # https://www.rubydoc.info/gems/ruby-vips/Vips/Interesting
76
- :crop => Set[:none, :centre, :entropy, :attention],
77
- :loading => Set[:eager, :lazy],
78
- }
79
-
80
-
81
- def initialize(src)
82
- @image = Vips::Image.new_from_file(src)
83
- @src = src
84
- end
85
-
86
- def rotate(angle: nil)
87
- if angle == :auto
88
- @image = @image&.autorot
89
- end
90
- end
91
-
92
- def clean
93
- # Nuke the entire site from orbit. It's the only way to be sure.
94
- @image.get_fields.grep(/exif-ifd/).each {|field| @image.remove field}
95
- end
96
-
97
- def save(dest, width: nil, crop: nil)
98
- begin
99
- if width.nil? or width == :full
100
- return @image.write_to_file(dest)
101
- elsif width.respond_to?(:to_i)
102
- ver = @image.thumbnail_image(
103
- width.to_i,
104
- # Use `self` namespace for constants so subclasses can redefine
105
- **{:crop => crop || self.singleton_class.const_get(:ATTRS_DEFAULT)[:crop]},
106
- )
107
- return ver.write_to_file(dest)
108
- end
109
- rescue Vips::Error => v
110
- if v.message.include?('No known saver')
111
- # TODO: Handle missing output formats. Replacements? Skip it? Die?
112
- return nil
113
- else
114
- raise
115
- end
116
- end
117
- end # save
118
-
119
- end # Image
120
- end # DistorteD
121
- end # Cooltrainer
@@ -1,21 +0,0 @@
1
- require 'set'
2
-
3
- require 'mime/types'
4
- require 'svg_optimizer'
5
-
6
- module Cooltrainer
7
- module DistorteD
8
- class SVG < Image
9
-
10
- SUB_TYPE = 'svg'.freeze
11
-
12
- MIME_TYPES = MIME::Types[/^#{self::MEDIA_TYPE}\/#{self::SUB_TYPE}/, :complete => true].to_set
13
-
14
- def self.optimize(src, dest)
15
- # TODO: Make optimizations/plugins configurable
16
- SvgOptimizer.optimize_file(src, dest, SvgOptimizer::DEFAULT_PLUGINS)
17
- end
18
-
19
- end
20
- end
21
- end