libis-format 1.0.5 → 2.0.3

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.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +5 -1
  3. data/.travis.yml +32 -24
  4. data/README.md +2 -2
  5. data/base/Dockerfile +24 -2
  6. data/base/Dockerfile.alpine +20 -0
  7. data/base/Dockerfile.rvm +56 -0
  8. data/base/rework_path +20 -0
  9. data/docker_cfg.yml +1 -0
  10. data/lib/libis/format.rb +12 -3
  11. data/lib/libis/format/cli/convert.rb +4 -4
  12. data/lib/libis/format/config.rb +16 -12
  13. data/lib/libis/format/converter/audio_converter.rb +2 -36
  14. data/lib/libis/format/converter/base.rb +22 -8
  15. data/lib/libis/format/converter/chain.rb +3 -3
  16. data/lib/libis/format/converter/image_assembler.rb +82 -0
  17. data/lib/libis/format/converter/image_converter.rb +20 -138
  18. data/lib/libis/format/converter/image_splitter.rb +84 -0
  19. data/lib/libis/format/converter/image_watermarker.rb +261 -0
  20. data/lib/libis/format/converter/jp2_converter.rb +1 -1
  21. data/lib/libis/format/converter/office_converter.rb +2 -2
  22. data/lib/libis/format/converter/pdf_assembler.rb +66 -0
  23. data/lib/libis/format/converter/pdf_converter.rb +6 -132
  24. data/lib/libis/format/converter/pdf_metadata.rb +82 -0
  25. data/lib/libis/format/converter/pdf_optimizer.rb +67 -0
  26. data/lib/libis/format/converter/pdf_protecter.rb +147 -0
  27. data/lib/libis/format/converter/pdf_selecter.rb +83 -0
  28. data/lib/libis/format/converter/pdf_splitter.rb +70 -0
  29. data/lib/libis/format/converter/pdf_watermarker_header.rb +71 -0
  30. data/lib/libis/format/converter/pdf_watermarker_image.rb +76 -0
  31. data/lib/libis/format/converter/pdf_watermarker_text.rb +93 -0
  32. data/lib/libis/format/converter/spreadsheet_converter.rb +2 -2
  33. data/lib/libis/format/converter/video_converter.rb +1 -1
  34. data/lib/libis/format/identifier.rb +3 -3
  35. data/lib/libis/format/info.rb +27 -0
  36. data/lib/libis/format/library.rb +147 -0
  37. data/lib/libis/format/tool.rb +4 -1
  38. data/lib/libis/format/tool/extension_identification.rb +4 -4
  39. data/lib/libis/format/tool/identification_tool.rb +6 -6
  40. data/lib/libis/format/tool/pdf_merge.rb +3 -3
  41. data/lib/libis/format/tool/{pdf_copy.rb → pdf_metadata.rb} +5 -5
  42. data/lib/libis/format/tool/pdf_protect.rb +47 -0
  43. data/lib/libis/format/tool/pdf_select.rb +47 -0
  44. data/lib/libis/format/tool/pdf_split.rb +4 -4
  45. data/lib/libis/format/tool/pdf_watermark.rb +47 -0
  46. data/lib/libis/format/tool/spreadsheet_to_ods.rb +1 -0
  47. data/lib/libis/format/version.rb +1 -1
  48. data/lib/libis/format/yaml_loader.rb +71 -0
  49. data/libis-format.gemspec +3 -2
  50. data/tools/PdfTool.jar +0 -0
  51. data/tools/bcpkix-jdk15on-167.jar +0 -0
  52. data/tools/bcprov-jdk15on-167.jar +0 -0
  53. metadata +32 -13
  54. data/lib/libis/format/type_database.rb +0 -134
  55. data/lib/libis/format/type_database_impl.rb +0 -120
  56. data/tools/bcpkix-jdk15on-1.49.jar +0 -0
  57. data/tools/bcprov-jdk15on-1.49.jar +0 -0
@@ -1,3 +1,4 @@
1
+ # noinspection RubyResolve
1
2
  require 'fileutils'
2
3
 
3
4
  require 'libis/tools/extend/string'
@@ -1,5 +1,5 @@
1
1
  module Libis
2
2
  module Format
3
- VERSION = '1.0.5'
3
+ VERSION = '2.0.3'
4
4
  end
5
5
  end
