libis-format 1.2.9 → 1.3.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.
- checksums.yaml +4 -4
 - data/Gemfile +2 -0
 - data/data/types.yml +1 -1
 - data/lib/libis/format/command_line.rb +2 -3
 - data/lib/libis/format/config.rb +18 -19
 - data/lib/libis/format/converter/base.rb +9 -16
 - data/lib/libis/format/converter/chain.rb +36 -28
 - data/lib/libis/format/converter/email_converter.rb +5 -8
 - data/lib/libis/format/converter/fop_pdf_converter.rb +4 -6
 - data/lib/libis/format/converter/image_converter.rb +51 -58
 - data/lib/libis/format/converter/jp2_converter.rb +33 -35
 - data/lib/libis/format/converter/office_converter.rb +19 -23
 - data/lib/libis/format/converter/pdf_converter.rb +22 -28
 - data/lib/libis/format/converter/repository.rb +7 -13
 - data/lib/libis/format/converter/spreadsheet_converter.rb +7 -11
 - data/lib/libis/format/converter/video_converter.rb +41 -55
 - data/lib/libis/format/converter/xslt_converter.rb +14 -13
 - data/lib/libis/format/converter.rb +1 -1
 - data/lib/libis/format/identifier.rb +41 -43
 - data/lib/libis/format/tool/droid.rb +29 -30
 - data/lib/libis/format/tool/ff_mpeg.rb +11 -13
 - data/lib/libis/format/tool/fido.rb +1 -1
 - data/lib/libis/format/tool/pdf_copy.rb +17 -18
 - data/lib/libis/format/tool/pdf_merge.rb +17 -17
 - data/lib/libis/format/tool/pdf_optimizer.rb +18 -20
 - data/lib/libis/format/tool/spreadsheet_to_ods.rb +23 -20
 - data/lib/libis/format/tool.rb +2 -2
 - data/lib/libis/format/type_database.rb +51 -28
 - data/lib/libis/format/type_database_impl.rb +57 -24
 - data/lib/libis/format/version.rb +1 -1
 - data/lib/libis/format.rb +3 -2
 - data/lib/libis-format.rb +2 -0
 - metadata +3 -3
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: b8282db4cf37eea292436474d401bcc2725c31eaa1eb882ea9475be14912f6c9
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 6eaf1dfe05d24bd0df1ad20f61137a4007f02828b97138601c87afc5215d7454
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 8a242dc0d21da39ec434a7e2f59b2d8ff3c57e427512909c792bce05de5a29a03fdc726484059f13dc0b931f4ec2be13e75dc06f0e06b8736d77c541fd6aeb7e
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 34a6d942f8fc39392528d03e5d367d8d476c58da12424ba5a8a87b4cf749a85ca485dba6ee1741dd5b865a25aaa57d562c1b97d96f03af83a5485f4c142dcdeb
         
     | 
    
        data/Gemfile
    CHANGED
    
    
    
        data/data/types.yml
    CHANGED
    
    | 
         @@ -377,7 +377,7 @@ PRESENTATION: 
     | 
|
| 
       377 
377 
     | 
    
         | 
| 
       378 
378 
     | 
    
         
             
              OO_IMPRESS:
         
     | 
| 
       379 
379 
     | 
    
         
             
                NAME: OpenDocument Presentation (ODP)
         
     | 
| 
       380 
     | 
    
         
            -
                 
     | 
| 
      
 380 
     | 
    
         
            +
                PUID: fmt/138 fmt/292 fmt/293
         
     | 
| 
       381 
381 
     | 
    
         
             
                MIME: application/vnd.oasis.opendocument.presentation application/vnd.oasis.opendocument.presentation-template
         
     | 
| 
       382 
382 
     | 
    
         
             
                EXTENSIONS: odp otp
         
     | 
| 
       383 
383 
     | 
    
         | 
| 
         @@ -1,3 +1,5 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
       1 
3 
     | 
    
         
             
            require 'thor'
         
     | 
| 
       2 
4 
     | 
    
         
             
            require 'tty-prompt'
         
     | 
| 
       3 
5 
     | 
    
         
             
            require 'tty-config'
         
     | 
| 
         @@ -7,9 +9,7 @@ require 'libis/format/cli/format' 
     | 
|
| 
       7 
9 
     | 
    
         | 
| 
       8 
10 
     | 
    
         
             
            module Libis
         
     | 
| 
       9 
11 
     | 
    
         
             
              module Format
         
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
12 
     | 
    
         
             
                class CommandLine < Thor
         
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
13 
     | 
    
         
             
                  def self.exit_on_failure?
         
     | 
| 
       14 
14 
     | 
    
         
             
                    true
         
     | 
| 
       15 
15 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -20,6 +20,5 @@ module Libis 
     | 
|
| 
       20 
20 
     | 
    
         
             
                  desc 'format', 'perform format identification on a given file or directory'
         
     | 
| 
       21 
21 
     | 
    
         
             
                  subcommand 'format', Cli::Format
         
     | 
| 
       22 
22 
     | 
    
         
             
                end
         
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
23 
     | 
    
         
             
              end
         
     | 
| 
       25 
24 
     | 
    
         
             
            end
         
     | 
    
        data/lib/libis/format/config.rb
    CHANGED
    
    | 
         @@ -1,10 +1,10 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            #  
     | 
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
       2 
3 
     | 
    
         
             
            require 'os'
         
     | 
| 
       3 
4 
     | 
    
         
             
            require 'libis-tools'
         
     | 
| 
       4 
5 
     | 
    
         | 
| 
       5 
6 
     | 
    
         
             
            module Libis
         
     | 
| 
       6 
7 
     | 
    
         
             
              module Format
         
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
       8 
8 
     | 
    
         
             
                Config = ::Libis::Tools::Config
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
       10 
10 
     | 
    
         
             
                Config[:converter_chain_max_level] = 8
         
     | 
| 
         @@ -15,10 +15,10 @@ module Libis 
     | 
|
| 
       15 
15 
     | 
    
         
             
                Config[:ghostscript_cmd] = 'gs'
         
     | 
| 
       16 
16 
     | 
    
         
             
                Config[:droid_cmd] = '/opt/droid/droid.sh'
         
     | 
| 
       17 
17 
     | 
    
         
             
                Config[:droid_temp_path] = '/tmp'
         
     | 
| 
       18 
     | 
    
         
            -
                Config[:fido_cmd] = ' 
     | 
| 
      
 18 
     | 
    
         
            +
                Config[:fido_cmd] = 'fido'
         
     | 
| 
       19 
19 
     | 
    
         
             
                Config[:fop_jar] = File.join(Libis::Format::TOOL_DIR, 'fop', 'build', 'fop.jar')
         
     | 
| 
       20 
20 
     | 
    
         
             
                Config[:ffmpeg_cmd] = 'ffmpeg'
         
     | 
