libis-format 1.0.1 → 2.0.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.
Files changed (222) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +3 -1
  3. data/.travis.yml +43 -25
  4. data/README.md +2 -2
  5. data/base/Dockerfile +35 -0
  6. data/base/Dockerfile.alpine +20 -0
  7. data/base/Dockerfile.rvm +56 -0
  8. data/base/rework_path +20 -0
  9. data/bin/libis_format +8 -0
  10. data/docker_cfg.yml +1 -0
  11. data/lib/libis/format.rb +5 -1
  12. data/lib/libis/format/cli/convert.rb +310 -0
  13. data/lib/libis/format/cli/format.rb +77 -0
  14. data/lib/libis/format/cli/prompt_helper.rb +87 -0
  15. data/lib/libis/format/cli/sub_command.rb +22 -0
  16. data/lib/libis/format/command_line.rb +25 -0
  17. data/lib/libis/format/config.rb +14 -10
  18. data/lib/libis/format/converter/audio_converter.rb +3 -37
  19. data/lib/libis/format/converter/base.rb +21 -8
  20. data/lib/libis/format/converter/chain.rb +3 -3
  21. data/lib/libis/format/converter/image_assembler.rb +82 -0
  22. data/lib/libis/format/converter/image_converter.rb +36 -134
  23. data/lib/libis/format/converter/image_splitter.rb +80 -0
  24. data/lib/libis/format/converter/image_watermarker.rb +261 -0
  25. data/lib/libis/format/converter/jp2_converter.rb +2 -2
  26. data/lib/libis/format/converter/office_converter.rb +2 -2
  27. data/lib/libis/format/converter/pdf_assembler.rb +66 -0
  28. data/lib/libis/format/converter/pdf_converter.rb +33 -89
  29. data/lib/libis/format/converter/pdf_optimizer.rb +70 -0
  30. data/lib/libis/format/converter/pdf_splitter.rb +65 -0
  31. data/lib/libis/format/converter/pdf_watermarker.rb +110 -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 +7 -7
  35. data/lib/libis/format/info.rb +27 -0
  36. data/lib/libis/format/library.rb +147 -0
  37. data/lib/libis/format/tool/droid.rb +2 -2
  38. data/lib/libis/format/tool/extension_identification.rb +4 -4
  39. data/lib/libis/format/tool/ffmpeg.rb +1 -1
  40. data/lib/libis/format/tool/fido.rb +1 -1
  41. data/lib/libis/format/tool/fop_pdf.rb +1 -1
  42. data/lib/libis/format/tool/identification_tool.rb +6 -6
  43. data/lib/libis/format/tool/office_to_pdf.rb +1 -1
  44. data/lib/libis/format/tool/pdf_copy.rb +1 -1
  45. data/lib/libis/format/tool/pdf_merge.rb +1 -1
  46. data/lib/libis/format/tool/pdf_split.rb +1 -1
  47. data/lib/libis/format/tool/pdf_to_pdfa.rb +1 -2
  48. data/lib/libis/format/tool/pdfa_validator.rb +3 -4
  49. data/lib/libis/format/tool/spreadsheet_to_ods.rb +2 -1
  50. data/lib/libis/format/version.rb +1 -1
  51. data/lib/libis/format/yaml_loader.rb +71 -0
  52. data/libis-format.gemspec +4 -4
  53. data/tools/fop/build/fop.jar +0 -0
  54. data/tools/fop/conf/fop.xconf +466 -0
  55. data/tools/fop/fop +258 -0
  56. data/tools/fop/fop.bat +75 -0
  57. data/tools/fop/fop.cmd +31 -0
  58. data/tools/fop/fop.js +341 -0
  59. data/tools/fop/lib/README.txt +243 -0
  60. data/tools/fop/lib/avalon-framework-api-4.3.1.jar +0 -0
  61. data/tools/fop/lib/avalon-framework-impl-4.3.1.jar +0 -0
  62. data/tools/fop/lib/avalon-framework.LICENSE.txt +175 -0
  63. data/tools/fop/lib/avalon-framework.NOTICE.TXT +11 -0
  64. data/tools/fop/lib/batik-all-1.10.jar +0 -0
  65. data/tools/fop/lib/batik.LICENSE.txt +201 -0
  66. data/tools/fop/lib/batik.NOTICE.txt +18 -0
  67. data/tools/fop/lib/commons-io-1.3.1.jar +0 -0
  68. data/tools/fop/lib/commons-io.LICENSE.txt +203 -0
  69. data/tools/fop/lib/commons-io.NOTICE.txt +6 -0
  70. data/tools/fop/lib/commons-logging-1.0.4.jar +0 -0
  71. data/tools/fop/lib/commons-logging.LICENSE.txt +202 -0
  72. data/tools/fop/lib/commons-logging.NOTICE.txt +3 -0
  73. data/tools/fop/lib/fontbox-2.0.7.jar +0 -0
  74. data/tools/fop/lib/serializer-2.7.2.jar +0 -0
  75. data/tools/fop/lib/serializer.LICENSE.txt +201 -0
  76. data/tools/fop/lib/serializer.NOTICE.txt +15 -0
  77. data/tools/fop/lib/xalan-2.7.2.jar +0 -0
  78. data/tools/fop/lib/xalan.BCEL.LICENSE.txt +52 -0
  79. data/tools/fop/lib/xalan.LICENSE.txt +202 -0
  80. data/tools/fop/lib/xalan.NOTICE.txt +44 -0
  81. data/tools/fop/lib/xalan.regexp.LICENSE.txt +52 -0
  82. data/tools/fop/lib/xalan.runtime.LICENSE.txt +20 -0
  83. data/tools/fop/lib/xerces.LICENSE.txt +56 -0
  84. data/tools/fop/lib/xercesImpl-2.9.1.jar +0 -0
  85. data/tools/fop/lib/xercesImpl.LICENSE.txt +201 -0
  86. data/tools/fop/lib/xercesImpl.NOTICE.txt +14 -0
  87. data/tools/fop/lib/xml-apis-1.3.04.jar +0 -0
  88. data/tools/fop/lib/xml-apis-ext-1.3.04.jar +0 -0
  89. data/tools/fop/lib/xml-apis-ext.LICENSE.dom-documentation.txt +73 -0
  90. data/tools/fop/lib/xml-apis-ext.LICENSE.dom-software.txt +61 -0
  91. data/tools/fop/lib/xml-apis-ext.LICENSE.sac.html +75 -0
  92. data/tools/fop/lib/xml-apis-ext.LICENSE.txt +202 -0
  93. data/tools/fop/lib/xml-apis-ext.NOTICE.txt +16 -0
  94. data/tools/fop/lib/xml-apis-ext.README.dom.txt +56 -0
  95. data/tools/fop/lib/xml-apis.LICENSE-SAX.html +17 -0
  96. data/tools/fop/lib/xml-apis.LICENSE.DOM-documentation.html +74 -0
  97. data/tools/fop/lib/xml-apis.LICENSE.DOM-software.html +66 -0
  98. data/tools/fop/lib/xml-apis.LICENSE.txt +201 -0
  99. data/tools/fop/lib/xml-apis.NOTICE.txt +13 -0
  100. data/tools/fop/lib/xmlgraphics-commons-2.3.jar +0 -0
  101. data/tools/fop/lib/xmlgraphics-commons.LICENSE.txt +202 -0
  102. data/tools/fop/lib/xmlgraphics-commons.NOTICE.txt +5 -0
  103. data/tools/pdfbox/pdfbox-app-2.0.13.jar +0 -0
  104. data/tools/pdfbox/{pdfbox-app-1.8.10.jar → preflight-app-2.0.13.jar} +0 -0
  105. metadata +78 -252
  106. data/lib/libis/format/type_database.rb +0 -201
  107. data/spec/converter_audio_spec.rb +0 -66
  108. data/spec/converter_fop_spec.rb +0 -37
  109. data/spec/converter_image_spec.rb +0 -166
  110. data/spec/converter_office_spec.rb +0 -84
  111. data/spec/converter_pdf_spec.rb +0 -30
  112. data/spec/converter_repository_spec.rb +0 -97
  113. data/spec/converter_spreadsheet_spec.rb +0 -39
  114. data/spec/converter_video_spec.rb +0 -97
  115. data/spec/converter_xsl_spec.rb +0 -56
  116. data/spec/data/Cevennes2.bmp +0 -0
  117. data/spec/data/Cevennes2.jp2 +0 -0
  118. data/spec/data/Cevennes2.ppm +0 -22492
  119. data/spec/data/NikonRaw-CameraRaw.TIF +0 -0
  120. data/spec/data/NikonRaw-CaptureOne.tif +0 -0
  121. data/spec/data/audio/carlin_disappointed.aac +0 -0
  122. data/spec/data/audio/carlin_disappointed.ac3 +0 -0
  123. data/spec/data/audio/carlin_disappointed.aiff +0 -0
  124. data/spec/data/audio/carlin_disappointed.au +0 -0
  125. data/spec/data/audio/carlin_disappointed.flac +0 -0
  126. data/spec/data/audio/carlin_disappointed.m4a +0 -0
  127. data/spec/data/audio/carlin_disappointed.mka +0 -0
  128. data/spec/data/audio/carlin_disappointed.mp3 +0 -0
  129. data/spec/data/audio/carlin_disappointed.ogg +0 -0
  130. data/spec/data/audio/carlin_disappointed.ra +0 -0
  131. data/spec/data/audio/carlin_disappointed.voc +0 -0
  132. data/spec/data/audio/carlin_disappointed.wav +0 -0
  133. data/spec/data/audio/carlin_disappointed.wma +0 -0
  134. data/spec/data/audio/greensleeves.aac +0 -0
  135. data/spec/data/audio/greensleeves.ac3 +0 -0
  136. data/spec/data/audio/greensleeves.aiff +0 -0
  137. data/spec/data/audio/greensleeves.au +0 -0
  138. data/spec/data/audio/greensleeves.flac +0 -0
  139. data/spec/data/audio/greensleeves.m4a +0 -0
  140. data/spec/data/audio/greensleeves.mka +0 -0
  141. data/spec/data/audio/greensleeves.mp3 +0 -0
  142. data/spec/data/audio/greensleeves.ogg +0 -0
  143. data/spec/data/audio/greensleeves.ra +0 -0
  144. data/spec/data/audio/greensleeves.voc +0 -0
  145. data/spec/data/audio/greensleeves.wav +0 -0
  146. data/spec/data/audio/greensleeves.wma +0 -0
  147. data/spec/data/audio/king_nonviolence.aac +0 -0
  148. data/spec/data/audio/king_nonviolence.ac3 +0 -0
  149. data/spec/data/audio/king_nonviolence.aiff +0 -0
  150. data/spec/data/audio/king_nonviolence.au +0 -0
  151. data/spec/data/audio/king_nonviolence.flac +0 -0
  152. data/spec/data/audio/king_nonviolence.m4a +0 -0
  153. data/spec/data/audio/king_nonviolence.mka +0 -0
  154. data/spec/data/audio/king_nonviolence.mp3 +0 -0
  155. data/spec/data/audio/king_nonviolence.ogg +0 -0
  156. data/spec/data/audio/king_nonviolence.ra +0 -0
  157. data/spec/data/audio/king_nonviolence.voc +0 -0
  158. data/spec/data/audio/king_nonviolence.wav +0 -0
  159. data/spec/data/audio/king_nonviolence.wma +0 -0
  160. data/spec/data/audio/top_gun_secret.aac +0 -0
  161. data/spec/data/audio/top_gun_secret.ac3 +0 -0
  162. data/spec/data/audio/top_gun_secret.aiff +0 -0
  163. data/spec/data/audio/top_gun_secret.au +0 -0
  164. data/spec/data/audio/top_gun_secret.flac +0 -0
  165. data/spec/data/audio/top_gun_secret.m4a +0 -0
  166. data/spec/data/audio/top_gun_secret.mka +0 -0
  167. data/spec/data/audio/top_gun_secret.mp3 +0 -0
  168. data/spec/data/audio/top_gun_secret.ogg +0 -0
  169. data/spec/data/audio/top_gun_secret.ra +0 -0
  170. data/spec/data/audio/top_gun_secret.voc +0 -0
  171. data/spec/data/audio/top_gun_secret.wav +0 -0
  172. data/spec/data/audio/top_gun_secret.wma +0 -0
  173. data/spec/data/multipage.tif +0 -0
  174. data/spec/data/multipage.tif.jp2 +0 -0
  175. data/spec/data/test-ead.xml +0 -392
  176. data/spec/data/test-jpg.tif +0 -0
  177. data/spec/data/test-lzw.tif +0 -0
  178. data/spec/data/test-options.jpg +0 -0
  179. data/spec/data/test-options.png +0 -0
  180. data/spec/data/test.bmp +0 -0
  181. data/spec/data/test.doc +0 -0
  182. data/spec/data/test.docx +0 -0
  183. data/spec/data/test.gif +0 -0
  184. data/spec/data/test.jpg +0 -0
  185. data/spec/data/test.ods +0 -0
  186. data/spec/data/test.odt +0 -0
  187. data/spec/data/test.pdf +0 -0
  188. data/spec/data/test.pdf.tif +0 -0
  189. data/spec/data/test.png +0 -0
  190. data/spec/data/test.ps +0 -8631
  191. data/spec/data/test.psd +0 -0
  192. data/spec/data/test.rtf +0 -1455
  193. data/spec/data/test.tif +0 -0
  194. data/spec/data/test.txt +0 -12
  195. data/spec/data/test.xcf +0 -0
  196. data/spec/data/test.xls +0 -0
  197. data/spec/data/test.xlsx +0 -0
  198. data/spec/data/test.xml +0 -4
  199. data/spec/data/test_pdfa.pdf +0 -0
  200. data/spec/data/video/SampleVideo_1080x720_2mb.flv +0 -0
  201. data/spec/data/video/SampleVideo_1080x720_2mb.mkv +0 -0
  202. data/spec/data/video/SampleVideo_1080x720_2mb.mp4 +0 -0
  203. data/spec/data/video/SampleVideo_176x144_2mb.3gp +0 -0
  204. data/spec/data/video/SampleVideo_320x240_2mb.3gp +0 -0
  205. data/spec/data/video/SampleVideo_360x240_2mb.flv +0 -0
  206. data/spec/data/video/SampleVideo_360x240_2mb.mkv +0 -0
  207. data/spec/data/video/SampleVideo_360x240_2mb.mp4 +0 -0
  208. data/spec/data/video/copyright.png +0 -0
  209. data/spec/data/xml/134476_ead.XML +0 -1
  210. data/spec/data/xml/134476_ead.pdf +0 -0
  211. data/spec/data/xml/134476_fo.XML +0 -383
  212. data/spec/data/xml/134476_raw.XML +0 -141
  213. data/spec/data/xml/ead2fo_pdf.xsl +0 -1453
  214. data/spec/data/xml/header_nolink_pdf.xsl +0 -120
  215. data/spec/data/xml/lookupLists.xsl +0 -488
  216. data/spec/data/xml/scope_eadToHTML.xsl +0 -2376
  217. data/spec/data/xml/scope_xmlToEAD_dom.xsl +0 -952
  218. data/spec/identifier_spec.rb +0 -161
  219. data/spec/spec_helper.rb +0 -58
  220. data/spec/test_types.yml +0 -12
  221. data/spec/type_database_spec.rb +0 -140
  222. data/tools/pdfbox/preflight-app-1.8.10.jar +0 -0
