pandocomatic 0.0.13 → 0.1.0.b

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/bin/pandocomatic +2 -78
  3. data/lib/pandocomatic/cli.rb +183 -0
  4. data/lib/pandocomatic/command/command.rb +113 -0
  5. data/lib/pandocomatic/command/convert_dir_command.rb +155 -0
  6. data/lib/pandocomatic/command/convert_file_command.rb +163 -0
  7. data/lib/pandocomatic/command/copy_file_command.rb +49 -0
  8. data/lib/pandocomatic/command/create_link_command.rb +85 -0
  9. data/lib/pandocomatic/command/skip_command.rb +50 -0
  10. data/lib/pandocomatic/configuration.rb +212 -164
  11. data/lib/pandocomatic/error/cli_error.rb +49 -0
  12. data/lib/pandocomatic/error/configuration_error.rb +39 -0
  13. data/lib/pandocomatic/error/io_error.rb +50 -0
  14. data/lib/pandocomatic/error/pandoc_error.rb +30 -0
  15. data/lib/pandocomatic/error/pandocomatic_error.rb +48 -0
  16. data/lib/pandocomatic/error/processor_error.rb +33 -0
  17. data/lib/pandocomatic/fileinfo_preprocessor.rb +34 -13
  18. data/lib/pandocomatic/pandoc_metadata.rb +66 -34
  19. data/lib/pandocomatic/pandocomatic.rb +176 -0
  20. data/lib/pandocomatic/printer/command_printer.rb +28 -0
  21. data/lib/pandocomatic/printer/configuration_errors_printer.rb +29 -0
  22. data/lib/pandocomatic/printer/error_printer.rb +34 -0
  23. data/lib/pandocomatic/printer/finish_printer.rb +44 -0
  24. data/lib/pandocomatic/printer/help_printer.rb +27 -0
  25. data/lib/pandocomatic/printer/printer.rb +43 -0
  26. data/lib/pandocomatic/printer/summary_printer.rb +35 -0
  27. data/lib/pandocomatic/printer/version_printer.rb +30 -0
  28. data/lib/pandocomatic/printer/views/cli_error.txt +12 -0
  29. data/lib/pandocomatic/printer/views/command.txt +1 -0
  30. data/lib/pandocomatic/printer/views/configuration_error.txt +1 -0
  31. data/lib/pandocomatic/printer/views/configuration_errors.txt +10 -0
  32. data/lib/pandocomatic/printer/views/error.txt +5 -0
  33. data/lib/pandocomatic/printer/views/finish.txt +1 -0
  34. data/lib/pandocomatic/printer/views/help.txt +135 -0
  35. data/lib/pandocomatic/printer/views/io_error.txt +12 -0
  36. data/lib/pandocomatic/printer/views/pandoc_error.txt +1 -0
  37. data/lib/pandocomatic/printer/views/processor_error.txt +6 -0
  38. data/lib/pandocomatic/printer/views/summary.txt +1 -0
  39. data/lib/pandocomatic/printer/views/version.txt +7 -0
  40. data/lib/pandocomatic/printer/views/warning.txt +1 -0
  41. data/lib/pandocomatic/printer/warning_printer.rb +33 -0
  42. data/lib/pandocomatic/processor.rb +25 -8
  43. data/lib/pandocomatic/warning.rb +36 -0
  44. metadata +79 -17
  45. data/lib/pandocomatic/dir_converter.rb +0 -119
  46. data/lib/pandocomatic/file_converter.rb +0 -99
