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,49 @@
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 'fileutils'
21
+
22
+ require_relative '../error/io_error.rb'
23
+ require_relative 'command.rb'
24
+
25
+ class CopyFileCommand < Command
26
+ attr_reader :src
27
+
28
+ def initialize(src, dst)
29
+ super()
30
+ @src = src
31
+ @dst = dst
32
+ @errors.push IOError.new(:file_is_not_readable, nil, @src) unless File.readable? @src
33
+ @errors.push IOError.new(:file_is_not_writable, nil, @dst) unless not File.exist?(@dst) or File.writable?(@dst)
34
+ end
35
+
36
+ def run()
37
+ begin
38
+ FileUtils.cp(@src, @dst) if file_modified?(@src, @dst)
39
+ rescue StandardError => e
40
+ raise IOError.new(:unable_to_copy_file, e, [@src, @dst])
41
+ end
42
+ end
43
+
44
+ def to_s()
45
+ "copy #{File.basename @src}"
46
+ end
47
+
48
+ end
49
+ end
@@ -0,0 +1,85 @@
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
+
21
+ require_relative 'command.rb'
22
+
23
+ require_relative '../warning.rb'
24
+ require_relative '../error/io_error.rb'
25
+ require_relative '../printer/warning_printer.rb'
26
+
27
+ class CreateLinkCommand < Command
28
+
29
+ attr_reader :src, :dst, :dst_target
30
+
31
+ def initialize(src, dst)
32
+ super()
33
+ @src = src
34
+ begin
35
+ src_target = File.readlink @src
36
+
37
+ if src_target.start_with? '.' then
38
+ full_src_target = File.expand_path src_target, File.dirname(src)
39
+
40
+ if full_src_target.start_with? src_root()
41
+ @dst = dst
42
+ @dst_target = src_target
43
+ else
44
+ WarningPrinter.new(Warning.new(:skipping_link_because_it_points_outside_the_source_tree, @src)).print
45
+ end
46
+
47
+ uncount if skip?
48
+ end
49
+ rescue StandardError => e
50
+ @errors.push IOError.new(:unable_to_read_symbolic_link, e, @src)
51
+ end
52
+ end
53
+
54
+ def run()
55
+ begin
56
+ File.symlink @dst_target, @dst unless File.exist? @dst
57
+ rescue StandardError => e
58
+ raise IOError.new(:unable_to_create_symbolic_link, e, [@src, @dst])
59
+ end
60
+ end
61
+
62
+ def runnable?()
63
+ not (has_errors? or @dst.nil? or @dst_target.nil? or @src.nil?)
64
+ end
65
+
66
+ def to_s()
67
+ "link #{File.basename @dst} -> #{@dst_target}"
68
+ end
69
+
70
+ def skip?()
71
+ not modified_only? or not modified?
72
+ end
73
+
74
+ def modified?()
75
+ if File.exist? @dst then
76
+ absolute_dst = File.realpath @dst
77
+ target = File.expand_path(@dst_target, absolute_dst)
78
+ absolute_dst != target
79
+ else
80
+ true
81
+ end
82
+ end
83
+
84
+ end
85
+ end
@@ -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
+
21
+ require_relative 'command.rb'
22
+
23
+ class SkipCommand < Command
24
+ attr_reader :src, :message
25
+
26
+ def initialize(src, message)
27
+ super()
28
+ @src = src
29
+ @message = message
30
+ end
31
+
32
+ def has_message?()
33
+ not(@message.nil? or @message.empty?)
34
+ end
35
+
36
+ def run()
37
+ end
38
+
39
+ def skip?()
40
+ true
41
+ end
42
+
43
+ def to_s
44
+ "skipping #{File.basename @src}" + if has_message?
45
+ ": #{@message.to_s}"
46
+ end
47
+ end
48
+
49
+ end
50
+ end
@@ -1,191 +1,239 @@
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
- require 'yaml'
4
- require 'paru/pandoc'
5
-
6
- DEFAULT_CONFIG = YAML.load_file File.join(__dir__, 'default_configuration.yaml')
7
-
8
- FORMAT_TO_EXT = {
9
- 'native' => 'hs',
10
- 'markdown_strict' => 'markdown',
11
- 'markdown_phpextra' => 'markdown',
12
- 'markdown_github' => 'markdown',
13
- 'html5' => 'html',
14
- 'docx' => 'docx',
15
- 'latex' => 'tex'
16
- }
17
-
18
- class Configuration
19
-
20
- def initialize filename
21
- begin
22
- path = File.absolute_path filename
23
- settings = YAML.load_file path
24
- if settings['settings'] and settings['settings']['data-dir'] then
25
- data_dir = settings['settings']['data-dir']
26
- src_dir = File.dirname filename
27
- if data_dir.start_with? '.' then
28
- @data_dir = File.absolute_path data_dir, src_dir
29
- else
30
- @data_dir = data_dir
31
- end
32
- else
33
- @data_dir = File.join Dir.home, '.pandocomatic'
34
- end
35
- rescue Exception => e
36
- raise "Unable to load configuration file #{settings}: #{e.message}"
37
- end
21
+ require 'yaml'
22
+ require 'paru/pandoc'
38
23
 
