libis-format 1.3.3 → 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 (78) hide show
  1. checksums.yaml +4 -4
  2. data/.coveralls.yml +2 -0
  3. data/.gitignore +20 -0
  4. data/.travis.yml +70 -0
  5. data/Gemfile +0 -12
  6. data/README.md +2 -2
  7. data/Rakefile +8 -0
  8. data/base/Dockerfile +35 -0
  9. data/base/Dockerfile.alpine +20 -0
  10. data/base/Dockerfile.rvm +56 -0
  11. data/base/rework_path +20 -0
  12. data/bin/{pdf_tool → pdf_copy} +2 -3
  13. data/data/PDFA_def.ps +3 -3
  14. data/data/eciRGB_v2.icc +0 -0
  15. data/data/types.yml +4 -17
  16. data/docker_cfg.yml +1 -0
  17. data/lib/libis/format/cli/convert.rb +4 -4
  18. data/lib/libis/format/cli/prompt_helper.rb +24 -32
  19. data/lib/libis/format/command_line.rb +3 -2
  20. data/lib/libis/format/config.rb +23 -19
  21. data/lib/libis/format/converter/audio_converter.rb +31 -56
  22. data/lib/libis/format/converter/base.rb +36 -16
  23. data/lib/libis/format/converter/chain.rb +32 -52
  24. data/lib/libis/format/converter/fop_pdf_converter.rb +8 -4
  25. data/lib/libis/format/converter/image_assembler.rb +82 -0
  26. data/lib/libis/format/converter/image_converter.rb +40 -153
  27. data/lib/libis/format/converter/image_splitter.rb +80 -0
  28. data/lib/libis/format/converter/image_watermarker.rb +261 -0
  29. data/lib/libis/format/converter/jp2_converter.rb +38 -36
  30. data/lib/libis/format/converter/office_converter.rb +28 -22
  31. data/lib/libis/format/converter/pdf_assembler.rb +66 -0
  32. data/lib/libis/format/converter/pdf_converter.rb +52 -200
  33. data/lib/libis/format/converter/pdf_optimizer.rb +70 -0
  34. data/lib/libis/format/converter/pdf_splitter.rb +65 -0
  35. data/lib/libis/format/converter/pdf_watermarker.rb +110 -0
  36. data/lib/libis/format/converter/repository.rb +13 -7
  37. data/lib/libis/format/converter/spreadsheet_converter.rb +16 -10
  38. data/lib/libis/format/converter/video_converter.rb +58 -47
  39. data/lib/libis/format/converter/xslt_converter.rb +11 -13
  40. data/lib/libis/format/converter.rb +1 -1
  41. data/lib/libis/format/identifier.rb +46 -44
  42. data/lib/libis/format/info.rb +27 -0
  43. data/lib/libis/format/library.rb +147 -0
  44. data/lib/libis/format/tool/droid.rb +30 -29
  45. data/lib/libis/format/tool/extension_identification.rb +26 -24
  46. data/lib/libis/format/tool/{ff_mpeg.rb → ffmpeg.rb} +10 -17
  47. data/lib/libis/format/tool/fido.rb +27 -22
  48. data/lib/libis/format/tool/file_tool.rb +24 -11
  49. data/lib/libis/format/tool/fop_pdf.rb +14 -25
  50. data/lib/libis/format/tool/identification_tool.rb +40 -38
  51. data/lib/libis/format/tool/office_to_pdf.rb +18 -30
  52. data/lib/libis/format/tool/pdf_copy.rb +47 -0
  53. data/lib/libis/format/tool/pdf_merge.rb +19 -25
  54. data/lib/libis/format/tool/pdf_optimizer.rb +19 -22
  55. data/lib/libis/format/tool/pdf_split.rb +33 -6
  56. data/lib/libis/format/tool/pdf_to_pdfa.rb +31 -45
  57. data/lib/libis/format/tool/pdfa_validator.rb +30 -24
  58. data/lib/libis/format/tool/spreadsheet_to_ods.rb +18 -29
  59. data/lib/libis/format/tool.rb +3 -4
  60. data/lib/libis/format/version.rb +1 -3
  61. data/lib/libis/format/yaml_loader.rb +71 -0
  62. data/lib/libis/format.rb +7 -5
  63. data/lib/libis-format.rb +0 -2
  64. data/libis-format.gemspec +18 -24
  65. data/tools/PdfTool.jar +0 -0
  66. data/tools/pdfbox/pdfbox-app-2.0.13.jar +0 -0
  67. data/tools/pdfbox/{preflight-app-3.0.3.jar → preflight-app-2.0.13.jar} +0 -0
  68. metadata +83 -125
  69. data/data/AdobeRGB1998.icc +0 -0
  70. data/lib/libis/format/converter/email_converter.rb +0 -35
  71. data/lib/libis/format/tool/msg_to_pdf.rb +0 -270
  72. data/lib/libis/format/tool/pdf_tool.rb +0 -52
  73. data/lib/libis/format/type_database.rb +0 -156
  74. data/lib/libis/format/type_database_impl.rb +0 -153
  75. data/tools/pdf2pdfa +0 -395
  76. data/tools/pdfbox/pdfbox-app-3.0.3.jar +0 -0
  77. /data/bin/{droid_tool → droid} +0 -0
  78. /data/bin/{fido_tool → fido} +0 -0