@@ -3,7 +3,7 @@
3
3
  require_relative 'base'
4
4
 
5
5
  require 'libis/format/tool/spreadsheet_to_ods'
6
- require 'libis/format/type_database'
6
+ require 'libis/format/library'
7
7
 
8
8
  module Libis
9
9
  module Format
@@ -20,7 +20,7 @@ module Libis
20
20
  end
21
21
 
22
22
  def self.output_types(format = nil)
23
- return [] unless input_types.include?(format)
23
+ return [] unless input_types.include?(format) if format
24
24
  [:OO_CALC]
25
25
  end
26
26
 
@@ -14,7 +14,7 @@ module Libis
14
14
  end
15
15
 
16
16
  def self.output_types(format = nil)
17
- return [] unless input_types.include?(format)
17
+ return [] unless input_types.include?(format) if format
18
18
  [:GIF, :WEBM, :MP4, :MPG, :MKV, :MJP2, :QTFF, :AVI, :OGGV, :WMV, :DV, :FLV, :SWF]
19
19
  end
20
20
 
@@ -9,7 +9,7 @@ require 'libis/tools/extend/string'
9
9
  require 'libis/tools/extend/empty'
10
10
  require 'nori/core_ext/object'
11
11
 
12
- require 'libis/format/type_database'
12
+ require 'libis/format/library'
13
13
 