@@ -0,0 +1,50 @@
1
+ #--
2
+ # Copyright 2017, Huub de Beer <Huub@heerdebeer.org>
3
+ #
4
+ # This file is part of pandocomatic.
5
+ #
6
+ # Pandocomatic is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by the
8
+ # Free Software Foundation, either version 3 of the License, or (at your
9
+ # option) any later version.
10
+ #
11
+ # Pandocomatic is distributed in the hope that it will be useful, but
12
+ # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13
+ # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14
+ # for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License along
17
+ # with pandocomatic. If not, see <http://www.gnu.org/licenses/>.
18
+ #++
19
+ module Pandocomatic
20
+ require_relative './pandocomatic_error.rb'
21
+
22
+ class IOError < PandocomaticError
23
+
24
+ def template()
25
+ 'io_error.txt'
26
+ end
27
+
28
+ # :file_does_not_exist file
29
+ # :file_is_not_a_file file
30
+ # :file_is_not_readable file
31
+ # :file_is_not_writable file
32
+
33
+ # :error_opening_file file
34
+ # :error_writing_file file
35
+
36
+ # :directory_does_not_exist dir
37
+ # :directory_is_not_a_directory dir
38
+ # :directory_is_not_readable dir
39
+ # :directory_is_not_writable dir
40
+
41
+ # :error_opening_directory dir
42
+ # :error_creating_directory dir
43
+
44
+ # :file_or_directory_does_not_exist src
45
+ # :unable_to_copy_file [src, dst]
46
+ # :unable_to_create_symbolic_link [src, dst]
47
+ # :unable_to_read_symbolic_link [src]
48
+ end
49
+
50
+ end
@@ -0,0 +1,30 @@
1
+ #--
2
+ # Copyright 2017, Huub de Beer <Huub@heerdebeer.org>
3
+ #
4
+ # This file is part of pandocomatic.
5
+ #
6
+ # Pandocomatic is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by the
8
+ # Free Software Foundation, either version 3 of the License, or (at your
9
+ # option) any later version.
10
+ #
11
+ # Pandocomatic is distributed in the hope that it will be useful, but
12
+ # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13
+ # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14
+ # for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License along
17
+ # with pandocomatic. If not, see <http://www.gnu.org/licenses/>.
18
+ #++
19
+ module Pandocomatic
20
+ require_relative './pandocomatic_error.rb'
21
+
22
+ class PandocError < PandocomaticError
23
+
24
+ def template()
25
+ 'pandoc_error.txt'
26
+ end
27
+
28
+ # :error_running_pandoc
29
+ end
30
+ end
@@ -0,0 +1,48 @@
1
+ #--
2
+ # Copyright 2017, Huub de Beer <Huub@heerdebeer.org>
3
+ #
4
+ # This file is part of pandocomatic.
5
+ #
6
+ # Pandocomatic is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by the
8
+ # Free Software Foundation, either version 3 of the License, or (at your
9
+ # option) any later version.
10
+ #
11
+ # Pandocomatic is distributed in the hope that it will be useful, but
12
+ # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13
+ # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14
+ # for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License along
17
+ # with pandocomatic. If not, see <http://www.gnu.org/licenses/>.
18
+ #++
19
+ module Pandocomatic
20
+ require_relative '../printer/error_printer.rb'
21
+
22
+ class PandocomaticError < StandardError
23
+ attr_reader :type, :error, :data
24
+ def initialize(type = :unknown, error = nil, data = nil)
25
+ super type.to_s.gsub("_", " ").capitalize
26
+ @type = type
27
+ @error = error
28
+ @data = data
29
+ end
30
+
31
+ def has_error?()
32
+ not @error.nil?
33
+ end
34
+
35
+ def has_data?()
36
+ not @data.nil?
37
+ end
38
+
39
+ def print()
40
+ ErrorPrinter.new(self).print
41
+ end
42
+
43
+ def show()
44
+ ErrorPrinter.new(self).to_s
45
+ end
46
+
47
+ end
48
+ end
@@ -0,0 +1,33 @@
1
+ #--
2
+ # Copyright 2017, Huub de Beer <Huub@heerdebeer.org>
3
+ #
4
+ # This file is part of pandocomatic.
5
+ #
6
+ # Pandocomatic is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by the
8
+ # Free Software Foundation, either version 3 of the License, or (at your
9
+ # option) any later version.
10
+ #
11
+ # Pandocomatic is distributed in the hope that it will be useful, but
12
+ # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13
+ # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14
+ # for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License along
17
+ # with pandocomatic. If not, see <http://www.gnu.org/licenses/>.
18
+ #++
19
+ module Pandocomatic
20
+ require_relative './pandocomatic_error.rb'
21
+
22
+ class ProcessorError < PandocomaticError
23
+
24
+ def template()
25
+ 'processor_error.txt'
26
+ end
27
+
28
+ # :script_does_not_exist script
29
+ # :script_is_not_executable script
30
+ # :error_processing_script [script, src]
31
+ end
32
+
33
+ end
@@ -1,16 +1,37 @@
1
+ #--
2
+ # Copyright 2014, 2015, 2016, 2017, Huub de Beer <Huub@heerdebeer.org>
3
+ #
4
+ # This file is part of pandocomatic.
5
+ #
6
+ # Pandocomatic is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by the
8
+ # Free Software Foundation, either version 3 of the License, or (at your
9
+ # option) any later version.
10
+ #
11
+ # Pandocomatic is distributed in the hope that it will be useful, but
12
+ # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13
+ # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14
+ # for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License along
17
+ # with pandocomatic. If not, see <http://www.gnu.org/licenses/>.
18
+ #++
1
19
  module Pandocomatic