@@ -0,0 +1,71 @@
1
+ # frozen_string_literal: true
2
+ require 'yaml'
3
+ require 'singleton'
4
+
5
+ module Libis
6
+ module Format
7
+ class YamlLoader
8
+ # noinspection RubyResolve
9
+ include Singleton
10
+
11
+ def query(key, value)
12
+ case key.to_s.downcase.to_sym
13
+ when :name
14
+ return [database[value.to_s.upcase.to_sym]]
15
+ when :category
16
+ database.find_all { |_, info| info.category == value.to_s.upcase.to_sym }
17
+ when :puid
18
+ database.find_all { |_, info| info.puids.include?(value) }
19
+ when :mimetype
20
+ database.find_all { |_, info| info.mimetypes.include?(value) }
21
+ when :extension
22
+ database.find_all { |_, info| info.extensions.include?(value) }
23
+ else
24
+ return []
25
+ end.map(&:last)
26
+ end
27
+
28
+ def load_formats(file_or_hash)
29
+ hash = file_or_hash.is_a?(Hash) ? file_or_hash : YAML::load_file(file_or_hash)
30
+ hash.each do |category, format_list|
31
+ format_list.each do |format_name, format_info|
32
+ format_info.symbolize_keys!
33
+ format_name = format_name.to_sym
34
+ new_info = Libis::Format::Info.new(
35
+ name: format_name,
36
+ category: category.to_sym,
37
+ description: format_info[:NAME],
38
+ puids: format_info[:PUID]&.strip&.split(/[\s,]+/)&.map { |v| v.strip } || [],
39
+ mimetypes: format_info[:MIME]&.strip&.split(/[\s,]+/)&.map(&:strip) || [],
40
+ extensions: format_info[:EXTENSIONS]&.strip&.split(/[\s,]+/)&.map { |v| v.strip } || []
41
+ )
42
+ if (old_info = database[format_name])
43
+ new_info = Libis::Format::Info.new(
44
+ name: format_name,
45
+ category: category.to_sym,
46
+ description: new_info.description.blank? ? old_info.description : new_info.description,
47
+ puids: (old_info.puids + new_info.puids).uniq,
48
+ mimetypes: (old_info.mimetypes + new_info.mimetypes).uniq,
49
+ extensions: (old_info.extensions + new_info.extensions).uniq
50
+ )
51
+ end
52
+ database[format_name] = new_info
53
+ end
54
+ end
55
+
56
+ end
57
+
58
+ private
59
+
60
+ attr_reader :database
61
+
62
+ def initialize
63
+ @database = {}
64
+ format_database = Libis::Format::Config[:format_library_database]
65
+ load_formats(format_database)
66
+ end
67
+
68
+ end
69
+
70
+ end
71
+ end
data/libis-format.gemspec CHANGED
@@ -3,6 +3,7 @@
3
3
  lib = File.expand_path('../lib', __FILE__)
4
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
5
 
6
+ require 'bundler'
6
7
  require 'libis/format/version'
7
8
 
8
9
  Gem::Specification.new do |spec|
@@ -32,10 +33,10 @@ Gem::Specification.new do |spec|
32
33
  spec.add_development_dependency 'nokogiri'
33
34
  end
34
35
 
35
- spec.add_runtime_dependency 'libis-tools', '~> 1.0'
36
+ spec.add_runtime_dependency 'libis-tools', '>= 1.0.9'
36
37
  spec.add_runtime_dependency 'os', '= 0.9.6'
37
38
  spec.add_runtime_dependency 'mini_magick', '~> 4.3'
38
39
  spec.add_runtime_dependency 'deep_dive', '~> 0.3'
39
40
  spec.add_runtime_dependency 'chromaprint', '~> 0.0.2'
40
41
  spec.add_runtime_dependency 'naturally', '~> 2.1'
41
- end
42
+ end
data/tools/PdfTool.jar CHANGED
Binary file
Binary file
Binary file
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: libis-format
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.5
4
+ version: 2.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kris Dekeyser
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-02-01 00:00:00.000000000 Z
11
+ date: 2021-02-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -84,16 +84,16 @@ dependencies:
84
84
  name: libis-tools
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - "~>"
87
+ - - ">="
88
88
  - !ruby/object:Gem::Version
89
- version: '1.0'
89
+ version: 1.0.9
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - "~>"
94
+ - - ">="
95
95
  - !ruby/object:Gem::Version