14
14
  require_relative 'config'
15
15
  require_relative 'tool/fido'
@@ -42,10 +42,10 @@ module Libis
42
42
 
43
43
  def get(file, options = {})
44
44
 
45
- options[:droid] = true unless options.keys.include?(:droid) and options[:tool] and options[:tool] != :droid
46
- options[:fido] = true unless options.keys.include?(:fido) and options[:tool] and options[:tool] != :fido
47
- options[:file] = true unless options.keys.include?(:file) and options[:tool] and options[:tool] != :file
48
- options[:xml_validation] = true unless options.keys.include?(:xml_validation) and !options[:xml_validation]
45
+ options[:droid] = true unless options.keys.include?(:droid) or (options[:tool] and options[:tool] != :droid)
46
+ options[:fido] = true unless options.keys.include?(:fido) or (options[:tool] and options[:tool] != :fido)
47
+ options[:file] = true unless options.keys.include?(:file) or (options[:tool] and options[:tool] != :file)
48
+ options[:xml_validation] = true if options[:xml_validation].nil?
49
49
 
50
50
  result = {messages: [], output: {}, formats: {}}
51
51
 
@@ -132,7 +132,7 @@ module Libis
132
132
  if doc.validates_against?(xsd_file)
133
133
  log_msg result, :debug, "XML file validated against XML Schema: #{xsd_file}"