39
- @settings = {'skip' => ['.*', 'pandocomatic.yaml']} # hidden files will always be skipped, as will pandocomatic configuration files
40
- @templates = {}
41
- @convert_patterns = {}
42
- configure settings
43
- end
24
+ DEFAULT_CONFIG = YAML.load_file File.join(__dir__, 'default_configuration.yaml')
44
25
 
45
- def reconfigure filename
46
- begin
47
- settings = YAML.load_file filename
48
- new_config = Marshal.load(Marshal.dump(self))
49
- new_config.configure settings
50
- new_config
51
- rescue Exception => e
52
- raise "Unable to load configuration file #{filename}: #{e.message}"
53
- end
54
- end
26
+ FORMAT_TO_EXT = {
27
+ 'native' => 'hs',
28
+ 'markdown_strict' => 'markdown',
29
+ 'markdown_phpextra' => 'markdown',
30
+ 'markdown_github' => 'markdown',
31
+ 'html5' => 'html',
32
+ 'docx' => 'docx',
33
+ 'latex' => 'tex'
34
+ }
55
35
 
56
- def configure settings
57
- reset_settings settings['settings'] if settings.has_key? 'settings'
58
- if settings.has_key? 'templates' then
59
- settings['templates'].each do |name, template|
60
- full_template = {
61
- 'glob' => [],
62
- 'preprocessors' => [],
63
- 'pandoc' => {},
64
- 'postprocessors' => []
65
- }
66
-
67
- reset_template name, full_template.merge(template)
68
- end
69
- end
70
- end
36
+ # Configuration describes a pandocomatic configuration.
37
+ class Configuration
71
38
 
72
- def marshal_dump
73
- [@data_dir, @settings, @templates, @convert_patterns]
74
- end
39
+ def initialize options, data_dir, configuration_file
40
+ @data_dir = data_dir
75
41
 
76
- def marshal_load array
77
- @data_dir, @settings, @templates, @convert_patterns = array
78
- end
79
-
80
- def skip? src
81
- if @settings.has_key? 'skip' then
82
- @settings['skip'].any? {|glob| File.fnmatch glob, File.basename(src)}
83
- else
84
- false
85
- end
86
- end
42
+ load configuration_file
43
+ end
87
44
 
88
- def convert? src
89
- @convert_patterns.values.flatten.any? {|glob| File.fnmatch glob, File.basename(src)}
90
- end
45
+ # Read a configuration file and create a pandocomatic configuration object
46
+ #
47
+ # @param [String] filename Path to the configuration yaml file
48
+ # @returns [Configuration] a pandocomatic configuration object
49
+ def load(filename)
50
+ begin
51
+ path = File.absolute_path filename
52
+ settings = YAML.load_file path
53
+ if settings['settings'] and settings['settings']['data-dir'] then
54
+ data_dir = settings['settings']['data-dir']
55
+ src_dir = File.dirname filename
56
+ if data_dir.start_with? '.' then
57
+ @data_dir = File.absolute_path data_dir, src_dir
58
+ else
59
+ @data_dir = data_dir
60
+ end
61
+ end
62
+ rescue StandardError => e
63
+ raise ConfigurationError.new(:unable_to_load_config_file, e, filename)
64
+ end
65
+
66
+ # hidden files will always be skipped, as will pandocomatic
67
+ # configuration files, unless explicitly set to not skip via the
68
+ # "unskip" option
69
+
70
+ @settings = {'skip' => ['.*', 'pandocomatic.yaml']}
71
+
72
+ @templates = {}
73
+ @convert_patterns = {}
74
+
75
+ configure settings
76
+ end
91
77
 
