libis-format 1.0.5 → 2.0.3

Sign up to get free protection for your applications and to get access to all the features.
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