| 
       21 
     | 
    
         
            -
                Config[:fido_formats] = [ 
     | 
| 
      
 21 
     | 
    
         
            +
                Config[:fido_formats] = [File.join(Libis::Format::DATA_DIR, 'lias_formats.xml')]
         
     | 
| 
       22 
22 
     | 
    
         
             
                Config[:pdf_tool] = File.join(Libis::Format::TOOL_DIR, 'PdfTool.jar')
         
     | 
| 
       23 
23 
     | 
    
         
             
                Config[:preflight_jar] = File.join(Libis::Format::TOOL_DIR, 'pdfbox', 'preflight-app-2.0.13.jar')
         
     | 
| 
       24 
24 
     | 
    
         
             
                Config[:wkhtmltopdf] = 'wkhtmltopdf'
         
     | 
| 
         @@ -27,21 +27,20 @@ module Libis 
     | 
|
| 
       27 
27 
     | 
    
         
             
                Config[:raw_audio_convert_cmd] = 'sox -V1 %s -e signed -b 16 -t wav %s rate %d channels %d'
         
     | 
| 
       28 
28 
     | 
    
         
             
                Config[:watermark_font] = '/usr/share/fonts/truetype/liberation/LiberationSans-Regular.ttf'
         
     | 
| 
       29 
29 
     | 
    
         
             
                Config[:timeouts] = {
         
     | 
| 
       30 
     | 
    
         
            -
             
     | 
| 
       31 
     | 
    
         
            -
             
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
       33 
     | 
    
         
            -
             
     | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
       36 
     | 
    
         
            -
             
     | 
| 
       37 
     | 
    
         
            -
             
     | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
       39 
     | 
    
         
            -
             
     | 
| 
       40 
     | 
    
         
            -
             
     | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
       42 
     | 
    
         
            -
             
     | 
| 
       43 
     | 
    
         
            -
             
     | 
| 
      
 30 
     | 
    
         
            +
                  droid: 20 * 60,
         
     | 
| 
      
 31 
     | 
    
         
            +
                  ffmpeg: 5 * 60,
         
     | 
| 
      
 32 
     | 
    
         
            +
                  fido: 20 * 60,
         
     | 
| 
      
 33 
     | 
    
         
            +
                  file_tool: 5 * 60,
         
     | 
| 
      
 34 
     | 
    
         
            +
                  fop: 5 * 60,
         
     | 
| 
      
 35 
     | 
    
         
            +
                  identification_tool: 5 * 60,
         
     | 
| 
      
 36 
     | 
    
         
            +
                  office_to_pdf: 5 * 60,
         
     | 
| 
      
 37 
     | 
    
         
            +
                  email2pdf: 5 * 60,
         
     | 
| 
      
 38 
     | 
    
         
            +
                  pdf_copy: 5 * 60,
         
     | 
| 
      
 39 
     | 
    
         
            +
                  pdf_merge: 5 * 60,
         
     | 
| 
      
 40 
     | 
    
         
            +
                  pdf_optimizer: 5 * 60,
         
     | 
| 
      
 41 
     | 
    
         
            +
                  pdf_split: 5 * 60,
         
     | 
| 
      
 42 
     | 
    
         
            +
                  pdf_to_pdfa: 5 * 60,
         
     | 
| 
      
 43 
     | 
    
         
            +
                  pdfa_validator: 5 * 60
         
     | 
| 
       44 
44 
     | 
    
         
             
                }
         
     | 
| 
       45 
     | 
    
         
            -
             
     | 
| 
       46 
45 
     | 
    
         
             
              end
         
     | 
| 
       47 
46 
     | 
    
         
             
            end
         
     | 
| 
         @@ -1,4 +1,4 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            #  
     | 
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            ### require 'tools/string'
         
     | 
| 
       4 
4 
     | 
    
         
             
            require 'tmpdir'
         
     | 
| 
         @@ -11,7 +11,6 @@ require_relative 'repository' 
     | 
|
| 
       11 
11 
     | 
    
         
             
            module Libis
         
     | 
| 
       12 
12 
     | 
    
         
             
              module Format
         
     | 
| 
       13 
13 
     | 
    
         
             
                module Converter
         
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
14 
     | 
    
         
             
                  class Base
         
     | 
| 
       16 
15 
     | 
    
         
             
                    include Libis::Tools::Logger
         
     | 
| 
       17 
16 
     | 
    
         | 
| 
         @@ -22,7 +21,7 @@ module Libis 
     | 
|
| 
       22 
21 
     | 
    
         
             
                      @flags = {}
         
     | 
| 
       23 
22 
     | 
    
         
             
                    end
         
     | 
| 
       24 
23 
     | 
    
         | 
| 
       25 
     | 
    
         
            -
                    def convert(source,  
     | 
| 
      
 24 
     | 
    
         
            +
                    def convert(source, _target, _format, opts = {})
         
     | 
| 
       26 
25 
     | 
    
         
             
                      unless File.exist? source
         
     | 
| 
       27 
26 
     | 
    
         
             
                        error "Cannot find file '#{source}'."
         
     | 
| 
       28 
27 
     | 
    
         
             
                        return nil
         
     | 
| 
         @@ -32,35 +31,33 @@ module Libis 
     | 
|
| 
       32 
31 
     | 
    
         
             
                    end
         
     | 
| 
       33 
32 
     | 
    
         | 
| 
       34 
33 
     | 
    
         
             
                    def self.input_types
         
     | 
| 
       35 
     | 
    
         
            -
                      raise  
     | 
| 
      
 34 
     | 
    
         
            +
                      raise 'Method #input_types needs to be overridden in converter'
         
     | 
| 
       36 
35 
     | 
    
         
             
                    end
         
     | 
| 
       37 
36 
     | 
    
         | 
| 
       38 
37 
     | 
    
         
             
                    def self.output_types(_format = nil)
         
     | 
| 
       39 
     | 
    
         
            -
                      raise  
     | 
| 
      
 38 
     | 
    
         
            +
                      raise 'Method #output_types needs to be overridden in converter'
         
     | 
| 
       40 
39 
     | 
    
         
             
                    end
         
     | 
| 
       41 
40 
     | 
    
         | 
| 
       42 
41 
     | 
    
         
             
                    def using_temp(target, &block)
         
     | 
| 
       43 
42 
     | 
    
         
             
                      self.class.using_temp(target, &block)
         
     | 
| 
       44 
43 
     | 
    
         
             
                    end
         
     | 
| 
       45 
44 
     | 
    
         | 
| 
       46 
     | 
    
         
            -
                    def  
     | 
| 
      
 45 
     | 
    
         
            +
                    def self.using_temp(target)
         
     | 
| 
       47 
46 
     | 
    
         
             
                      tempfile = Tools::TempFile.name("convert-#{File.basename(target, '.*').gsub(/\s/, '_')}", File.extname(target))
         
     | 
| 
       48 
47 
     | 
    
         
             
                      result = yield tempfile
         
     | 
| 
       49 
48 
     | 
    
         
             
                      return nil unless result
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
       50 
50 
     | 
    
         
             
                      FileUtils.move result, target
         
     | 
| 
       51 
51 
     | 
    
         
             
                      target
         
     | 
| 
       52 
52 
     | 
    
         
             
                    end
         
     | 
| 
       53 
53 
     | 
    
         | 
| 
       54 
     | 
    
         
            -
                    def  
     | 
| 
       55 
     | 
    
         
            -
             
     | 
| 
      
 54 
     | 
    
         
            +
                    def self.inherited(klass) # rubocop:disable Lint/MissingSuper
         
     | 
| 
       56 
55 
     | 
    
         
             
                      Repository.register klass
         
     | 
| 
       57 
56 
     | 
    
         | 
| 
       58 
57 
     | 
    
         
             
                      class << self
         
     | 
| 
       59 
     | 
    
         
            -
             
     | 
| 
       60 
58 
     | 
    
         
             
                        def conversions
         
     | 
| 
       61 
     | 
    
         
            -
                          input_types. 
     | 
| 
      
 59 
     | 
    
         
            +
                          input_types.each_with_object({}) do |input_type, hash|
         
     | 
| 
       62 
60 
     | 
    
         
             
                            hash[input_type] = output_types
         
     | 
| 
       63 
     | 
    
         
            -
                            hash
         
     | 
| 
       64 
61 
     | 
    
         
             
                          end
         
     | 
| 
       65 
62 
     | 
    
         
             
                        end
         
     | 
| 
       66 
63 
     | 
    
         | 
| 
         @@ -83,7 +80,7 @@ module Libis 
     | 
|
| 
       83 
80 
     | 
    
         
             
                        end
         
     | 
| 
       84 
81 
     | 
    
         | 
| 
       85 
82 
     | 
    
         
             
                        def conversion?(input_type, output_type)
         
     | 
| 
       86 
     | 
    
         
            -
                          conversions[input_type] 
     | 
| 
      
 83 
     | 
    
         
            +
                          conversions[input_type]&.any? { |t| t == output_type }
         
     | 
| 
       87 
84 
     | 
    
         
             
                        end
         
     | 
| 
       88 
85 
     | 
    
         | 
| 
       89 
86 
     | 
    
         
             
                        def output_for(input_type)
         
     | 
| 
         @@ -93,13 +90,9 @@ module Libis 
     | 
|
| 
       93 
90 
     | 
    
         
             
                        def extension?(extension)
         
     | 
| 
       94 
91 
     | 
    
         
             
                          !TypeDatabase.ext_types(extension).first.nil?
         
     | 
| 
       95 
92 
     | 
    
         
             
                        end
         
     | 
| 
       96 
     | 
    
         
            -
             
     | 
| 
       97 
93 
     | 
    
         
             
                      end
         
     | 
| 
       98 
     | 
    
         
            -
             
     | 
| 
       99 
94 
     | 
    
         
             
                    end
         
     | 
| 
       100 
     | 
    
         
            -
             
     | 
| 
       101 
95 
     | 
    
         
             
                  end
         
     | 
| 
       102 
     | 
    
         
            -
             
     | 
| 
       103 
96 
     | 
    
         
             
                end
         
     | 
| 
       104 
97 
     | 
    
         
             
              end
         
     | 
| 
       105 
98 
     | 
    
         
             
            end
         
     | 
| 
         @@ -1,4 +1,4 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            #  
     | 
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            require 'fileutils'
         
     | 
| 
       4 
4 
     | 
    
         
             
            require 'deep_dive'
         
     | 
| 
         @@ -10,7 +10,6 @@ require 'libis/format/type_database' 
     | 
|
| 
       10 
10 
     | 
    
         
             
            module Libis
         
     | 
| 
       11 
11 
     | 
    
         
             
              module Format
         
     | 
| 
       12 
12 
     | 
    
         
             
                module Converter
         
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
13 
     | 
    
         
             
                  class Chain
         
     | 
| 
       15 
14 
     | 
    
         
             
                    include ::Libis::Tools::Logger
         
     | 
| 
       16 
15 
     | 
    
         
             
                    include DeepDive
         
     | 
| 
         @@ -26,15 +25,16 @@ module Libis 
     | 
|
| 
       26 
25 
     | 
    
         
             
                    # @return [Array[Hash]]
         
     | 
| 
       27 
26 
     | 
    
         
             
                    def append(converter)
         
     | 
| 
       28 
27 
     | 
    
         
             
                      return [] unless converter
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
       29 
29 
     | 
    
         
             
                      valid_chain_nodes(converter).map do |node|
         
     | 
| 
       30 
     | 
    
         
            -
                         
     | 
| 
      
 30 
     | 
    
         
            +
                        ddup.add_chain_node(node)
         
     | 
| 
       31 
31 
     | 
    
         
             
                      end.compact
         
     | 
| 
       32 
32 
     | 
    
         
             
                    end
         
     | 
| 
       33 
33 
     | 
    
         | 
| 
       34 
34 
     | 
    
         
             
                    def closed?
         
     | 
| 
       35 
35 
     | 
    
         
             
                      !@converter_chain.empty? &&
         
     | 
| 
       36 
     | 
    
         
            -
             
     | 
| 
       37 
     | 
    
         
            -
             
     | 
| 
      
 36 
     | 
    
         
            +
                        @converter_chain.first[:input].to_sym == @source_format &&
         
     | 
| 
      
 37 
     | 
    
         
            +
                        @converter_chain.last[:output].to_sym == @target_format
         
     | 
| 
       38 
38 
     | 
    
         
             
                    end
         
     | 
| 
       39 
39 
     | 
    
         | 
| 
       40 
40 
     | 
    
         
             
                    def valid?
         
     | 
| 
         @@ -49,19 +49,14 @@ module Libis 
     | 
|
| 
       49 
49 
     | 
    
         
             
                      @converter_chain.size
         
     | 
| 
       50 
50 
     | 
    
         
             
                    end
         
     | 
| 
       51 
51 
     | 
    
         | 
| 
       52 
     | 
    
         
            -
                     
     | 
| 
      
 52 
     | 
    
         
            +
                    alias length size
         
     | 
| 
       53 
53 
     | 
    
         | 
| 
       54 
54 
     | 
    
         
             
                    def to_s
         
     | 
| 
       55 
     | 
    
         
            -
                       
     | 
| 
       56 
     | 
    
         
            -
             
     | 
| 
       57 
     | 
    
         
            -
                            "(#{node[:operations].each do |operation|
         
     | 
| 
       58 
     | 
    
         
            -
                              "#{operation[:method]}:#{operation[:argument]}"
         
     | 
| 
       59 
     | 
    
         
            -
                            end.join(',')})"}->-#{node[:output]}"
         
     | 