@@ -0,0 +1,65 @@
1
+ # encoding: utf-8
2
+
3
+ require_relative 'base'
4
+
5
+ require 'libis/format/tool/pdf_split'
6
+
7
+ module Libis
8
+ module Format
9
+ module Converter
10
+
11
+ # noinspection DuplicatedCode
12
+ class PdfSplitter < Libis::Format::Converter::Base
13
+
14
+ def self.input_types
15
+ [:PDF]
16
+ end
17
+
18
+ def self.output_types(format = nil)
19
+ return [] unless input_types.include?(format) if format
20
+ [:PDF]
21
+ end
22
+
23
+ def pdf_split(_)
24
+ #force usage of this converter
25
+ end
26
+
27
+ def self.category
28
+ :splitter
29
+ end
30
+
31
+ # Split at given page. If omitted or nil, the source PDF will be split at every page
32
+ def page(v)
33
+ @page = v unless v.blank
34
+ end
35
+
36
+ def convert(source, target, format, opts = {})
37
+ super
38
+
39
+ result = split(source, target)
40
+ return nil unless result
41
+
42
+ result
43
+ end
44
+
45
+ private
46
+
47
+ def split(source, target)
48
+
49
+ options = @page ? ['--page', @page] : ['--every_page']
50
+ using_temp(target) do |tmpname|
51
+ result = Libis::Format::Tool::PdfSplit.run(source, tmpname, *options)
52
+ unless result[:err].empty?
53
+ error("Pdf split encountered errors:\n%s", result[:err].join(join("\n")))
54
+ next nil
55
+ end
56
+ tmpname
57
+ end
58
+
59
+ end
60
+
61
+ end
62
+
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,110 @@
1
+ # encoding: utf-8
2
+
3
+ require_relative 'base'
4
+
5
+ require 'libis/tools/extend/hash'
6
+ require 'libis/format/tool/pdf_copy'
7
+ require 'libis/format/tool/pdf_to_pdfa'
8
+ require 'libis/format/tool/pdf_optimizer'
9
+
10
+ module Libis
11
+ module Format
12
+ module Converter
13
+
14
+ class PdfWatermarker < Libis::Format::Converter::Base
15
+
16
+ def self.input_types
17
+ [:PDF]
18
+ end
19
+
20
+ def self.output_types(format = nil)
21
+ return [] unless input_types.include?(format) if format
22
+ [:PDF]
23
+ end
24
+
25
+ def pdf_watermark(_)
26
+ #force usage of this converter
27
+ end
28
+
29
+ def initialize
30
+ super
31
+ @options[:text] = '© LIBIS'
32
+ @options[:opacity] = '0.3'
33
+ end
34
+
35
+ def file(v)
36
+ @options[:file] = v.blank? ? nil : v
37
+ end
38
+
39
+ def text(v)
40
+ @options[:text] = v
41
+ end
42
+
43
+ def rotation(v)
44
+ @options[:rotation] = v unless v.blank?
45
+ end
46
+
47
+ def size(v)
48
+ @options[:size] = v unless v.blank?
49
+ end
50
+
51
+ def opacity(v)
52
+ @options[:opacity] = v unless v.blank?
53
+ end
54
+
55
+ def gap_size(v)
56
+ @options[:gap_size] = v
57
+ end
58
+
59
+ def gap_ratio(v)
60
+ @options[:gap_ratio] = v
61
+ end
62
+
63
+ def convert(source, target, format, opts = {})
64
+ super
65
+
66
+ result = convert_pdf(source, target)
67
+ return nil unless result
68
+
69
+ result
70
+
71
+ end
72
+
73
+ OPTIONS_TABLE = {
74
+ file: 'wm_image',
75
+ text: 'wm_text',
76
+ rotation: 'wm_text_rotation',
77
+ size: 'wm_font_size',
78
+ opacity: 'wm_opacity',
79
+ gap_size: 'wm_gap_size',
80
+ gap_ratio: 'wm_gap_ratio'
81
+ }
82
+ # noinspection DuplicatedCode
83
+ def convert_pdf(source, target)
84
+
85
+ using_temp(target) do |tmpname|
86
+ result = Libis::Format::Tool::PdfCopy.run(
87
+ source, tmpname,
88
+ @options.map {|k, v|
89
+ if v.nil?
90
+ nil
91
+ else
92
+ v = v.split('\n') unless v.blank? if k == :text
93
+ k = OPTIONS_TABLE[k] || k
94
+ ["--#{k}", (v.is_a?(Array) ? v : v.to_s)]
95
+ end}.compact.flatten
96
+ )
97
+ unless result[:err].empty?
98
+ error("Pdf conversion encountered errors:\n%s", result[:err].join(join("\n")))
99
+ next nil
100
+ end
101
+ tmpname
102
+ end
103
+
104
+ end
105
+
106
+ end
107
+
108
+ end
109
+ end
110
+ end
@@ -1,5 +1,6 @@
1
- # frozen_string_literal: true
1
+ # coding: utf-8
2
2
 