96
- version: '1.0'
96
+ version: 1.0.9
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: os
99
99
  requirement: !ruby/object:Gem::Requirement
@@ -185,6 +185,9 @@ files:
185
185
  - README.md
186
186
  - Rakefile
187
187
  - base/Dockerfile
188
+ - base/Dockerfile.alpine
189
+ - base/Dockerfile.rvm
190
+ - base/rework_path
188
191
  - bin/droid
189
192
  - bin/fido
190
193
  - bin/formatinfo
@@ -197,6 +200,7 @@ files:
197
200
  - data/lias_formats.xml
198
201
  - data/types.yml
199
202
  - data/xlink.xsd
203
+ - docker_cfg.yml
200
204
  - lib/libis-format.rb
201
205
  - lib/libis/format.rb
202
206
  - lib/libis/format/cli/convert.rb
@@ -210,15 +214,29 @@ files:
210
214
  - lib/libis/format/converter/base.rb
211
215
  - lib/libis/format/converter/chain.rb
212
216
  - lib/libis/format/converter/fop_pdf_converter.rb
217
+ - lib/libis/format/converter/image_assembler.rb
213
218
  - lib/libis/format/converter/image_converter.rb
219
+ - lib/libis/format/converter/image_splitter.rb
220
+ - lib/libis/format/converter/image_watermarker.rb
214
221
  - lib/libis/format/converter/jp2_converter.rb
215
222
  - lib/libis/format/converter/office_converter.rb
223
+ - lib/libis/format/converter/pdf_assembler.rb
216
224
  - lib/libis/format/converter/pdf_converter.rb
225
+ - lib/libis/format/converter/pdf_metadata.rb
226
+ - lib/libis/format/converter/pdf_optimizer.rb
227
+ - lib/libis/format/converter/pdf_protecter.rb
228
+ - lib/libis/format/converter/pdf_selecter.rb
229
+ - lib/libis/format/converter/pdf_splitter.rb
230
+ - lib/libis/format/converter/pdf_watermarker_header.rb
231
+ - lib/libis/format/converter/pdf_watermarker_image.rb
232
+ - lib/libis/format/converter/pdf_watermarker_text.rb
217
233
  - lib/libis/format/converter/repository.rb
218
234
  - lib/libis/format/converter/spreadsheet_converter.rb
219
235
  - lib/libis/format/converter/video_converter.rb
220
236
  - lib/libis/format/converter/xslt_converter.rb
221
237
  - lib/libis/format/identifier.rb
238
+ - lib/libis/format/info.rb
239
+ - lib/libis/format/library.rb
222
240
  - lib/libis/format/tool.rb
223
241
  - lib/libis/format/tool/droid.rb
224
242
  - lib/libis/format/tool/extension_identification.rb
@@ -228,20 +246,22 @@ files:
228
246
  - lib/libis/format/tool/fop_pdf.rb
229
247
  - lib/libis/format/tool/identification_tool.rb
230
248
  - lib/libis/format/tool/office_to_pdf.rb
231
- - lib/libis/format/tool/pdf_copy.rb
232
249
  - lib/libis/format/tool/pdf_merge.rb
250
+ - lib/libis/format/tool/pdf_metadata.rb
233
251
  - lib/libis/format/tool/pdf_optimizer.rb
252
+ - lib/libis/format/tool/pdf_protect.rb
253
+ - lib/libis/format/tool/pdf_select.rb
234
254
  - lib/libis/format/tool/pdf_split.rb
235
255
  - lib/libis/format/tool/pdf_to_pdfa.rb
256
+ - lib/libis/format/tool/pdf_watermark.rb
236
257
  - lib/libis/format/tool/pdfa_validator.rb
237
258
  - lib/libis/format/tool/spreadsheet_to_ods.rb
238
- - lib/libis/format/type_database.rb
239
- - lib/libis/format/type_database_impl.rb
240
259
  - lib/libis/format/version.rb
260
+ - lib/libis/format/yaml_loader.rb
241
261
  - libis-format.gemspec
242
262
  - tools/PdfTool.jar
243
- - tools/bcpkix-jdk15on-1.49.jar
244
- - tools/bcprov-jdk15on-1.49.jar
263
+ - tools/bcpkix-jdk15on-167.jar
264
+ - tools/bcprov-jdk15on-167.jar
245
265
  - tools/fop/build/fop.jar