92
- def recursive?
93
- @settings['recursive']
94
- end
78
+ # Update this configuration with a configuration file
79
+ #
80
+ # @param [String] filename path to the configuration file
81
+ #
82
+ # @returns [Configuration] a new configuration
83
+ def reconfigure(filename)
84
+ begin
85
+ settings = YAML.load_file filename
86
+ new_config = Marshal.load(Marshal.dump(self))
87
+ new_config.configure settings
88
+ new_config
89
+ rescue StandardError => e
90
+ raise ConfigurationError.new(:unable_to_load_config_file, e, filename)
91
+ end
92
+ end
95
93
 
96
- def follow_links?
97
- @settings['follow_links']
98
- end
94
+ def configure(settings)
95
+ reset_settings settings['settings'] if settings.has_key? 'settings'
96
+ if settings.has_key? 'templates' then
97
+ settings['templates'].each do |name, template|
98
+ full_template = {
99
+ 'glob' => [],
100
+ 'preprocessors' => [],
101
+ 'pandoc' => {},
102
+ 'postprocessors' => []
103
+ }
99
104
 
100
- def set_extension dst
101
- dir = File.dirname dst
102
- ext = File.extname dst
103
- basename = File.basename dst, ext
104
- File.join dir, "#{basename}.#{find_extension dst}"
105
+ reset_template name, full_template.merge(template)
105
106
  end
107
+ end
108
+ end
106
109
 
107
- def find_extension dst
108
- template = determine_template dst
109
- if template.nil? then
110
- extension = 'html'
111
- else
112
- to = @templates[template]['pandoc']['to']
113
- extension = FORMAT_TO_EXT[to] || to
114
- end
115
- end
110
+ def marshal_dump()
111
+ [@data_dir, @settings, @templates, @convert_patterns]
112
+ end
116
113
 
117
- def get_template template_name
118
- @templates[template_name]
119
- end
114
+ def marshal_load(array)
115
+ @data_dir, @settings, @templates, @convert_patterns = array
116
+ end
120
117
 
121
- def determine_template src
122
- @convert_patterns.select do |template_name, globs|
123
- globs.any? {|glob| File.fnmatch glob, File.basename(src)}
124
- end.keys.first
125
- end
118
+ def to_s()
119
+ marshal_dump
120
+ end
126
121
 
127
- def update_path path, src_dir
128
- if path.start_with? './'
129
- # refers to a local (to file) dir
130
- File.join src_dir, path
131
- elsif path.start_with? '/' then
132
- path
133
- else
134
- # refers to data-dir
135
- File.join @data_dir, path
136
- end
137
- end
122
+ def skip?(src)
123
+ if @settings.has_key? 'skip' then
124
+ @settings['skip'].any? {|glob| File.fnmatch glob, File.basename(src)}
125
+ else
126
+ false
127
+ end
128
+ end
138
129
 
139
- private
140
-
141
- def reset_settings settings
142
- settings.each do |setting, value|
143
- case setting
144
- when 'skip'
145
- @settings['skip'] = @settings['skip'].concat(value).uniq
146
- when 'data-dir'
147
- next # skip data-dir setting; is set once in initialization
148
- else
149
- @settings[setting] = value
150
- end
151
- end
130
+ def convert?(src)
131
+ @convert_patterns.values.flatten.any? {|glob| File.fnmatch glob, File.basename(src)}
132
+ end
133
+
134
+ def recursive?()
135
+ @settings['recursive']
136
+ end
137
+
138
+ def follow_links?()
139
+ @settings['follow_links']
140
+ end
141
+
142
+ def set_extension(dst)
143
+ dir = File.dirname dst
144
+ ext = File.extname dst
145
+ basename = File.basename dst, ext
146
+ File.join dir, "#{basename}.#{find_extension dst}"
147
+ end
148
+
149
+ def find_extension(dst)
150
+ template = determine_template dst
151
+ if template.nil? then
152
+ extension = 'html'
153
+ else
154
+ # TODO: what if there is no pandoc.to?
155
+ to = @templates[template]['pandoc']['to']
156
+ extension = FORMAT_TO_EXT[to] || to
157
+ end
158
+ end
159
+
160
+ def has_template?(template_name)
161
+ @templates.has_key? template_name
162
+ end
163
+
164
+ def get_template(template_name)
165
+ @templates[template_name]
166
+ end
167
+
168
+ def determine_template(src)
169
+ @convert_patterns.select do |template_name, globs|
170
+ globs.any? {|glob| File.fnmatch glob, File.basename(src)}
171
+ end.keys.first
172
+ end
173
+
174
+ def update_path(path, src_dir)
175
+ if path.start_with? './'
176
+ # refers to a local (to file) dir
177
+ File.join src_dir, path
178
+ elsif path.start_with? '/' then
179
+ path
180
+ else
181
+ # refers to data-dir
182
+ File.join @data_dir, path
183
+ end
184
+ end
185
+
186
+ private
187
+
188
+ def reset_settings(settings)
189
+ settings.each do |setting, value|
190
+ case setting
191
+ when 'skip'
192
+ @settings['skip'] = @settings['skip'].concat(value).uniq
193
+ when 'data-dir'
194
+ next # skip data-dir setting; is set once in initialization
195
+ else
196
+ @settings[setting] = value
152
197
  end