| 
       60 
     | 
    
         
            -
                      end.join('->-')}"
         
     | 
| 
      
 55 
     | 
    
         
            +
                      result = @source_format.to_s
         
     | 
| 
      
 56 
     | 
    
         
            +
                      result << @converter_chain.map { |node| node_to_s(node) }.join('->-')
         
     | 
| 
       61 
57 
     | 
    
         
             
                    end
         
     | 
| 
       62 
58 
     | 
    
         | 
| 
       63 
59 
     | 
    
         
             
                    def convert(src_file, target_file)
         
     | 
| 
       64 
     | 
    
         
            -
             
     | 
| 
       65 
60 
     | 
    
         
             
                      unless valid?
         
     | 
| 
       66 
61 
     | 
    
         
             
                        error 'Converter chain is not valid'
         
     | 
| 
       67 
62 
     | 
    
         
             
                        return nil
         
     | 
| 
         @@ -74,15 +69,13 @@ module Libis 
     | 
|
| 
       74 
69 
     | 
    
         | 
| 
       75 
70 
     | 
    
         
             
                      # noinspection RubyParenthesesAroundConditionInspection
         
     | 
| 
       76 
71 
     | 
    
         
             
                      conversion_success = @converter_chain.each_with_index do |node, i|
         
     | 