3
+ require 'set'
3
4
  require 'singleton'
4
5
 
5
6
  require 'libis/tools/logger'
@@ -10,6 +11,7 @@ require_relative 'chain'
10
11
  module Libis
11
12
  module Format
12
13
  module Converter
14
+
13
15
  class Repository
14
16
  include Singleton
15
17
  include ::Libis::Tools::Logger
@@ -22,15 +24,15 @@ module Libis
22
24
  @converters_glob = File.join(File.dirname(__FILE__), '*_converter.rb')
23
25
  end
24
26
 
25
- def self.register(converter_class)
27
+ def Repository.register(converter_class)
26
28
  instance.converters.add? converter_class
27
29
  end
28
30
 
29
- def self.get_converters # rubocop:disable Naming/AccessorMethodName
31
+ def Repository.get_converters
30
32
  instance.get_converters
31
33
  end
32
34
 
33
- def get_converters # rubocop:disable Naming/AccessorMethodName
35
+ def get_converters
34
36
  if converters.empty?
35
37
  Dir.glob(converters_glob).each do |filename|
36
38
  # noinspection RubyResolve
@@ -40,12 +42,12 @@ module Libis
40
42
  converters
41
43
  end
42
44
 
43
- def self.get_converter_chain(src_type, tgt_type, operations = {})
45
+ def Repository.get_converter_chain(src_type, tgt_type, operations = {})
44
46
  instance.get_converter_chain src_type, tgt_type, operations
45
47
  end
46
48
 
47
49
  def get_converter_chain(src_type, tgt_type, operations = {})
48
- msg = "conversion from #{src_type} to #{tgt_type}"
50
+ msg = "conversion from #{src_type.to_s} to #{tgt_type.to_s}"
49
51
  chain_list = find_chains src_type, tgt_type, operations
50
52
  # if chain_list.length > 1
51
53
  # warn "Found more than one conversion chain for #{msg}. Picking the first one."
@@ -68,6 +70,7 @@ module Libis
68
70
  end
69
71
 
70
72
  def build_chains(chain)
73
+
71
74
  found = []
72
75
  chains = [chain]
73
76
 
@@ -78,15 +81,18 @@ module Libis
78
81
  new_chains += chains.map { |c| c.append(converter) }.flatten
79
82
  end
80
83
 
81
- found = new_chains.select(&:valid?)
84
+ found = new_chains.select { |c| c.valid?}
82
85
  return found unless found.empty?
83
86
 
84
87
  chains = new_chains
85
88
  end
86
89
 
87
90
  found
91
+
88
92
  end
93
+
89
94
  end