134
134
  info = {mimetype: mime, tool_raw: file_result[:tool], tool: :xsd_validation, match_type: 'xsd_validation', format_version: '', }
135
- file_result.merge! Libis::Format::TypeDatabase.enrich(info, PUID: :puid, MIME: :mimetype, NAME: :format_name)
135
+ file_result.merge! Libis::Format::Library.enrich(info, puid: :puid, mimetype: :mimetype, name: :format_name)
136
136
  end
137
137
  rescue => e
138
138
  # Do nothing - probably Nokogiri chrashed during validation. Could have many causes
@@ -208,7 +208,7 @@ module Libis
208
208
  end
209
209
 
210
210
  def get_mimetype(puid)
211
- ::Libis::Format::TypeDatabase.puid_typeinfo(puid)[:MIME].first rescue nil
211
+ ::Libis::Format::Library.get_field_by(:puid, puid, :mimetypes)
212
212
  end
213
213
 
214
214
  def get_best_result(results)
@@ -0,0 +1,27 @@
1
+ module Libis
2
+ module Format
3
+ class Info
4
+ attr_reader :name, :category, :description, :puids, :mimetypes, :extensions
5
+
6
+ def initialize(name:, category:, description: '', puids: [], mimetypes: [], extensions: [])
7
+ @name = name
8
+ @category = category
9
+ @description = description
10
+ @puids = puids
11
+ @mimetypes = mimetypes
12
+ @extensions = extensions
13
+ end
14
+
15
+ def to_hash
16
+ {
17
+ name: name,
18
+ description: description.dup,
19
+ category: category,
20
+ puids: puids.dup,
21
+ mimetypes: mimetypes.dup,
22
+ extensions: extensions.dup
23
+ }
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,147 @@
1
+ # froze_string_litteral: true
2
+ # coding: utf-8
3
+ require 'singleton'
4
+
5
+ module Libis
6
+ module Format
7
+
8
+ class Library
9
+ include Singleton
10
+
11
+ class << self
12
+ def implementation=(impl)
13
+ instance.implementation = impl
14
+ end
15
+
16
+ def get_info(format)
17
+ instance.get_info(format)
18
+ end
19
+
20
+ def get_info_by(key, value)
21
+ instance.get_info_by(key, value)
22
+ end
23
+
24
+ def get_infos_by(key, value)
25
+ instance.get_infos_by(key, value)
26
+ end
27
+
28
+ def get_field(format, field)
29
+ instance.get_field(format, field)
30
+ end
31
+
32
+ def get_field_by(key, value, field)
33
+ instance.get_field_by(key, value, field)
34
+ end
35
+
36
+ def get_fields_by(key, value, field)
37
+ instance.get_fields_by(key, value, field)
38
+ end
39
+
40
+ def known?(key, value)
41
+ instance.known?(key, value)
42
+ end
43
+
44
+ def enrich(info, map_keys = {})
45
+ instance.enrich(info, map_keys)
46
+ end
47
+
48
+ def normalize(info, map_keys = {})
49
+ instance.normalize(info, map_keys)
50
+ end
51
+ end
52
+
53
+ def implementation=(impl)
54
+ @implementation = impl
55
+ end
56
+
57
+ def get_field(format, field)
58
+ get_field_by(:name, format, field)
59
+ end
60
+
61
+ def get_field_by(key, value, field)
62
+ info = get_info_by(key, value)
63
+ return nil unless info
64
+ case field
65
+ when :mimetype
66
+ info[:mimetypes]&.first
67
+ when :puid
68
+ info[:puids]&.first
69
+ when :extension
70
+ info[:extensions]&.first
71
+ else
72
+ info[field]
73
+ end
74
+ end
75
+
76
+ def get_fields_by(key, value, field)
77
+ get_infos_by(key, value)&.map { |info| info[field] }.compact
78
+ end
79
+
80
+ def get_info(format)
81
+ get_info_by(:name, format)
82
+ end
83
+
84
+ def get_info_by(key, value)
85
+ get_infos_by(key, value)&.first
86
+ end
87
+
88
+ def get_infos_by(key, value)
89
+ result = @implementation.query(key, value)
90
+ result.map(&:to_hash)
91
+ end
92
+
93
+ def known?(key, value)
94
+ !get_info_by(key, value).nil?
95
+ end
96
+
97
+ def enrich(info, map_keys = {})
98
+ info = normalize(info, map_keys)
99
+ mapper = Hash.new { |hash, key| hash[key] = key }.merge(map_keys)
100
+ unless (format = info[mapper[:name]]).nil?
101
+ lib_info = get_info(format)
102
+ mapper.keys.each do |key|
103
+ case key
104
+ when :mimetype
105
+ info[mapper[key]] = lib_info[:mimetypes].first if lib_info[:mimetypes].first
106
+ when :puid
107
+ info[mapper[key]] = lib_info[:puids].first if lib_info[:puids].first
108
+ when :extension
109
+ info[mapper[key]] = lib_info[:extensions].first if lib_info[:extensions].first
110
+ else
111
+ info[mapper[key]] = lib_info[key] if lib_info[key]
112
+ end
113
+ end
114
+ end
115
+ info
116
+ end
117
+
118
+ # Derive name from the available info
119
+ def normalize(info, map_keys = {})
120
+ return {} unless info.is_a? Hash
121
+ mapper = Hash.new { |hash, key| hash[key] = key }.merge(map_keys)
122
+ # fill format from looking up by puid
123
+ unless (puid = info[mapper[:puid]]).blank?
124
+ info[mapper[:name]] ||= get_field_by(:puid, puid, :name)
125
+ end
126
+ # fill format from looking up by mimetype
127
+ unless (mime = info[mapper[:mimetype]]).blank?
128
+ info[mapper[:name]] ||= get_field_by(:mimetype, mime, :name)
129
+ end
130
+ # finally complete the information from looking up by format name
131
+ unless (format = info[mapper[:name]]).nil?
132
+ info[mapper[:mimetype]] = get_field(format, :mimetype)
133
+ info[mapper[:category]] = get_field(format, :category)
134
+ end
135
+ info
136
+ end
137
+
138
+ private
139
+
140
+ def initialize
141
+ @implementation = eval(Libis::Format::Config[:format_library_implementation])
142
+ end
143
+
144
+ end
145
+
146
+ end
147
+ end
@@ -76,7 +76,7 @@ module Libis
76
76
  ]