2
- class FileInfoPreprocessor < Processor
3
- def self.run input, path
4
- created_at = File.stat(path).ctime
5
- modified_at = File.stat(path).mtime
6
- output = input
7
- output << "\n---\n"
8
- output << "fileinfo:\n"
9
- output << " path: '#{path}'\n"
10
- output << " created: #{created_at.strftime '%Y-%m-%d'}\n"
11
- output << " modified: #{modified_at.strftime '%Y-%m-%d'}\n"
12
- output << "..."
13
- output
14
- end
20
+
21
+ # FileInfoPreprocessor collects information about a file to be converted and
22
+ # mixes that information into that file's metadata. It is a default
23
+ # preprocessor.
24
+ class FileInfoPreprocessor < Processor
25
+ def self.run input, path
26
+ created_at = File.stat(path).ctime
27
+ modified_at = File.stat(path).mtime
28
+ output = input
29
+ output << "\n---\n"
30
+ output << "fileinfo:\n"
31
+ output << " path: '#{path}'\n"
32
+ output << " created: #{created_at.strftime '%Y-%m-%d'}\n"
33
+ output << " modified: #{modified_at.strftime '%Y-%m-%d'}\n"
34
+ output << "..."
15
35
  end
36
+ end
16
37
  end
@@ -1,64 +1,93 @@
1
+ #--
2
+ # Copyright 2014, 2015, 2016, 2017, Huub de Beer <Huub@heerdebeer.org>
3
+ #
4
+ # This file is part of pandocomatic.
5
+ #
6
+ # Pandocomatic is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by the
8
+ # Free Software Foundation, either version 3 of the License, or (at your
9
+ # option) any later version.
10
+ #
11
+ # Pandocomatic is distributed in the hope that it will be useful, but
12
+ # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13
+ # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14
+ # for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License along
17
+ # with pandocomatic. If not, see <http://www.gnu.org/licenses/>.
18
+ #++
1
19
  module Pandocomatic
2
20
 
3
21
  require 'json'
4
22
  require 'yaml'
5
- require 'paru/pandoc'
23
+ require 'paru'
6
24
 
7
- class PandocMetadata < Hash
25
+ require_relative './error/pandoc_error.rb'
26
+ require_relative './error/io_error.rb'
8
27
 
28
+ class PandocMetadata < Hash
29
+
9
30
  # Paru converters:
10
31
  # Note. When converting metadata back to the pandoc markdown format, you have
11
- # to use the option "standalone", otherwise the metadata is skipped
12
- PANDOC_2_JSON = Paru::Pandoc.new {from "markdown"; to "json"}
13
- JSON_2_PANDOC = Paru::Pandoc.new {from "json"; to "markdown"; standalone}
32
+ # to use the option 'standalone', otherwise the metadata is skipped
33
+ PANDOC_2_JSON = Paru::Pandoc.new {from 'markdown'; to 'json'}
34
+ JSON_2_PANDOC = Paru::Pandoc.new {from 'json'; to 'markdown'; standalone}
14
35
 
15
36
  # When converting a pandoc document to JSON, or vice versa, the JSON object
16
37
  # has the following three properties:
17
- VERSION = "pandoc-api-version"
18
- META = "meta"
19
- BLOCKS = "blocks"
20
-
21
- def initialize hash = {}
22
- super
23
- merge! hash
24
- end
38
+ VERSION = 'pandoc-api-version'
39
+ META = 'meta'
40
+ BLOCKS = 'blocks'
25
41
 
26
- # Collect the metadata embedded in the src file
27
- def self.load_file src
42
+ def self.extract_metadata input_document
28
43
  begin
29
- yaml_metadata = PandocMetadata.pandoc2yaml File.read(src)
30
- if yaml_metadata.empty? then
31
- return PandocMetadata.new
32
- else
33
- return PandocMetadata.new YAML.load(yaml_metadata)
34
- end
35
- rescue Exception => e
36
- raise "Error while reading metadata from #{src}; Are you sure it is a pandoc markdown file?\n#{e.message}"
44
+ pandoc2yaml File.read(input_document)
45
+ rescue StandardError => e
46
+ raise IOError.new(:error_opening_file, e, input_document)
37
47
  end
38
48
  end
39
49
 