246
266
  - tools/fop/conf/fop.xconf
247
267
  - tools/fop/fop
@@ -313,8 +333,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
313
333
  - !ruby/object:Gem::Version
314
334
  version: '0'
315
335
  requirements: []
316
- rubyforge_project:
317
- rubygems_version: 2.7.6
336
+ rubygems_version: 3.1.4
318
337
  signing_key:
319
338
  specification_version: 4
320
339
  summary: LIBIS File format format services.
@@ -1,134 +0,0 @@
1
- # coding: utf-8
2
-
3
- require 'yaml'
4
-
5
- require 'backports/rails/hash'
6
-
7
- module Libis
8
- module Format
9
-
10
- # noinspection RubyClassVariableUsageInspection
11
- class TypeDatabase
12
- @implementation = Libis::Format::TypeDatabaseImpl.instance
13
-
14
- def self.implementation(impl)
15
- @implementation = impl
16
- end
17
-
18
- def self.enrich(info, map_keys = {})
19
- return {} unless info.is_a? Hash
20
- mapper = Hash.new {|hash,key| hash[key] = key}
21
- mapper.merge! map_keys
22
- unless (puid = info[mapper[:PUID]]).blank?
23
- info[mapper[:TYPE]] ||= puid_infos(puid).first[:TYPE] rescue nil
24
- end
25
- unless (mime = info[mapper[:MIME]]).blank?
26
- info[mapper[:TYPE]] ||= mime_infos(mime).first[:TYPE] rescue nil
27
- end
28
- unless (type_name = info[mapper[:TYPE]]).nil?
29
- mapper.keys.each do |key|
30
- info[mapper[key]] = get(type_name, key) || info[mapper[key]]
31
- end
32
- info[mapper[:GROUP]] = type_group(type_name)
33
- end
34
- info
35
- end
36
-
37
- def self.normalize(info, map_keys = {})
38
- return {} unless info.is_a? Hash
39
- mapper = Hash.new {|hash,key| hash[key] = key}
40
- mapper.merge! map_keys
41
- unless (puid = info[mapper[:PUID]]).blank?
42
- info[mapper[:TYPE]] ||= puid_infos(puid).first[:TYPE] rescue nil
43
- end
44
- unless (mime = info[mapper[:MIME]]).blank?
45
- info[mapper[:TYPE]] ||= mime_infos(mime).first[:TYPE] rescue nil
46
- end
47
- unless (type_name = info[mapper[:TYPE]]).nil?
48
- info[mapper[:MIME]] = type_mimetypes(type_name).first if type_mimetypes(type_name).first
49
- info[mapper[:GROUP]] = type_group(type_name)
50
- end
51
- info
52
- end
53
-
54
- def self.get(type_name, key)
55
- case key
56
- when :MIME
57
- type_mimetypes(type_name).first
58
- when :PUID
59
- type_puids(type_name).first
60
- when :EXTENSION
61
- type_extentions(type_name).first
62
- else
63
- typeinfo(type_name)[key]
64
- end
65
- end
66
-
67
- def self.type_group(t)
68
- typeinfo(t)[:GROUP]
69
- end
70
-
71
- def self.type_mimetypes(t)
72
- typeinfo(t)[:MIME] || []
73
- end
74
-
75
- def self.type_puids(t)
76
- typeinfo(t)[:PUID] || []
77
- end
78
-
79
- def self.type_extentions(t)
80
- typeinfo(t)[:EXTENSIONS] || []
81
- end
82
-
83
- def self.typeinfo(t)
84
- @implementation.typeinfo(t)
85
- end
86
-
87
- def self.group_types(group)
88
- @implementation.group_types(group)
89
- end
90
-
91
- def self.puid_infos(puid)
92
- @implementation.puid_infos(puid)
93
- end
94
-
95
- def self.puid_types(puid)
96
- @implementation.puid_types(puid)
97
- end
98
-
99
- def self.puid_groups(puid)
100
- puid_types(puid).map(&method(:type_group))
101
- end
102
-
103
- def self.mime_infos(mime)
104
- @implementation.mime_infos(mime)
105
- end
106
-
107
- def self.mime_types(mime)
108
- @implementation.mime_types(mime)
109
- end
110
-
111
- def self.mime_groups(mime)
112
- mime_types(mime).map(&method(:type_group))
113
- end
114
-
115
- def self.ext_infos(ext)
116
- @implementation.ext_infos(ext)
117
- end
118
-
119
- def self.ext_types(ext)
120
- @implementation.ext_types(ext)
121
- end
122
-
123
- def self.puid_typeinfo(puid)
124
- @implementation.puid_typeinfo(puid)
125
- end
126
-
127
- def self.known_mime?(mime)
128
- @implementation.known_mime?(mime)
129
- end
130
-
131
- end
132
-
133
- end
134
- end
@@ -1,120 +0,0 @@
1
- # coding: utf-8
2
-
3
- require 'singleton'
4
- require 'yaml'
5
-
6
- require 'backports/rails/hash'
7
- require 'libis/tools/logger'
8
- require 'libis/tools/extend/string'
9
-
10
- module Libis
11
- module Format
12
-
13
- class TypeDatabaseImpl
14
- include Singleton
15
- include ::Libis::Tools::Logger
16
-
17
- def typeinfo(t)
18
- @types[t.to_sym] || {}
19
- end
20
-
21
- def group_types(group)
22
- @types.select do |_, v|
23
- v[:GROUP] == group.to_sym
24
- end.keys
25
- end
26
-
27
- def puid_infos(puid)
28
- @types.select do |_, v|
29
- v[:PUID].include? puid rescue false
30
- end.values
31
- end
32
-
33
- def puid_types(puid)
34
- @types.select do |_, v|
35
- v[:PUID].include? puid rescue false
36
- end.keys
37
- end
38
-
39
- def mime_infos(mime)
40
- @types.select do |_, v|
41
- v[:MIME].include? mime rescue false
42
- end.values
43
- end
44
-
45
- def mime_types(mime)
46
- @types.select do |_, v|
47
- v[:MIME].include? mime rescue false
48
- end.keys
49
- end
50
-
51
- def ext_infos(ext)
52
- ext = ext.gsub /^\./, ''
53
- @types.select do |_, v|
54
- v[:EXTENSIONS].include?(ext) rescue false
55
- end.values
56
- end
57
-
58
- def ext_types(ext)
59
- ext = ext.gsub /^\./, ''
60
- @types.select do |_, v|
61
- v[:EXTENSIONS].include?(ext) rescue false
62
- end.keys
63
- end
64
-
65
- def puid_typeinfo(puid)
66
- @types.each do |_, v|
67
- return v if v[:PUID] and v[:PUID].include?(puid)
68
- end
69
- nil
70
- end
71
-
72
- def known_mime?(mime)
73
- @types.each do |_, v|
74
- return true if v[:MIME].include? mime
75
- end
76
- false
77
- end
78
-
79
- def load_types(file_or_hash = {}, append = true)
80
- hash = file_or_hash.is_a?(Hash) ? file_or_hash : YAML::load_file(file_or_hash)
81
- # noinspection RubyResolve
82
- hash.each do |group, type_info|
83
- type_info.each do |type_name, info|
84
- type_key = type_name.to_sym
85
- info.symbolize_keys!
86
- info[:TYPE] = type_key
87
- info[:GROUP] = group.to_sym
88
- info[:MIME] = info[:MIME].strip.split(/[\s,]+/).map(&:strip) rescue []
89
- info[:EXTENSIONS] = info[:EXTENSIONS].strip.split(/[\s,]+/).map { |v| v.strip } rescue []
90
- info[:PUID] = info[:PUID].strip.split(/[\s,]+/).map { |v| v.strip } if info[:PUID]
91
- if @types.has_key?(type_key)
92
- warn 'Type %s already defined; merging with info from %s.', type_name.to_s, file_or_hash
93
- info.merge!(@types[type_key]) do |_,v_new,v_old|
94
- case v_old
95
- when Array
96
- append ? v_old + v_new : v_new + v_old
97
- when Hash
98
- append ? v_new.merge(v_old) : v_old.merge(v_new)
99
- else
100
- append ? v_old : v_new
101
- end
102
- end
103
- end
104
- @types[type_key] = info
105
- end
106
- end
107
- end
108
-
109
- protected
110
-
111
- def initialize
112
- @types = Hash.new
113
- type_database = Libis::Format::Config[:type_database]
114
- load_types(type_database)
115
- end
116
-
117
- end
118
-
119
- end
120
- end