77
77
  timeout = Libis::Format::Config[:timeouts][:droid]
78
78
  result = Libis::Tools::Command.run(
79
- Libis::Format::Config[:droid_path], *args,
79
+ Libis::Format::Config[:droid_cmd], *args,
80
80
  timeout: timeout,
81
81
  kill_after: timeout * 2
82
82
  )
@@ -96,7 +96,7 @@ module Libis
96
96
  args << '-R' if recursive
97
97
  timeout = Libis::Format::Config[:timeouts][:droid]
98
98
  result = Libis::Tools::Command.run(
99
- Libis::Format::Config[:droid_path], *args,
99
+ Libis::Format::Config[:droid_cmd], *args,
100
100
  timeout: timeout,
101
101
  kill_after: timeout * 2
102
102
  )
@@ -37,14 +37,14 @@ module Libis
37
37
  def runner(*args)
38
38
 
39
39
  args.map do |file|
40
- info = ::Libis::Format::TypeDatabase.ext_infos(File.extname(file)).first
40
+ info = ::Libis::Format::Library.get_info_by(:extension, File.extname(file))
41
41
  if info
42
42
  {
43
43
  filepath: file,
44
- mimetype: (info[:MIME].first rescue nil),
45
- puid: (info[:PUID].first rescue nil),
44
+ mimetype: (info[:mimetypes].first rescue nil),
45
+ puid: (info[:puids].first rescue nil),
46
46
  matchtype: 'extension',
47
- tool: :type_database
47
+ tool: :format_library
48
48
  }