40
- def self.pandoc2yaml document
41
- json = JSON.parse(PANDOC_2_JSON << document)
50
+ def self.pandoc2yaml(input)
42
51
  yaml = ""
52
+ begin
53
+ json = JSON.parse(PANDOC_2_JSON << input)
43
54
 
44
- version, metadata = json.values_at(VERSION, META)
55
+ version, metadata = json.values_at(VERSION, META)
45
56
 
46
- if not metadata.empty? then
47
- metadata_document = {
48
- VERSION => version,
49
- META => metadata,
50
- BLOCKS => []
51
- }
57
+ if not metadata.empty? then
58
+ metadata_document = {
59
+ VERSION => version,
60
+ META => metadata,
61
+ BLOCKS => []
62
+ }
52
63
 
53
- yaml = JSON_2_PANDOC << JSON.generate(metadata_document)
64
+ yaml = JSON_2_PANDOC << JSON.generate(metadata_document)
65
+ end
66
+ rescue Paru::Error => e
67
+ raise PandocError.new(:error_running_pandoc, e, input_document)
54
68
  end
55
69
 
56
70
  yaml
57
71
  end
58
72
 
73
+ # Collect the metadata embedded in the src file
74
+ def self.load_file src
75
+ yaml_metadata = extract_metadata src
76
+ if yaml_metadata.empty? then
77
+ return PandocMetadata.new
78
+ else
79
+ return PandocMetadata.new YAML.load(yaml_metadata)
80
+ end
81
+ end
82
+
83
+ def initialize hash = {}
84
+ super
85
+ merge! hash
86
+ end
87
+
59
88
  def has_template?
60
89
  self['pandocomatic'] and self['pandocomatic']['use-template'] and
61
- not self['pandocomatic']['use-template'].empty?
90
+ not self['pandocomatic']['use-template'].empty?
62
91
  end
63
92
 
64
93
  def template_name
@@ -69,6 +98,9 @@ module Pandocomatic
69
98
  end
70
99
  end
71
100
 
101
+ # TODO: allow a pandoc block outside a pandocomatic block to make
102
+ # pandocomatic work like paru's do-pandoc.rb.
103
+
72
104
  def has_pandoc_options?
73
105
  self['pandocomatic'] and self['pandocomatic']['pandoc']
74
106
  end