198
+ end
199
+ end
153
200
 
154
- def reset_template name, template
155
- if @templates.has_key? name then
156
- fields = ['glob', 'preprocessors', 'pandoc', 'postprocessors']
157
- fields.each do |field|
158
- case field
159
- when 'preprocessors', 'postprocessors', 'glob'
160
- if @templates[name][field] then
161
- if template[field] then
162
- @templates[name][field].concat(template[field]).uniq!
163
- end
164
- else
165
- if template[field] then
166
- @templates[name][field] = template[field]
167
- end
168
- end
169
- when 'pandoc'
170
- if @templates[name][field] then
171
- if template[field] then
172
- @templates[name][field].merge! template[field]
173
- end
174
- else
175
- if template[field] then
176
- @templates[name][field] = template[field]
177
- end
178
- end
179
- end
180
- end
201
+ def reset_template(name, template)
202
+ if @templates.has_key? name then
203
+ fields = ['glob', 'preprocessors', 'pandoc', 'postprocessors']
204
+ fields.each do |field|
205
+ case field
206
+ when 'preprocessors', 'postprocessors', 'glob'
207
+ if @templates[name][field] then
208
+ if template[field] then
209
+ @templates[name][field].concat(template[field]).uniq!
210
+ end
181
211
  else
182
- @templates[name] = template
212
+ if template[field] then
213
+ @templates[name][field] = template[field]
214
+ end
183
215
  end
184
- if template.has_key? 'glob' then
185
- @convert_patterns[name] = template['glob']
216
+ when 'pandoc'
217
+ if @templates[name][field] then
218
+ if template[field] then
219
+ @templates[name][field].merge! template[field]
220
+ end
221
+ else
222
+ if template[field] then
223
+ @templates[name][field] = template[field]
224
+ end
186
225
  end
226
+ end
187
227
  end
228
+ else
229
+ @templates[name] = template
230
+ end
188
231
 
232
+ if template.has_key? 'glob' then
233
+ @convert_patterns[name] = template['glob']
234
+ end
189
235
  end
190
236
 
237
+ end
238
+
191
239
  end
@@ -0,0 +1,49 @@
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 CLIError < PandocomaticError
23
+
24
+ def template()
25
+ 'cli_error.txt'
26
+ end
27
+
28
+ # :no_input_given,
29
+ # :input_does_not_exist,
30
+ # :input_is_not_readable,
31
+
32
+ # :no_output_given,
33
+ # :output_is_not_a_directory,
34
+ # :output_is_not_a_file,
35
+ # :output_it_not_writable,
36
+
37
+ # :unknown_option,
38
+ # :too_many_options,
39
+ # :problematic_invocation,
40
+
41
+ # :data_dir_does_not_exist,
42
+ # :data_dir_is_not_a_directory,
43
+ # :data_dir_is_not_readable,
44
+
45
+ # :config_file_does_not_exist,
46
+ # :config_file_is_not_a_file,
47
+ # :config_file_is_not_readable
48
+ end
49
+ end
@@ -0,0 +1,39 @@
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 ConfigurationError < PandocomaticError
23
+
24
+ def template()
25
+ 'configuration_error.txt'
26
+ end
27
+
28
+ # :data_dir_does_not_exist,
29
+ # :data_dir_is_not_a_directory,
30
+ # :data_dir_is_not_readable,
31
+
32
+ # :config_file_does_not_exist,
33
+ # :config_file_is_not_a_file,
34
+ # :config_file_is_not_readable,
35
+ # :unable_to_load_config_file
36
+
37
+ # :no_such_template
38
+ end
39
+ end