95
+
90
96
  end
91
97
  end
92
98
  end
@@ -1,38 +1,44 @@
1
- # frozen_string_literal: true
1
+ # encoding: utf-8
2
2
 
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
10
10
  module Converter
11
+
11
12
  class SpreadsheetConverter < Libis::Format::Converter::Base
13
+
12
14
  def self.input_types
13
- %i[
14
- MSXLS
15
- MSXLSX
16
- OO_CALC
15
+ [
16
+ :MSXLS,
17
+ :MSXLSX,
18
+ :OO_CALC
17
19
  ]
18
20
  end
19
21
 
20
22
  def self.output_types(format = nil)
21
- return [] unless input_types.include?(format)
22
-
23
+ return [] unless input_types.include?(format) if format
23
24
  [:OO_CALC]
24
25
  end
25
26
 
26
27
  def spreadsheet_convert(_)
27
- # force usage of this converter
28
+ #force usage of this converter
28
29
  end
29
30
 
30
31
  def convert(source, target, format, opts = {})
31
32
  super
32
33
 
33
- Format::Tool::SpreadsheetToOds.run(source, target)
34
+ return nil unless Format::Tool::SpreadsheetToOds.run(source, target)
35
+
36
+ target
37
+
34
38
  end
39
+
35
40
  end
41
+
36
42
  end
37
43
  end
38
44
  end
@@ -1,26 +1,29 @@
1
- # frozen_string_literal: true
2
-
3
1
  require_relative 'base'
4
- require 'libis/format/tool/ff_mpeg'
2
+ require 'libis/format/tool/ffmpeg'
5
3
 
6
4
  require 'fileutils'
7
5
 
8
6
  module Libis
9
7
  module Format
10
8
  module Converter
9
+
11
10
  class VideoConverter < Libis::Format::Converter::Base
11
+
12
12
  def self.input_types
13
- %i[WEBM MP4 MPG MKV MJP2 QTFF AVI OGGV WMV DV FLV SWF]
13
+ [:WEBM, :MP4, :MPG, :MKV, :MJP2, :QTFF, :AVI, :OGGV, :WMV, :DV, :FLV, :SWF]
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
+ [:GIF, :WEBM, :MP4, :MPG, :MKV, :MJP2, :QTFF, :AVI, :OGGV, :WMV, :DV, :FLV, :SWF]
19
+ end
18
20
 
19
- %i[GIF WEBM MP4 MPG MKV MJP2 QTFF AVI OGGV WMV DV FLV SWF]
21
+ def initialize
22
+ super
20
23
  end
21
24
 
22
- def quiet(value)
23
- @flags[:quiet] = !!value
25
+ def quiet(v)
26
+ @flags[:quiet] = !!v
24
27
  end
25
28
 
26
29
  def format(format)
@@ -123,10 +126,10 @@ module Libis
123
126
 
124
127
  # @param [Boolean] value If set to true automatically selects optimal format for web viewing. Default: false
125
128
  def web_stream(value)
126
- return unless value
127
-
128
- @options[:video_codec] = 'h264'
129
- @options[:audio_codec] = 'acc'
129
+ if value
130
+ @options[:video_codec] = 'h264'
131
+ @options[:audio_codec] = 'acc'
132
+ end
130
133
  end
131
134
 
132
135
  # @param [String] name name of a preset. See FFMpeg documentation for more info
@@ -167,7 +170,7 @@ module Libis
167
170
 
168
171
  elsif File.directory?(source)
169
172
 
170
- sources = Dir[File.join(source, '**', '*')].reject { |p| File.directory? p }
173
+ sources = Dir[File.join(source, '**', '*')].reject {|p| File.directory? p}
171
174
  assemble_and_convert(sources, target)
172
175
 
173
176
  else
@@ -176,17 +179,15 @@ module Libis
176
179
 
177
180
  end
178
181
 
179
- {
180
- files: [target],
181
- converter: self.class.name
182
- }
182
+ target
183
+
183
184
  end
184
185
 
185
186
  def assemble_and_convert(sources, target)
186
- Tempfile.create(%w[list .txt]) do |f|
187
- sources.each { |src| f.puts src }
187
+ Tempfile.create(%w(list .txt)) do |f|
188
+ sources.each {|src| f.puts src}
188
189
  opts[:global] ||= []
189
- opts[:global] += %w[-f concat]
190
+ opts[:global] += %w(-f concat)
190
191
  f.close
191
192
  target = convert_file(f.to_path, target)
192
193
  end
@@ -197,15 +198,15 @@ module Libis
197
198
 
198
199
  def convert_file(source, target)
199
200
  # FLV special: only supports aac and speex audio codecs
200
- format = (@options[:format] || File.extname(target)[1..]).to_s.downcase
201
- @options[:audio_codec] ||= 'aac' if %w[flv].include?(format)
201
+ format = (@options[:format] || File.extname(target)[1..-1]).to_s.downcase
202
+ @options[:audio_codec] ||= 'aac' if %w'flv'.include?(format)
202
203
 
203
204
  # SWF special: only supports mp3 audio codec
204
- format = (@options[:format] || File.extname(target)[1..]).to_s.downcase
205
- @options[:audio_codec] ||= 'mp3' if %w[swf].include?(format)
205
+ format = (@options[:format] || File.extname(target)[1..-1]).to_s.downcase
206
+ @options[:audio_codec] ||= 'mp3' if %w'swf'.include?(format)
206
207
 
207
208
  # Set up FFMpeg command line parameters
208
- opts = { global: [], input: [], filter: [], output: [] }
209
+ opts = {global: [], input: [], filter: [], output: []}
209
210
  opts[:global] << '-hide_banner'
210
211
  opts[:global] << '-loglevel' << (@options[:quiet] ? 'fatal' : 'warning')
211
212
 
@@ -213,21 +214,29 @@ module Libis
213
214
  @options[:watermark_opacity] ||= 0.5
214
215
  if @options[:watermark_image]
215
216
  opts[:filter] << '-i' << @options[:watermark_image] << '-filter_complex'
216
- opts[:filter] << Kernel.format('[1:v]format=argb,colorchannelmixer=aa=%f[wm];[0:v][wm]overlay=%s',
217
- @options[:watermark_opacity], watermark_position_text)
217
+ opts[:filter] << "[1:v]format=argb,colorchannelmixer=aa=%f[wm];[0:v][wm]overlay=%s" %
218
+ [@options[:watermark_opacity], watermark_position_text]
218
219
  elsif @options[:watermark_text]
219
220
  @options[:watermark_text_size] ||= 10
220
221
  @options[:watermark_text_color] ||= 'white'
221
222
  @options[:watermark_text_shadow_color] ||= 'black'
222
223
  @options[:watermark_text_shadow_offset] ||= 1
223
- filter_text = Kernel.format("drawtext=text='%s':%s:fontfile=%s:fontsize=%d:fontcolor=%s@%f",
224
- @options[:watermark_text], watermark_position_text(true), Config[:watermark_font],
225
- @options[:watermark_text_size], @options[:watermark_text_color], @options[:watermark_opacity])
226
- if (@options[:watermark_text_shadow_offset]).positive?
227
- filter_text += Kernel.format(':shadowcolor=%s@%f:shadowx=%d:shadowy=%d',
228
- @options[:watermark_text_shadow_color], @options[:watermark_opacity],
229
- @options[:watermark_text_shadow_offset], @options[:watermark_text_shadow_offset])
230
- end
224
+ filter_text = "drawtext=text='%s':%s:fontfile=%s:fontsize=%d:fontcolor=%s@%f" %
225
+ [
226
+ @options[:watermark_text],
227
+ watermark_position_text(true),
228
+ Config[:watermark_font],
229
+ @options[:watermark_text_size],
230
+ @options[:watermark_text_color],
231
+ @options[:watermark_opacity]
232
+ ]
233
+ filter_text += ':shadowcolor=%s@%f:shadowx=%d:shadowy=%d' %
234
+ [
235
+ @options[:watermark_text_shadow_color],
236
+ @options[:watermark_opacity],
237
+ @options[:watermark_text_shadow_offset],
238
+ @options[:watermark_text_shadow_offset]
239
+ ] if @options[:watermark_text_shadow_offset] > 0
231
240
  opts[:filter] << '-vf' << filter_text
232
241
  end
233
242
  opts[:output] << '-ac' << @options[:audio_channels] if @options[:audio_channels]
@@ -239,7 +248,7 @@ module Libis
239
248
  opts[:output] << '-map_metadata:g' << '0:g' # Copy global metadata
240
249
  opts[:output] << '-map_metadata:s:a' << '0:s:a' # Copy audio metadata
241
250
  opts[:output] << '-map_metadata:s:v' << '0:s:v' # Copy video metadata
242
- opts[:input] << '-accurate_seek' << (@options[:start].to_i.negative? ? '-sseof' : '-ss') << @options[:start] if @options[:start]
251
+ opts[:input] << '-accurate_seek' << (@options[:start].to_i < 0 ? '-sseof' : '-ss') << @options[:start] if @options[:start]
243
252
  opts[:input] << '-t' << @options[:duration] if @options[:duration]
244
253
  opts[:output] << '-qscale' << @options[:video_quality] if @options[:video_quality]
245
254
  opts[:output] << '-q:a' << @options[:audio_quality] if @options[:audio_quality]
@@ -265,19 +274,21 @@ module Libis
265
274
  w = for_text ? 'tw' : 'w'
266
275
  h = for_text ? 'th' : 'h'
267
276
  case @options[:watermark_position]
268
- when 'bottom_left'
269
- "x=#{margin}:y=H-#{h}-#{margin}"
270
- when 'top_left'
271
- "x=#{margin}:y=#{margin}"
272
- when 'bottom_right'
273
- "x=W-#{w}-#{margin}:y=H-#{h}-#{margin}"
274
- when 'top_right'
275
- "x=W-#{w}-#{margin}:y=#{margin}"
276
- else
277
- "x=#{margin}:y=H-#{h}-#{margin}"
277
+ when 'bottom_left'
278
+ "x=#{margin}:y=H-#{h}-#{margin}"
279
+ when 'top_left'
280
+ "x=#{margin}:y=#{margin}"
281
+ when 'bottom_right'
282
+ "x=W-#{w}-#{margin}:y=H-#{h}-#{margin}"
283
+ when 'top_right'
284
+ "x=W-#{w}-#{margin}:y=#{margin}"
285
+ else
286
+ "x=#{margin}:y=H-#{h}-#{margin}"
278
287
  end
279
288
  end
289
+
280
290
  end
291
+
281
292
  end
282
293
  end
283
- end
294
+ end
@@ -1,19 +1,18 @@
1
- # frozen_string_literal: true
2
-
3
1
  require_relative 'base'
4
2
 
5
3
  module Libis
6
4
  module Format
7
5
  module Converter
6
+
8
7
  class XsltConverter < Libis::Format::Converter::Base
8
+
9
9
  def self.input_types
10
10
  [:XML]
11
11
  end
12
12
 
13
13
  def self.output_types(format = nil)
14
- return [] if format && !input_types.include?(format)
15
-
16
- %i[XML HTML TXT]
14
+ return [] unless input_types.include?(format) if format
15
+ [:XML, :HTML, :TXT]
17
16
  end
18
17
 
19
18
  def xsl_file(file_path)
@@ -35,12 +34,12 @@ module Libis
35
34
 
36
35
  FileUtils.mkpath(File.dirname(target))
37
36
 
38
- if RUBY_PLATFORM == 'java'
37
+ if RUBY_PLATFORM == "java"
39
38
  require 'saxon-xslt'
40
39
  xsl = Saxon.XSLT(File.open(@options[:xsl_file]))
41
40
  xml = Saxon.XML(File.open(source))
42
41
  result = xsl.transform(xml)
43
- File.write(target, result.to_s)
42
+ File.open(target, 'w') {|f| f.write(result.to_s)}
44
43
  else
45
44
  require 'nokogiri'
46
45
 
@@ -87,17 +86,16 @@ module Libis
87
86
  error "Error transforming '#{source}' with '#{file}': #{e.message} @ #{e.backtrace[0]}"
88
87
  return nil
89
88
  ensure
90
- fp.close unless fp.nil? || fp.closed?
89
+ fp.close unless fp.nil? or fp.closed?
91
90
  end
92
91
 
93
- {
94
- command: { status: 0 },
95
- files: [target]
96
- }
97
-
92
+ target
98
93
  end
94
+
99
95
  end
96
+
100
97
  end
98
+
101
99
  end
102
100
  end
103
101
  end
@@ -1,4 +1,4 @@
1
- # frozen_string_literal: true
1
+ # code utf-8
2
2
 
3
3
  module Libis
4
4
  module Format