| 
       77 
     | 
    
         
            -
             
     | 
| 
       78 
72 
     | 
    
         
             
                        target_type = node[:output]
         
     | 
| 
       79 
73 
     | 
    
         
             
                        converter_class = node[:converter]
         
     | 
| 
       80 
74 
     | 
    
         
             
                        converter = converter_class.new
         
     | 
| 
       81 
75 
     | 
    
         | 
| 
       82 
     | 
    
         
            -
             
     | 
| 
       83 
     | 
    
         
            -
                        node[:operations].each do |operation|
         
     | 
| 
      
 76 
     | 
    
         
            +
                        node[:operations]&.each do |operation|
         
     | 
| 
       84 
77 
     | 
    
         
             
                          converter.send operation[:method], operation[:argument]
         
     | 
| 
       85 
     | 
    
         
            -
                        end 
     | 
| 
      
 78 
     | 
    
         
            +
                        end
         
     | 
| 
       86 
79 
     | 
    
         | 
| 
       87 
80 
     | 
    
         
             
                        target = target_file
         
     | 
| 
       88 
81 
     | 
    
         | 
| 
         @@ -103,7 +96,6 @@ module Libis 
     | 
|
| 
       103 
96 
     | 
    
         
             
                        result[:commands] << r.merge(converter: converter_class.name)
         
     | 
| 
       104 
97 
     | 
    
         | 
| 
       105 
98 
     | 
    
         
             
                        :success
         
     | 
| 
       106 
     | 
    
         
            -
             
     | 
| 
       107 
99 
     | 
    
         
             
                      end
         
     | 
| 
       108 
100 
     | 
    
         | 
| 
       109 
101 
     | 
    
         
             
                      result[:files] = [src_file] + xtra_files
         
     | 
| 
         @@ -113,16 +105,20 @@ module Libis 
     | 
|
| 
       113 
105 
     | 
    
         
             
                      end
         
     | 
| 
       114 
106 
     | 
    
         | 
| 
       115 
107 
     | 
    
         
             
                      conversion_success == :failed ? nil : result
         
     | 
| 
       116 
     | 
    
         
            -
             
     | 
| 
       117 
108 
     | 
    
         
             
                    end
         
     | 
| 
       118 
109 
     | 
    
         | 
| 
       119 
110 
     | 
    
         
             
                    def valid_chain_nodes(converter)
         
     | 
| 
       120 
     | 
    
         
            -
                      source_format =  
     | 
| 
      
 111 
     | 
    
         
            +
                      source_format = begin
         
     | 
| 
      
 112 
     | 
    
         
            +
                        @converter_chain.last[:output]
         
     | 
| 
      
 113 
     | 
    
         
            +
                      rescue StandardError
         
     | 
| 
      
 114 
     | 
    
         
            +
                        @source_format
         
     | 
| 
      
 115 
     | 
    
         
            +
                      end
         
     | 
| 
       121 
116 
     | 
    
         
             
                      nodes = []
         
     | 
| 
       122 
117 
     | 
    
         
             
                      if converter.input_types.include? source_format
         
     | 
| 
       123 
118 
     | 
    
         
             
                        converter.output_types(source_format).each do |format|
         
     | 