49
49
  end
50
50
  end.cleanup
@@ -28,7 +28,7 @@ module Libis
28
28
 
29
29
  timeout = Libis::Format::Config[:timeouts][:ffmpeg]
30
30
  result = Libis::Tools::Command.run(
31
- Libis::Format::Config[:ffmpeg_path], *opts,
31
+ Libis::Format::Config[:ffmpeg_cmd], *opts,
32
32
  timeout: timeout,
33
33
  kill_after: timeout * 2
34
34
  )
@@ -76,7 +76,7 @@ module Libis
76
76
  # Run command and capture results
77
77
  timeout = Libis::Format::Config[:timeouts][:fido]
78
78
  result = ::Libis::Tools::Command.run(
79
- Libis::Format::Config[:fido_path], *args,
79
+ Libis::Format::Config[:fido_cmd], *args,
80
80
  timeout: timeout,
81
81
  kill_after: timeout * 2
82
82
  )
@@ -25,7 +25,7 @@ module Libis
25
25
 
26
26
  timeout = Libis::Format::Config[:timeouts][:fop]
27
27
  result = Libis::Tools::Command.run(
28
- Libis::Format::Config[:java_path],
28
+ Libis::Format::Config[:java_cmd],
29
29
  "-Dfop.home=#{File.dirname(Libis::Format::Config[:fop_jar])}",
30
30
  '-jar', Libis::Format::Config[:fop_jar],
31
31
  '-fo', xml,
@@ -7,7 +7,7 @@ require 'libis/tools/logger'
7
7
  require 'libis/tools/command'
8
8
 
9
9
  require 'libis/format/config'
10
- require 'libis/format/type_database'
10
+ require 'libis/format/library'
11
11
 
12
12
  module Libis
13
13
  module Format
@@ -99,7 +99,7 @@ module Libis
99
99
  end
100
100
 
101
101
  # Normalize the mimetype
102
- Libis::Format::TypeDatabase.normalize(result, PUID: :puid, MIME: :mimetype)
102
+ Libis::Format::Library.normalize(result)
103
103
 
104
104
  # Default score is 5
105
105
  result[:score] = 5
@@ -117,14 +117,14 @@ module Libis
117
117
  # Signature match increases score with 2
118
118
  when 'signature'
119
119
  result[:score] += 2
120
- # typeinfo = ::Libis::Format::TypeDatabase.puid_typeinfo(result[:puid])
120
+ # typeinfo = ::Libis::Format::Library.get_info_by(:puid, result[:puid])
121
121
  # ext = File.extname(result[:filename])
122
122
  # result[:score] += 1 if typeinfo and typeinfo[:EXTENSIONS].include?(ext)
123
123
 
124
124
  # Container match increases score with 4
125
125
  when 'container'
126
126
  result[:score] += 4
127
- # typeinfo = ::Libis::Format::TypeDatabase.puid_typeinfo(result[:puid])
127
+ # typeinfo = ::Libis::Format::Library.get_info_by(:puid, result[:puid])
128
128
  # ext = File.extname(result[:filename])
129
129
  # result[:score] += 1 if typeinfo and typeinfo[:EXTENSIONS].include?(ext)
130
130
 
@@ -152,11 +152,11 @@ module Libis
152
152
  end
153
153
 
154
154
  def get_mimetype(puid)
155
- ::Libis::Format::TypeDatabase.puid_typeinfo(puid)[:MIME].first rescue nil
155
+ ::Libis::Format::Library.get_field_by(:puid, puid, :mimetype) rescue nil
156
156
  end
157
157
 
158
158
  def get_puid(mimetype)
159
- ::Libis::Format::TypeDatabase.mime_infos(mimetype).first[:PUID].first rescue nil
159
+ ::Libis::Format::Library.get_field_by(:mimetype, mimetype, :puid) rescue nil
160
160
  end
161
161
 
162
162
  attr_accessor :bad_mimetypes, :bad_puids
@@ -33,7 +33,7 @@ module Libis
33
33
 
34
34
  timeout = Libis::Format::Config[:timeouts][:office_to_pdf]
35
35
  result = Libis::Tools::Command.run(
36
- Libis::Format::Config[:soffice_path], '--headless',
36
+ Libis::Format::Config[:soffice_cmd], '--headless',
37
37
  "-env:UserInstallation=file://#{workdir}",
38
38
  '--convert-to', export_filter,
39
39
  '--outdir', workdir, src_file,
@@ -25,7 +25,7 @@ module Libis
25
25
 
26
26
  timeout = Libis::Format::Config[:timeouts][:pdf_copy]
27
27
  result = Libis::Tools::Command.run(
28
- Libis::Format::Config[:java_path],
28
+ Libis::Format::Config[:java_cmd],
29
29
  '-cp', Libis::Format::Config[:pdf_tool],
30
30
  'CopyPdf',
31
31
  '--file_input', source,
@@ -26,7 +26,7 @@ module Libis
26
26
 
27
27
  timeout = Libis::Format::Config[:timeouts][:pdf_merge]
28
28
  result = Libis::Tools::Command.run(
29
- Libis::Format::Config[:java_path],
29
+ Libis::Format::Config[:java_cmd],
30
30
  '-cp', Libis::Format::Config[:pdf_tool],
31
31
  'MergePdf',
32
32
  '--file_output', target,
@@ -25,7 +25,7 @@ module Libis
25
25
 
26
26
  timeout = Libis::Format::Config[:timeouts][:pdf_split]
27
27
  result = Libis::Tools::Command.run(
28
- Libis::Format::Config[:java_path],
28
+ Libis::Format::Config[:java_cmd],
29
29
  '-cp', Libis::Format::Config[:pdf_tool],
30
30
  'SplitPdf',
31
31
  '--file_input', source,
@@ -39,7 +39,7 @@ module Libis
39
39
 
40
40
  timeout = Libis::Format::Config[:timeouts][:pdf_to_pdfa]
41
41
  result = Libis::Tools::Command.run(
42
- Libis::Format::Config[:ghostscript_path],
42
+ Libis::Format::Config[:ghostscript_cmd],
43
43
  '-dBATCH', '-dNOPAUSE', '-dNOOUTERSAVE',
44
44
  '-sColorConversionStrategy=/UseDeviceIndependentColor',
45
45
  "-sProcessColorModel=#{icc_info[:device]}",
@@ -53,7 +53,6 @@ module Libis
53
53
  )
54
54
 
55
55
  raise RuntimeError, "#{self.class} took too long (> #{timeout} seconds) to complete" if result[:timeout]
56
- raise RuntimeError, "#{self.class} errors: #{result[:err].join("\n")}" unless result[:status] == 0 && result[:err].empty?
57
56
 
58
57
  FileUtils.rm [icc_file, def_filename].compact, force: true
59
58
 
@@ -22,7 +22,7 @@ module Libis
22
22
  src_file = File.absolute_path(source)
23
23
 
24
24
  timeout = Libis::Format::Config[:timeouts][:pdfa_validator]
25
- if (pdfa = Libis::Format::Config[:pdfa_path])
25
+ if (pdfa = Libis::Format::Config[:pdfa_cmd])
26
26
  # Keep it clean: tool generates fontconfig/ cache dir in current working dir
27
27
  previous_wd = Dir.getwd
28
28
  Dir.chdir(Dir.tmpdir)
@@ -48,16 +48,15 @@ module Libis
48
48
  return false
49
49
  end
50
50
  else
51
- jar = File.join(Libis::Format::TOOL_DIR, 'pdfbox', 'preflight-app-1.8.10.jar')
51
+ jar = Libis::Format::Config[:preflight_jar]
52
52
  result = Libis::Tools::Command.run(
53
- Libis::Format::Config[:java_path],
53
+ Libis::Format::Config[:java_cmd],
54
54
  '-jar', jar,
55
55
  src_file,
56
56
  timeout: timeout,
57
57
  kill_after: timeout * 2
58
58
  )
59
59
  raise RuntimeError, "#{self.class} took too long (> #{timeout} seconds) to complete" if result[:timeout]
60
- raise RuntimeError, "#{self.class} errors: #{result[:err].join("\n")}" unless result[:err].empty?
61
60
 
62
61
  unless result[:status] == 0
63
62
  warn "Validator failed to validate the PDF file '%s' against PDF/A-1B constraints:\n%s", source,
@@ -1,3 +1,4 @@
1
+ # noinspection RubyResolve
1
2
  require 'fileutils'
2
3
 
3
4
  require 'libis/tools/extend/string'
@@ -34,7 +35,7 @@ module Libis
34
35
  timeout = Libis::Format::Config[:timeouts][:spreadsheet_to_ods] ||
35
36
  Libis::Format::Config[:timeouts][:office_to_pdf]
36
37
  result = Libis::Tools::Command.run(
37
- Libis::Format::Config[:soffice_path], '--headless',
38
+ Libis::Format::Config[:soffice_cmd], '--headless',
38
39
  "-env:UserInstallation=file://#{workdir}",
39
40
  '--convert-to', export_filter,
40
41
  '--outdir', workdir, src_file,