@@ -0,0 +1,176 @@
1
+ #--
2
+ # Copyright 2014, 2015, 2016, 2017, Huub de Beer <Huub@heerdebeer.org>
3
+ #
4
+ # This file is part of pandocomatic.
5
+ #
6
+ # Pandocomatic is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by the
8
+ # Free Software Foundation, either version 3 of the License, or (at your
9
+ # option) any later version.
10
+ #
11
+ # Pandocomatic is distributed in the hope that it will be useful, but
12
+ # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13
+ # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14
+ # for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License along
17
+ # with pandocomatic. If not, see <http://www.gnu.org/licenses/>.
18
+ #++
19
+ module Pandocomatic
20
+
21
+ require 'paru'
22
+
23
+ require_relative './error/pandocomatic_error.rb'
24
+ require_relative './error/pandoc_error.rb'
25
+ require_relative './error/configuration_error.rb'
26
+
27
+ require_relative './cli.rb'
28
+
29
+ require_relative './configuration.rb'
30
+
31
+ require_relative './printer/help_printer.rb'
32
+ require_relative './printer/version_printer.rb'
33
+ require_relative './printer/error_printer.rb'
34
+ require_relative './printer/configuration_errors_printer.rb'
35
+ require_relative './printer/finish_printer.rb'
36
+ require_relative './printer/summary_printer.rb'
37
+
38
+ require_relative './command/command.rb'
39
+ require_relative './command/convert_dir_command.rb'
40
+ require_relative './command/convert_file_command.rb'
41
+
42
+ class Pandocomatic
43
+ VERSION = [0, 1, 0]
44
+ CONFIG_FILE = 'pandocomatic.yaml'
45
+
46
+ def self.run(args)
47
+ begin
48
+ start_time = Time.now
49
+ options = CLI.parse args
50
+
51
+ if options[:version_given]
52
+ # The version option has precedence over all other options; if
53
+ # given, the version is printed
54
+ VersionPrinter.new(VERSION).print
55
+ elsif options[:help_given]
56
+ # The help option has precedence over all other options except the
57
+ # version option. If given, the help is printed.
58
+ HelpPrinter.new().print
59
+ else
60
+ # Run the pandocomatic converter configured according to the options
61
+ # given.
62
+ input = options[:input]
63
+ output = options[:output]
64
+ configuration = configure options
65
+
66
+ # Extend the command classes by setting the source tree root
67
+ # directory, and the options quiet and dry-run, which are used when
68
+ # executing a command: if dry-run the command is not actually
69
+ # executed and if quiet the command is not printed to STDOUT
70
+ src_root = File.absolute_path input
71
+ dry_run = if options[:dry_run_given] then options[:dry_run] else false end
72
+ quiet = if options[:quiet_given] then options[:quiet] else false end
73
+ modified_only = if options[:modified_only_given] then options[:modified_only_given] else false end
74
+
75
+ Command.reset(src_root, dry_run, quiet, modified_only)
76
+
77
+ # Pandocomatic has two modes: converting a directory tree or
78
+ # converting a single file. The mode is selected by the input.
79
+ if File.directory? input
80
+ command = ConvertDirCommand.new(configuration, input, output)
81
+ else
82
+ command = ConvertFileCommand.new(configuration, input, output)
83
+ end
84
+
85
+ # Notify the user about all configuration errors collected when
86
+ # determining the commands to run to perform this pandocomatic
87
+ # conversion.
88
+ if command.all_errors.size > 0
89
+ ConfigurationErrorsPrinter.new(command.all_errors).print
90
+ exit
91
+ end
92
+
93
+ # Pandocomatic is successfully configured: running the
94
+ # actual conversion now.
95
+ SummaryPrinter.new(command, input, output).print unless quiet
96
+
97
+ # Depending on the options dry-run and quiet, the command.execute
98
+ # method will actually performing the commands (dry-run = false) and
99
+ # print the command to STDOUT (quiet = false)
100
+ command.execute()
101
+
102
+ FinishPrinter.new(command, input, output, start_time).print unless quiet
103
+ end
104
+ rescue PandocomaticError => e
105
+ # Report the error and break off the conversion process.
106
+ ErrorPrinter.new(e).print
107
+ rescue StandardError => e
108
+ # An unexpected error has occurred; break off the program drastically
109
+ # for now
110
+ raise e
111
+ end
112
+ end
113
+
114
+ private
115
+
116
+ def self.determine_config_file(options, data_dir = Dir.pwd)
117
+ config_file = ''
118
+
119
+ if options[:config_given]
120
+ config_file = options[:config]
121
+ elsif Dir.entries(data_dir).include? CONFIG_FILE
122
+ config_file = File.join(data_dir, CONFIG_FILE)
123
+ elsif Dir.entries(Dir.pwd()).include? CONFIG_FILE
124
+ config_file = File.join(Dir.pwd(), CONFIG_FILE)
125
+ else
126
+ # Fall back to default configuration file distributed with
127
+ # pandocomatic
128
+ config_file = File.join(__dir__, 'default_configuration.yaml')
129
+ end
130
+
131
+ path = File.absolute_path config_file
132
+
133
+ raise ConfigurationError.new(:config_file_does_not_exist, nil, path) unless File.exist? path
134
+ raise ConfigurationError.new(:config_file_is_not_a_file, nil, path) unless File.file? path
135
+ raise ConfigurationError.new(:config_file_is_not_readable, nil, path) unless File.readable? path
136
+
137
+ path
138
+ end
139
+
140
+ def self.determine_data_dir(options)
141
+ data_dir = ''
142
+
143
+ if options[:data_dir_given]
144
+ data_dir = options[:data_dir]
145
+ else
146
+ # No data-dir option given: try to find the default one from pandoc
147
+ begin
148
+ data_dir = Paru::Pandoc.info()[:data_dir]
149
+ rescue Paru::Error => e
150
+ # If pandoc cannot be run, continuing probably does not work out
151
+ # anyway, so raise pandoc error
152
+ raise PandocError.new(:error_running_pandoc, e, data_dir)
153
+ rescue StandardError => e
154
+ # Ignore error and use the current working directory as default working directory
155
+ data_dir = Dir.pwd
156
+ end
157
+ end
158
+
159
+ # check if data directory does exist and is readable
160
+ path = File.absolute_path data_dir
161
+
162
+ raise ConfigurationError.new(:data_dir_does_not_exist, nil, path) unless File.exist? path
163
+ raise ConfigurationError.new(:data_dir_is_not_a_directory, nil, path) unless File.directory? path
164
+ raise ConfigurationError.new(:data_dir_is_not_readable, nil, path) unless File.readable? path
165
+
166
+ path
167
+ end
168
+
169
+ def self.configure(options)
170
+ data_dir = determine_data_dir options
171
+ config_file = determine_config_file options, data_dir
172
+ Configuration.new options, data_dir, config_file
173
+ end
174
+
175
+ end
176
+ end
@@ -0,0 +1,28 @@
1
+ #--
2
+ # Copyright 2017, Huub de Beer <Huub@heerdebeer.org>
3
+ #
4
+ # This file is part of pandocomatic.
5
+ #
6
+ # Pandocomatic is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by the
8
+ # Free Software Foundation, either version 3 of the License, or (at your
9
+ # option) any later version.
10
+ #
11
+ # Pandocomatic is distributed in the hope that it will be useful, but
12
+ # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13
+ # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14
+ # for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License along
17
+ # with pandocomatic. If not, see <http://www.gnu.org/licenses/>.
18
+ #++
19
+ module Pandocomatic
20
+ require_relative './printer.rb'
21
+
22
+ class CommandPrinter < Printer
23
+ def initialize(command)
24
+ super 'command.txt'
25
+ @command = command
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,29 @@
1
+ #--
2
+ # Copyright 2017, Huub de Beer <Huub@heerdebeer.org>
3
+ #
4
+ # This file is part of pandocomatic.
5
+ #
6
+ # Pandocomatic is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by the
8
+ # Free Software Foundation, either version 3 of the License, or (at your
9
+ # option) any later version.
10
+ #
11
+ # Pandocomatic is distributed in the hope that it will be useful, but
12
+ # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13
+ # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14
+ # for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License along
17
+ # with pandocomatic. If not, see <http://www.gnu.org/licenses/>.
18
+ #++
19
+ module Pandocomatic
20
+ require_relative './printer.rb'
21
+
22
+ class ConfigurationErrorsPrinter < Printer
23
+ def initialize(errors)
24
+ super 'configuration_errors.txt'
25
+ @errors = errors
26
+ end
27
+
28
+ end
29
+ end
@@ -0,0 +1,34 @@
1
+ #--
2
+ # Copyright 2017, Huub de Beer <Huub@heerdebeer.org>
3
+ #
4
+ # This file is part of pandocomatic.
5
+ #
6
+ # Pandocomatic is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by the
8
+ # Free Software Foundation, either version 3 of the License, or (at your
9
+ # option) any later version.
10
+ #
11
+ # Pandocomatic is distributed in the hope that it will be useful, but
12
+ # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13
+ # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14
+ # for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License along
17
+ # with pandocomatic. If not, see <http://www.gnu.org/licenses/>.
18
+ #++
19
+ module Pandocomatic
20
+ require_relative './printer.rb'
21
+
22
+ class ErrorPrinter < Printer
23
+ def initialize(error)
24
+ template = if error.respond_to? :template then error.template else 'error.txt' end
25
+ super template
26
+ @error = error
27
+ end
28
+
29
+ def print
30
+ warn to_s
31
+ end
32
+
33
+ end
34
+ end
@@ -0,0 +1,44 @@
1
+ #--
2
+ # Copyright 2017, Huub de Beer <Huub@heerdebeer.org>
3
+ #
4
+ # This file is part of pandocomatic.
5
+ #
6
+ # Pandocomatic is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by the
8
+ # Free Software Foundation, either version 3 of the License, or (at your
9
+ # option) any later version.
10
+ #
11
+ # Pandocomatic is distributed in the hope that it will be useful, but
12
+ # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13
+ # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14
+ # for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License along
17
+ # with pandocomatic. If not, see <http://www.gnu.org/licenses/>.
18
+ #++
19
+ module Pandocomatic
20
+ require_relative './summary_printer.rb'
21
+
22
+ class FinishPrinter < SummaryPrinter
23
+ MINUTE = 60 # seconds
24
+ def initialize(command, input, output, start_time)
25
+ super command, input, output
26
+ set_template 'finish.txt'
27
+
28
+ @start_time = start_time
29
+ @end_time = Time.now
30
+ end
31
+
32
+ def duration()
33
+ seconds = @end_time - @start_time
34
+ if seconds > MINUTE
35
+ minutes = (seconds / MINUTE).floor
36
+ seconds = seconds - (minutes * MINUTE)
37
+ "#{minutes} minute#{'s' if minutes != 1} and #{seconds.round(1)} second#{'s' if seconds != 1}"
38
+ else
39
+ "#{seconds.round(1)} second#{'s' if seconds != 1}"
40
+ end
41
+ end
42
+
43
+ end
44
+ end