| 
       124 
     | 
    
         
            -
                          node = { 
     | 
| 
      
 119 
     | 
    
         
            +
                          node = { converter:, input: source_format, output: format }
         
     | 
| 
       125 
120 
     | 
    
         
             
                          next if node_exists?(node)
         
     | 
| 
      
 121 
     | 
    
         
            +
             
     | 
| 
       126 
122 
     | 
    
         
             
                          nodes << node
         
     | 
| 
       127 
123 
     | 
    
         
             
                        end
         
     | 
| 
       128 
124 
     | 
    
         
             
                      end
         
     | 
| 
         @@ -137,6 +133,7 @@ module Libis 
     | 
|
| 
       137 
133 
     | 
    
         
             
                      return nil unless node[:output] && node[:converter].output_types(source_format).include?(node[:output])
         
     | 
| 
       138 
134 
     | 
    
         
             
                      return nil unless node[:converter].input_types.include? source_format
         
     | 
| 
       139 
135 
     | 
    
         
             
                      return nil if node_exists?(node)
         
     | 
| 
      
 136 
     | 
    
         
            +
             
     | 
| 
       140 
137 
     | 
    
         
             
                      @converter_chain << node
         
     | 
| 
       141 
138 
     | 
    
         
             
                      # debug "Chain: #{self}"
         
     | 
| 
       142 
139 
     | 
    
         
             
                      self
         
     | 
| 
         @@ -145,15 +142,16 @@ module Libis 
     | 
|
| 
       145 
142 
     | 
    
         
             
                    def apply_operations
         
     | 
| 
       146 
143 
     | 
    
         
             
                      temp_chain = @converter_chain.reverse.ddup
         
     | 
| 
       147 
144 
     | 
    
         
             
                      applied = true
         
     | 
| 
       148 
     | 
    
         
            -
                      operations = @operations 
     | 
| 
      
 145 
     | 
    
         
            +
                      operations = @operations&.ddup || {}
         
     | 
| 
       149 
146 
     | 
    
         
             
                      while (operation = operations.shift)
         
     | 
| 
       150 
147 
     | 
    
         
             
                        method = operation.first.to_s.to_sym
         
     | 
| 
       151 
     | 
    
         
            -
                        applied &&=  
     | 
| 
      
 148 
     | 
    
         
            +
                        applied &&= temp_chain.each do |node|
         
     | 
| 
       152 
149 
     | 
    
         
             
                          next unless node[:converter].instance_methods.include?(method)
         
     | 
| 
      
 150 
     | 
    
         
            +
             
     | 
| 
       153 
151 
     | 
    
         
             
                          node[:operations] ||= []
         
     | 
| 
       154 
     | 
    
         
            -
                          node[:operations] << { 
     | 
| 
      
 152 
     | 
    
         
            +
                          node[:operations] << { method:, argument: operation.last }
         
     | 
| 
       155 
153 
     | 
    
         
             
                          break :found
         
     | 
| 
       156 
     | 
    
         
            -
                        end
         
     | 
| 
      
 154 
     | 
    
         
            +
                        end == :found
         
     | 
| 
       157 
155 
     | 
    
         
             
                      end
         
     | 
| 
       158 
156 
     | 
    
         
             
                      if applied && operations.empty?
         
     | 
| 
       159 
157 
     | 
    
         
             
                        @converter_chain = temp_chain.reverse
         
     | 
| 
         @@ -163,17 +161,27 @@ module Libis 
     | 
|
| 
       163 
161 
     | 
    
         
             
                      false
         
     | 
| 
       164 
162 
     | 
    
         
             
                    end
         
     | 
| 
       165 
163 
     | 
    
         | 
| 
       166 
     | 
    
         
            -
             
     | 
| 
       167 
164 
     | 
    
         
             
                    private
         
     | 
| 
       168 
165 
     | 
    
         | 
| 
      
 166 
     | 
    
         
            +
                    def node_to_s(node)
         
     | 
| 
      
 167 
     | 
    
         
            +
                      result = node[:converter].name.gsub(/^.*::/, '').to_s
         
     | 
| 
      
 168 
     | 
    
         
            +
                      unless node[:operations].empty?
         
     | 
| 
      
 169 
     | 
    
         
            +
                        result << '('
         
     | 
| 
      
 170 
     | 
    
         
            +
                        result << node[:operations].map do |operation|
         
     | 
| 
      
 171 
     | 
    
         
            +
                          "#{operation[:method]}:#{operation[:argument]}"
         
     | 
| 
      
 172 
     | 
    
         
            +
                        end.join(',')
         
     | 
| 
      
 173 
     | 
    
         
            +
                        result << ')'
         
     | 
| 
      
 174 
     | 
    
         
            +
                      end
         
     | 
| 
      
 175 
     | 
    
         
            +
                      result << '->-'
         
     | 
| 
      
 176 
     | 
    
         
            +
                      result << node[:output].to_s
         
     | 
| 
      
 177 
     | 
    
         
            +
                    end
         
     | 
| 
      
 178 
     | 
    
         
            +
             
     | 
| 
       169 
179 
     | 
    
         
             
                    def node_exists?(node)
         
     | 
| 
       170 
180 
     | 
    
         
             
                      @converter_chain.detect do |n|
         
     | 
| 
       171 
181 
     | 
    
         
             
                        n[:converter] == node[:converter] && n[:input] == node[:input] && n[:output] == node[:output]
         
     | 
| 
       172 
182 
     | 
    
         
             
                      end
         
     | 
| 
       173 
183 
     | 
    
         
             
                    end
         
     | 
| 
       174 
     | 
    
         
            -
             
     | 
| 
       175 
184 
     | 
    
         
             
                  end
         
     | 
| 
       176 
     | 
    
         
            -
             
     | 
| 
       177 
185 
     | 
    
         
             
                end
         
     | 
| 
       178 
186 
     | 
    
         
             
              end
         
     | 
| 
       179 
187 
     | 
    
         
             
            end
         
     | 
| 
         @@ -1,4 +1,4 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            #  
     | 
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            require_relative 'base'
         
     | 
| 
       4 
4 
     | 
    
         | 
| 
         @@ -9,20 +9,19 @@ require 'rexml/document' 
     | 
|
| 
       9 
9 
     | 
    
         
             
            module Libis
         
     | 
| 
       10 
10 
     | 
    
         
             
              module Format
         
     | 
| 
       11 
11 
     | 
    
         
             
                module Converter
         
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
12 
     | 
    
         
             
                  class EmailConverter < Libis::Format::Converter::Base
         
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
13 
     | 
    
         
             
                    def self.input_types
         
     | 
| 
       16 
     | 
    
         
            -
                      [ 
     | 
| 
      
 14 
     | 
    
         
            +
                      [:MSG]
         
     | 
| 
       17 
15 
     | 
    
         
             
                    end
         
     | 
| 
       18 
16 
     | 
    
         | 
| 
       19 
17 
     | 
    
         
             
                    def self.output_types(format = nil)
         
     | 
| 
       20 
18 
     | 
    
         
             
                      return [] unless input_types.include?(format)
         
     | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                      [:PDF]
         
     | 
| 
       22 
21 
     | 
    
         
             
                    end
         
     | 
| 
       23 
22 
     | 
    
         | 
| 
       24 
23 
     | 
    
         
             
                    def email_convert(_)
         
     | 
| 
       25 
     | 
    
         
            -
                      #force usage of this converter
         
     | 
| 
      
 24 
     | 
    
         
            +
                      # force usage of this converter
         
     | 
| 
       26 
25 
     | 
    
         
             
                    end
         
     | 
| 
       27 
26 
     | 
    
         | 
| 
       28 
27 
     | 
    
         
             
                    def convert(source, target, format, opts = {})
         
     | 
| 
         @@ -30,9 +29,7 @@ module Libis 
     | 
|
| 
       30 
29 
     | 
    
         | 
| 
       31 
30 
     | 
    
         
             
                      Format::Tool::MsgToPdf.run(source, target)
         
     | 
| 
       32 
31 
     | 
    
         
             
                    end
         
     | 
| 
       33 
     | 
    
         
            -
             
     | 
| 
       34 
32 
     | 
    
         
             
                  end
         
     | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
       36 
33 
     | 
    
         
             
                end
         
     | 
| 
       37 
34 
     | 
    
         
             
              end
         
     | 
| 
       38 
35 
     | 
    
         
             
            end
         
     | 
| 
         @@ -1,3 +1,5 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
       1 
3 
     | 
    
         
             
            require 'nokogiri'
         
     | 
| 
       2 
4 
     | 
    
         | 
| 
       3 
5 
     | 
    
         
             
            require_relative 'base'
         
     | 
| 
         @@ -7,15 +9,14 @@ require 'libis/format/tool/fop_pdf' 
     | 
|
| 
       7 
9 
     | 
    
         
             
            module Libis
         
     | 
| 
       8 
10 
     | 
    
         
             
              module Format
         
     | 
| 
       9 
11 
     | 
    
         
             
                module Converter
         
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
12 
     | 
    
         
             
                  class FopPdfConverter < Libis::Format::Converter::Base
         
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
13 
     | 
    
         
             
                    def self.input_types
         
     | 
| 
       14 
14 
     | 
    
         
             
                      [:XML]
         
     | 
| 
       15 
15 
     | 
    
         
             
                    end
         
     | 
| 
       16 
16 
     | 
    
         | 
| 
       17 
17 
     | 
    
         
             
                    def self.output_types(format = nil)
         
     | 
| 
       18 
     | 
    
         
            -
                      return []  
     | 
| 
      
 18 
     | 
    
         
            +
                      return [] if format && !input_types.include?(format)
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
       19 
20 
     | 
    
         
             
                      [:PDF]
         
     | 
| 
       20 
21 
     | 
    
         
             
                    end
         
     | 
| 
       21 
22 
     | 
    
         | 
| 
         @@ -30,11 +31,8 @@ module Libis 
     | 
|
| 
       30 
31 
     | 
    
         
             
                      FileUtils.mkpath(File.dirname(target))
         
     | 
| 
       31 
32 
     | 
    
         | 
| 
       32 
33 
     | 
    
         
             
                      Libis::Format::Tool::FopPdf.run(source, target)
         
     | 
| 
       33 
     | 
    
         
            -
             
     | 
| 
       34 
34 
     | 
    
         
             
                    end
         
     | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
       36 
35 
     | 
    
         
             
                  end
         
     | 
| 
       37 
     | 
    
         
            -
             
     | 
| 
       38 
36 
     | 
    
         
             
                end
         
     | 
| 
       39 
37 
     | 
    
         
             
              end
         
     | 
| 
       40 
38 
     | 
    
         
             
            end
         
     | 
| 
         @@ -1,4 +1,4 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            #  
     | 
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            require_relative 'base'
         
     | 
| 
       4 
4 
     | 
    
         
             
            require 'libis/format/identifier'
         
     | 
| 
         @@ -13,26 +13,26 @@ MiniMagick.configure do |config| 
     | 
|
| 
       13 
13 
     | 
    
         
             
              config.validate_on_create = false
         
     | 
| 
       14 
14 
     | 
    
         
             
              config.validate_on_write = false
         
     | 
| 
       15 
15 
     | 
    
         
             
              config.whiny = false
         
     | 
| 
      
 16 
     | 
    
         
            +
              config.tmpdir = Libis::Format::Config[:tempdir] || Dir.tmpdir
         
     | 
| 
       16 
17 
     | 
    
         
             
            end
         
     | 
| 
       17 
18 
     | 
    
         | 
| 
       18 
19 
     | 
    
         
             
            module Libis
         
     | 
| 
       19 
20 
     | 
    
         
             
              module Format
         
     | 
| 
       20 
21 
     | 
    
         
             
                module Converter
         
     | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
       22 
22 
     | 
    
         
             
                  # noinspection RubyTooManyInstanceVariablesInspection
         
     | 
| 
       23 
23 
     | 
    
         
             
                  class ImageConverter < Libis::Format::Converter::Base
         
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
24 
     | 
    
         
             
                    def self.input_types
         
     | 
| 
       26 
     | 
    
         
            -
                      [ 
     | 
| 
      
 25 
     | 
    
         
            +
                      %i[TIFF JPG PNG BMP GIF PDF JP2]
         
     | 
| 
       27 
26 
     | 
    
         
             
                    end
         
     | 
| 
       28 
27 
     | 
    
         | 
| 
       29 
28 
     | 
    
         
             
                    def self.output_types(format = nil)
         
     | 
| 
       30 
29 
     | 
    
         
             
                      return [] unless input_types.include?(format)
         
     | 
| 
       31 
     | 
    
         
            -
             
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
                      %i[TIFF JPG PNG BMP GIF PDF JP2]
         
     | 
| 
       32 
32 
     | 
    
         
             
                    end
         
     | 
| 
       33 
33 
     | 
    
         | 
| 
       34 
34 
     | 
    
         
             
                    def self.multipage?(format)
         
     | 
| 
       35 
     | 
    
         
            -
                      [ 
     | 
| 
      
 35 
     | 
    
         
            +
                      %i[PDF TIFF GIF PBM PGM PPM].include?(format)
         
     | 
| 
       36 
36 
     | 
    
         
             
                    end
         
     | 
| 
       37 
37 
     | 
    
         | 
| 
       38 
38 
     | 
    
         
             
                    def initialize
         
     | 
| 
         @@ -41,15 +41,15 @@ module Libis 
     | 
|
| 
       41 
41 
     | 
    
         
             
                    end
         
     | 
| 
       42 
42 
     | 
    
         | 
| 
       43 
43 
     | 
    
         
             
                    def image_convert(_)
         
     | 
| 
       44 
     | 
    
         
            -
                      #force usage of this converter
         
     | 
| 
      
 44 
     | 
    
         
            +
                      # force usage of this converter
         
     | 
| 
       45 
45 
     | 
    
         
             
                    end
         
     | 
| 
       46 
46 
     | 
    
         | 
| 
       47 
     | 
    
         
            -
                    def quiet( 
     | 
| 
       48 
     | 
    
         
            -
                      @quiet = !! 
     | 
| 
      
 47 
     | 
    
         
            +
                    def quiet(value)
         
     | 
| 
      
 48 
     | 
    
         
            +
                      @quiet = !!value
         
     | 
| 
       49 
49 
     | 
    
         
             
                    end
         
     | 
| 
       50 
50 
     | 
    
         | 
| 
       51 
     | 
    
         
            -
                    def page( 
     | 
| 
       52 
     | 
    
         
            -
                      @page =  
     | 
| 
      
 51 
     | 
    
         
            +
                    def page(number)
         
     | 
| 
      
 52 
     | 
    
         
            +
                      @page = number
         
     | 
| 
       53 
53 
     | 
    
         
             
                    end
         
     | 
| 
       54 
54 
     | 
    
         | 
| 
       55 
55 
     | 
    
         
             
                    def scale(percent)
         
     | 
| 
         @@ -122,33 +122,33 @@ module Libis 
     | 
|
| 
       122 
122 
     | 
    
         
             
                      @wm_gap = ((options[:gap] || 0.2).to_f * 100).to_i
         
     | 
| 
       123 
123 
     | 
    
         
             
                      rotation = 360 - (options[:rotation] || 30).to_i
         
     | 
| 
       124 
124 
     | 
    
         
             
                      @wm_image = MiniMagick::Image.new(options[:file]) if options[:file]
         
     | 
| 
       125 
     | 
    
         
            -
                       
     | 
| 
       126 
     | 
    
         
            -
             
     | 
| 
       127 
     | 
    
         
            -
             
     | 
| 
       128 
     | 
    
         
            -
             
     | 
| 
       129 
     | 
    
         
            -
             
     | 
| 
       130 
     | 
    
         
            -
             
     | 
| 
       131 
     | 
    
         
            -
             
     | 
| 
       132 
     | 
    
         
            -
             
     | 
| 
       133 
     | 
    
         
            -
             
     | 
| 
       134 
     | 
    
         
            -
             
     | 
| 
       135 
     | 
    
         
            -
             
     | 
| 
       136 
     | 
    
         
            -
             
     | 
| 
       137 
     | 
    
         
            -
             
     | 
| 
       138 
     | 
    
         
            -
             
     | 
| 
       139 
     | 
    
         
            -
                         
     | 
| 
       140 
     | 
    
         
            -
             
     | 
| 
       141 
     | 
    
         
            -
             
     | 
| 
       142 
     | 
    
         
            -
                         
     | 
| 
       143 
     | 
    
         
            -
             
     | 
| 
       144 
     | 
    
         
            -
             
     | 
| 
       145 
     | 
    
         
            -
                         
     | 
| 
       146 
     | 
    
         
            -
                        # noinspection RubyResolve
         
     | 
| 
       147 
     | 
    
         
            -
                        unless @wm_image.valid?
         
     | 
| 
       148 
     | 
    
         
            -
                          error "Problem creating watermark image '#{image}'."
         
     | 
| 
       149 
     | 
    
         
            -
                          @wm_image = nil
         
     | 
| 
       150 
     | 
    
         
            -
                        end
         
     | 
| 
      
 125 
     | 
    
         
            +
                      return if @wm_image&.valid?
         
     | 
| 
      
 126 
     | 
    
         
            +
             
     | 
| 
      
 127 
     | 
    
         
            +
                      image = options[:file] || (Dir::Tmpname.create(%w[wm_image .png]) { |_| })
         
     | 
| 
      
 128 
     | 
    
         
            +
                      # noinspection RubyResolve
         
     | 
| 
      
 129 
     | 
    
         
            +
                      MiniMagick::Tool::Convert.new do |convert|
         
     | 
| 
      
 130 
     | 
    
         
            +
                        # noinspection RubyLiteralArrayInspection
         
     | 
| 
      
 131 
     | 
    
         
            +
                        convert.quiet
         
     | 
| 
      
 132 
     | 
    
         
            +
                        convert.background 'transparent'
         
     | 
| 
      
 133 
     | 
    
         
            +
                        convert.size('2000x2000')
         
     | 
| 
      
 134 
     | 
    
         
            +
                        convert.gravity 'Center'
         
     | 
| 
      
 135 
     | 
    
         
            +
                        convert.font('Helvetica').fill('black').pointsize(72) # .stroke('black').strokewidth(1)
         
     | 
| 
      
 136 
     | 
    
         
            +
                        convert << "label:#{text}"
         
     | 
| 
      
 137 
     | 
    
         
            +
                        convert.rotate rotation
         
     | 
| 
      
 138 
     | 
    
         
            +
                        convert.trim.repage.+ # rubocop:disable Lint/Void
         
     | 
| 
      
 139 
     | 
    
         
            +
                        convert << image
         
     | 
| 
      
 140 
     | 
    
         
            +
                      end
         
     | 
| 
      
 141 
     | 
    
         
            +
                      if options[:file]
         
     | 
| 
      
 142 
     | 
    
         
            +
                        @wm_image = MiniMagick::Image.new(image)
         
     | 
| 
      
 143 
     | 
    
         
            +
                      else
         
     | 
| 
      
 144 
     | 
    
         
            +
                        @wm_image = MiniMagick::Image.open(image)
         
     | 
| 
      
 145 
     | 
    
         
            +
                        File.delete(image)
         
     | 
| 
       151 
146 
     | 
    
         
             
                      end
         
     | 
| 
      
 147 
     | 
    
         
            +
                      # noinspection RubyResolve
         
     | 
| 
      
 148 
     | 
    
         
            +
                      return if @wm_image.valid?
         
     | 
| 
      
 149 
     | 
    
         
            +
             
     | 
| 
      
 150 
     | 
    
         
            +
                      error "Problem creating watermark image '#{image}'."
         
     | 
| 
      
 151 
     | 
    
         
            +
                      @wm_image = nil
         
     | 
| 
       152 
152 
     | 
    
         
             
                    end
         
     | 
| 
       153 
153 
     | 
    
         | 
| 
       154 
154 
     | 
    
         
             
                    def convert(source, target, format, opts = {})
         
     | 
| 
         @@ -161,34 +161,33 @@ module Libis 
     | 
|
| 
       161 
161 
     | 
    
         
             
                        assemble_and_convert(source, target, format)
         
     | 
| 
       162 
162 
     | 
    
         | 
| 
       163 
163 
     | 
    
         
             
                      elsif File.directory?(source)
         
     | 
| 
       164 
     | 
    
         
            -
                        source_list = Dir[File.join(source, '**', '*')].reject {|p| File.directory? p}
         
     | 
| 
      
 164 
     | 
    
         
            +
                        source_list = Dir[File.join(source, '**', '*')].reject { |p| File.directory? p }
         
     | 
| 
       165 
165 
     | 
    
         | 
| 
       166 
166 
     | 
    
         
             
                        assemble_and_convert(source_list, target, format)
         
     | 
| 
       167 
167 
     | 
    
         | 
| 
       168 
168 
     | 
    
         
             
                      else
         
     | 
| 
       169 
169 
     | 
    
         | 
| 
       170 
     | 
    
         
            -
                        image = MiniMagick::Image.open(source) { |b| b.quiet }
         
     | 
| 
      
 170 
     | 
    
         
            +
                        image = MiniMagick::Image.open(source) { |b| b.quiet } # rubocop:disable Style/SymbolProc
         
     | 
| 
       171 
171 
     | 
    
         | 
| 
       172 
172 
     | 
    
         
             
                        if image.pages.size > 1
         
     | 
| 
       173 
173 
     | 
    
         
             
                          if @page
         
     | 
| 
       174 
174 
     | 
    
         
             
                            convert_image(image.pages[@page].path, target, format)
         
     | 
| 
       175 
175 
     | 
    
         
             
                          else
         
     | 
| 
       176 
176 
     | 
    
         
             
                            # noinspection RubyBlockToMethodReference
         
     | 
| 
       177 
     | 
    
         
            -
                            assemble_and_convert(image.pages.map 
     | 
| 
      
 177 
     | 
    
         
            +
                            assemble_and_convert(image.pages.map(&:path), target, format)
         
     | 
| 
       178 
178 
     | 
    
         
             
                          end
         
     | 
| 
       179 
179 
     | 
    
         
             
                        else
         
     | 
| 
       180 
180 
     | 
    
         
             
                          convert_image(source, target, format)
         
     | 
| 
       181 
181 
     | 
    
         
             
                        end
         
     | 
| 
       182 
182 
     | 
    
         
             
                      end
         
     | 
| 
       183 
     | 
    
         
            -
             
     | 
| 
       184 
     | 
    
         
            -
                      { 
     | 
| 
      
 183 
     | 
    
         
            +
             
     | 
| 
      
 184 
     | 
    
         
            +
                      {
         
     | 
| 
       185 
185 
     | 
    
         
             
                        files: [target],
         
     | 
| 
       186 
186 
     | 
    
         
             
                        converter: self.class.name
         
     | 
| 
       187 
187 
     | 
    
         
             
                      }
         
     | 
| 
       188 
188 
     | 
    
         
             
                    end
         
     | 
| 
       189 
189 
     | 
    
         | 
| 
       190 
190 
     | 
    
         
             
                    def assemble_and_convert(sources, target, format)
         
     | 
| 
       191 
     | 
    
         
            -
             
     | 
| 
       192 
191 
     | 
    
         
             
                      warn 'Received multiple images as input and single page format as target.' unless self.class.multipage?(format)
         
     | 
| 
       193 
192 
     | 
    
         
             
                      converted_pages = sources.inject([]) do |list, path|
         
     | 
| 
       194 
193 
     | 
    
         
             
                        # noinspection RubyArgCount
         
     | 
| 
         @@ -198,7 +197,7 @@ module Libis 
     | 
|
| 
       198 
197 
     | 
    
         
             
                      end
         
     | 
| 
       199 
198 
     | 
    
         
             
                      MiniMagick::Tool::Convert.new do |b|
         
     | 
| 
       200 
199 
     | 
    
         
             
                        b.append unless self.class.multipage?(format)
         
     | 
| 
       201 
     | 
    
         
            -
                        converted_pages.each {|page| b << page.path}
         
     | 
| 
      
 200 
     | 
    
         
            +
                        converted_pages.each { |page| b << page.path }
         
     | 
| 
       202 
201 
     | 
    
         
             
                        b << target
         
     | 
| 
       203 
202 
     | 
    
         
             
                      end
         
     | 
| 
       204 
203 
     | 
    
         
             
                      converted_pages.each do |temp_file|
         
     | 
| 
         @@ -210,17 +209,16 @@ module Libis 
     | 
|
| 
       210 
209 
     | 
    
         
             
                    protected
         
     | 
| 
       211 
210 
     | 
    
         | 
| 
       212 
211 
     | 
    
         
             
                    def convert_image(source, target, format)
         
     | 
| 
       213 
     | 
    
         
            -
             
     | 
| 
       214 
212 
     | 
    
         
             
                      image_info = nil
         
     | 
| 
       215 
     | 
    
         
            -
                      image_info = MiniMagick::Image::Info.new(source) {|b| b.quiet} if @wm_image
         
     | 
| 
      
 213 
     | 
    
         
            +
                      image_info = MiniMagick::Image::Info.new(source) { |b| b.quiet } if @wm_image # rubocop:disable Style/SymbolProc
         
     | 
| 
       216 
214 
     | 
    
         | 
| 
       217 
215 
     | 
    
         
             
                      MiniMagick::Tool::Convert.new do |convert|
         
     | 
| 
       218 
216 
     | 
    
         
             
                        convert.quiet if @quiet
         
     | 
| 
       219 
217 
     | 
    
         
             
                        if @wm_image
         
     | 
| 
       220 
218 
     | 
    
         
             
                          convert << @wm_image.path
         
     | 
| 
       221 
     | 
    
         
            -
                          convert.bordercolor('transparent').border("#{@wm_gap}%") if @wm_gap 
     | 
| 
      
 219 
     | 
    
         
            +
                          convert.bordercolor('transparent').border("#{@wm_gap}%") if @wm_gap.positive?
         
     | 
| 
       222 
220 
     | 
    
         
             
                          convert.filter('Lagrange')
         
     | 
| 
       223 
     | 
    
         
            -
                          convert.resize("#{image_info['width'] / @wm_tiles}x#{image_info['height'] / @wm_tiles}") if @wm_tiles 
     | 
| 
      
 221 
     | 
    
         
            +
                          convert.resize("#{image_info['width'] / @wm_tiles}x#{image_info['height'] / @wm_tiles}") if @wm_tiles.positive?
         
     | 
| 
       224 
222 
     | 
    
         
             
                          convert.resize("#{@wm_resize}%") if @wm_resize
         
     | 
| 
       225 
223 
     | 
    
         
             
                          convert.write('mpr:watermark').delete.+
         
     | 
| 
       226 
224 
     | 
    
         
             
                        end
         
     | 
| 
         @@ -229,7 +227,7 @@ module Libis 
     | 
|
| 
       229 
227 
     | 
    
         
             
                        convert << source
         
     | 
| 
       230 
228 
     | 
    
         
             
                        convert.flatten if @options[:flatten].nil? && format == :JPG
         
     | 
| 
       231 
229 
     | 
    
         
             
                        if @wm_image
         
     | 
| 
       232 
     | 
    
         
            -
                          if @wm_tiles >= 0  
     | 
| 
      
 230 
     | 
    
         
            +
                          if (@wm_tiles >= 0) && (@wm_tiles <= 1)
         
     | 
| 
       233 
231 
     | 
    
         
             
                            convert << 'mpr:watermark'
         
     | 
| 
       234 
232 
     | 
    
         
             
                          else
         
     | 
| 
       235 
233 
     | 
    
         
             
                            convert.stack do |stack|
         
     | 
| 
         @@ -242,15 +240,13 @@ module Libis 
     | 
|
| 
       242 
240 
     | 
    
         
             
                          convert.compose(@wm_composition).gravity(@wm_gravity).define("compose:args=#{@wm_opacity}%").composite
         
     | 
| 
       243 
241 
     | 
    
         
             
                        end
         
     | 
| 
       244 
242 
     | 
    
         | 
| 
       245 
     | 
    
         
            -
                        @flags.each {|f, v| v.is_a?(TrueClass) ? convert.send(f).+ : convert.send(f)}
         
     | 
| 
       246 
     | 
    
         
            -
                        if @delete_date
         
     | 
| 
       247 
     | 
    
         
            -
                          convert << '+set' << 'modify-date' << '+set' << 'create-date'
         
     | 
| 
       248 
     | 
    
         
            -
                        end
         
     | 
| 
      
 243 
     | 
    
         
            +
                        @flags.each { |f, v| v.is_a?(TrueClass) ? convert.send(f).+ : convert.send(f) }
         
     | 
| 
      
 244 
     | 
    
         
            +
                        convert << '+set' << 'modify-date' << '+set' << 'create-date' if @delete_date
         
     | 
| 
       249 
245 
     | 
    
         | 
| 
       250 
246 
     | 
    
         
             
                        colorspace = @options.delete(:colorspace) || 'sRGB'
         
     | 
| 
       251 
247 
     | 
    
         
             
                        unless @options.empty?
         
     | 
| 
       252 
248 
     | 
    
         
             
                          convert.colorspace('RGB')
         
     | 
| 
       253 
     | 
    
         
            -
                          @options.each {|o, v| convert.send(o, v)}
         
     | 
| 
      
 249 
     | 
    
         
            +
                          @options.each { |o, v| convert.send(o, v) }
         
     | 
| 
       254 
250 
     | 
    
         
             
                        end
         
     | 
| 
       255 
251 
     | 
    
         
             
                        convert.colorspace(colorspace)
         
     | 
| 
       256 
252 
     | 
    
         
             
                        convert.profile @profile if @profile
         
     | 
| 
         @@ -262,11 +258,8 @@ module Libis 
     | 
|
| 
       262 
258 
     | 
    
         
             
                      end
         
     | 
| 
       263 
259 
     | 
    
         | 
| 
       264 
260 
     | 
    
         
             
                      target
         
     | 
| 
       265 
     | 
    
         
            -
             
     | 
| 
       266 
261 
     | 
    
         
             
                    end
         
     | 
| 
       267 
     | 
    
         
            -
             
     | 
| 
       268 
262 
     | 
    
         
             
                  end
         
     | 
| 
       269 
     | 
    
         
            -
             
     | 
| 
       270 
263 
     | 
    
         
             
                end
         
     | 
| 
       271 
264 
     | 
    
         
             
              end
         
     | 
| 
       272 
     | 
    
         
            -
            end
         
     | 
| 
      
 265 
     | 
    
         
            +
            end
         
     |