pandocomatic 0.1.4.10 → 0.1.4.11
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/lib/pandocomatic/command/command.rb +0 -1
- data/lib/pandocomatic/command/convert_dir_command.rb +26 -0
- data/lib/pandocomatic/command/convert_file_command.rb +12 -0
- data/lib/pandocomatic/command/convert_file_multiple_command.rb +15 -19
- data/lib/pandocomatic/command/convert_list_command.rb +23 -0
- data/lib/pandocomatic/command/copy_file_command.rb +12 -0
- data/lib/pandocomatic/command/create_link_command.rb +26 -0
- data/lib/pandocomatic/command/skip_command.rb +22 -0
- data/lib/pandocomatic/configuration.rb +11 -3
- data/lib/pandocomatic/error/cli_error.rb +2 -0
- data/lib/pandocomatic/error/configuration_error.rb +2 -0
- data/lib/pandocomatic/error/io_error.rb +2 -0
- data/lib/pandocomatic/error/pandoc_error.rb +3 -1
- data/lib/pandocomatic/error/pandocomatic_error.rb +27 -0
- data/lib/pandocomatic/error/processor_error.rb +2 -0
- data/lib/pandocomatic/pandocomatic.rb +160 -152
- data/lib/pandocomatic/printer/command_printer.rb +2 -0
- data/lib/pandocomatic/printer/configuration_errors_printer.rb +2 -0
- data/lib/pandocomatic/printer/error_printer.rb +3 -0
- data/lib/pandocomatic/printer/finish_printer.rb +6 -1
- data/lib/pandocomatic/printer/help_printer.rb +2 -0
- data/lib/pandocomatic/printer/printer.rb +29 -17
- data/lib/pandocomatic/printer/summary_printer.rb +29 -15
- data/lib/pandocomatic/printer/version_printer.rb +2 -0
- data/lib/pandocomatic/printer/warning_printer.rb +15 -10
- data/lib/pandocomatic/processor.rb +19 -7
- data/lib/pandocomatic/processors/fileinfo_preprocessor.rb +26 -24
- data/lib/pandocomatic/processors/metadata_preprocessor.rb +17 -16
- data/lib/pandocomatic/warning.rb +19 -12
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0f420d7805d00a32e2c3d512ef5e417e0d271747
|
4
|
+
data.tar.gz: 1f24021a1464b79431dc35fc7d65e208074e3914
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 831b0ebc2839e740b9d66a0b80938ec4ba98da4d0a7ba68101ff5293f58d5604d9991154c01af16f2a62c33469b97e10b47c9f433e9997cd8cb45106ea03f413
|
7
|
+
data.tar.gz: 70b08044e7a6810d4ed48f5d787c2fe182917aeaa3c8d1b256da5bd80a3652b313c61561825bb7e1e6ffae0b4aebff346242eaf1f8b95d79e47e6109a4c8cfeb
|
@@ -28,10 +28,26 @@ module Pandocomatic
|
|
28
28
|
require_relative 'copy_file_command.rb'
|
29
29
|
require_relative 'skip_command.rb'
|
30
30
|
|
31
|
+
# Commmand to convert a directory
|
32
|
+
#
|
33
|
+
# @!attribute config
|
34
|
+
# @return [Configuration] configuration to use when converting directory
|
35
|
+
#
|
36
|
+
# @!attribute src_dir
|
37
|
+
# @return [String] the source directory to convert from
|
38
|
+
#
|
39
|
+
# @!attribute dst_dir
|
40
|
+
# @return [String] the destination directory to convert to
|
31
41
|
class ConvertDirCommand < ConvertListCommand
|
32
42
|
|
33
43
|
attr_reader :config, :src_dir, :dst_dir
|
34
44
|
|
45
|
+
# Create a new ConvertDirCommand
|
46
|
+
#
|
47
|
+
# @param current_config [Configuration] The configuration of pandocomatic
|
48
|
+
# as it was before entering the source directory
|
49
|
+
# @param src_dir [String] the directory to convert
|
50
|
+
# @param dst_dir [String] the directory to convert to
|
35
51
|
def initialize(current_config, src_dir, dst_dir)
|
36
52
|
super()
|
37
53
|
@src_dir = src_dir
|
@@ -87,18 +103,28 @@ module Pandocomatic
|
|
87
103
|
uncount if skip?
|
88
104
|
end
|
89
105
|
|
106
|
+
# Should this command be skipped?
|
107
|
+
#
|
108
|
+
# @return [Boolean] True if this command has no sub commands
|
90
109
|
def skip?()
|
91
110
|
@subcommands.empty?
|
92
111
|
end
|
93
112
|
|
113
|
+
# Converts this command a directory?
|
114
|
+
#
|
115
|
+
# @return [Boolean] true
|
94
116
|
def directory?()
|
95
117
|
true
|
96
118
|
end
|
97
119
|
|
120
|
+
# Convert this command to a String representation for a Printer
|
121
|
+
#
|
122
|
+
# @return [String]
|
98
123
|
def to_s()
|
99
124
|
"convert #{@src_dir}" + '; ' + if create_directory? then 'create and ' else '' end + "enter #{@dst_dir}"
|
100
125
|
end
|
101
126
|
|
127
|
+
# Run this command
|
102
128
|
def run()
|
103
129
|
begin
|
104
130
|
Dir.mkdir @dst_dir if create_directory?
|
@@ -35,8 +35,20 @@ module Pandocomatic
|
|
35
35
|
|
36
36
|
require_relative 'command.rb'
|
37
37
|
|
38
|
+
# Output formats used in pandocomatic
|
38
39
|
OUTPUT_FORMATS = ["docx", "odt", "pdf", "beamer"]
|
39
40
|
|
41
|
+
# Command to convert a file
|
42
|
+
#
|
43
|
+
# @!attribute config
|
44
|
+
# @return [Configuration] the configuration of pandocomatic used to
|
45
|
+
# convert the file
|
46
|
+
#
|
47
|
+
# @!attribute src
|
48
|
+
# @return [String] the path to the file to convert
|
49
|
+
#
|
50
|
+
# @!attribute dst
|
51
|
+
# @return [String] the path to the output file
|
40
52
|
class ConvertFileCommand < Command
|
41
53
|
|
42
54
|
attr_reader :config, :src, :dst
|
@@ -27,10 +27,21 @@ module Pandocomatic
|
|
27
27
|
require_relative 'copy_file_command.rb'
|
28
28
|
require_relative 'skip_command.rb'
|
29
29
|
|
30
|
+
# Create a command to convert one file multiple times
|
31
|
+
#
|
32
|
+
# @!attribute subcommands
|
33
|
+
# @return [Command[]] the subcommands to execute when running this
|
34
|
+
# ConvertFileMultipleCommand
|
30
35
|
class ConvertFileMultipleCommand < ConvertListCommand
|
31
36
|
|
32
37
|
attr_reader :subcommands
|
33
38
|
|
39
|
+
# Create a new ConvertFileMultipleCommand
|
40
|
+
#
|
41
|
+
# @param config [Configuration] Pandocomatic's configuration used to
|
42
|
+
# convert the source file
|
43
|
+
# @param src [String] the file to convert
|
44
|
+
# @param dst [String] the output file
|
34
45
|
def initialize(config, src, dst)
|
35
46
|
super()
|
36
47
|
@config = config
|
@@ -48,30 +59,15 @@ module Pandocomatic
|
|
48
59
|
end
|
49
60
|
end
|
50
61
|
|
51
|
-
def push(command)
|
52
|
-
@subcommands.push command
|
53
|
-
end
|
54
|
-
|
55
|
-
def skip?()
|
56
|
-
@subcommands.empty?
|
57
|
-
end
|
58
|
-
|
59
|
-
def count()
|
60
|
-
@subcommands.reduce(if skip? then 0 else 1 end) do |total, subcommand|
|
61
|
-
total += subcommand.count
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
def all_errors()
|
66
|
-
@subcommands.reduce(@errors) do |total, subcommand|
|
67
|
-
total += subcommand.all_errors
|
68
|
-
end
|
69
|
-
end
|
70
62
|
|
63
|
+
# A string representation of this command
|
64
|
+
#
|
65
|
+
# @return [String]
|
71
66
|
def to_s()
|
72
67
|
"converting #{@src} #{@subcommands.size} time#{'s' if @subcommands.size != 1}:"
|
73
68
|
end
|
74
69
|
|
70
|
+
# Execute this ConvertFileMultipleCommand
|
75
71
|
def execute()
|
76
72
|
if not @subcommands.empty?
|
77
73
|
CommandPrinter.new(self).print unless quiet? or @subcommands.size == 1
|
@@ -26,43 +26,66 @@ module Pandocomatic
|
|
26
26
|
require_relative 'copy_file_command.rb'
|
27
27
|
require_relative 'skip_command.rb'
|
28
28
|
|
29
|
+
# A Command with sub commands
|
30
|
+
#
|
31
|
+
# @!attribute subcommands
|
32
|
+
# @return [Command[]] the subcommands of this ConvertListCommand
|
29
33
|
class ConvertListCommand < Command
|
30
34
|
|
31
35
|
attr_reader :subcommands
|
32
36
|
|
37
|
+
# Create a new ConvertListCommand
|
33
38
|
def initialize()
|
34
39
|
super()
|
35
40
|
@subcommands = []
|
36
41
|
end
|
37
42
|
|
43
|
+
# Push a command to this ConvertListCommand
|
44
|
+
#
|
45
|
+
# @param command [Command] command to add
|
38
46
|
def push(command)
|
39
47
|
@subcommands.push command
|
40
48
|
end
|
41
49
|
|
50
|
+
# Skip this ConvertListCommand when there are no sub commands
|
51
|
+
#
|
52
|
+
# @return [Boolean]
|
42
53
|
def skip?()
|
43
54
|
@subcommands.empty?
|
44
55
|
end
|
45
56
|
|
57
|
+
# The number of commands to execute when this ConvertListCommand
|
58
|
+
# is executed.
|
46
59
|
def count()
|
47
60
|
@subcommands.reduce(if skip? then 0 else 1 end) do |total, subcommand|
|
48
61
|
total += subcommand.count
|
49
62
|
end
|
50
63
|
end
|
51
64
|
|
65
|
+
# Get a list of all errors generated while running this command
|
66
|
+
#
|
67
|
+
# @return [Error[]]
|
52
68
|
def all_errors()
|
53
69
|
@subcommands.reduce(@errors) do |total, subcommand|
|
54
70
|
total += subcommand.all_errors
|
55
71
|
end
|
56
72
|
end
|
57
73
|
|
74
|
+
# A string representation of this ConvertListCommand
|
75
|
+
#
|
76
|
+
# @return [String]
|
58
77
|
def to_s()
|
59
78
|
"converting #{@subcommands.size} items:"
|
60
79
|
end
|
61
80
|
|
81
|
+
# Can this command have multiple commands?
|
82
|
+
#
|
83
|
+
# @return [Boolean] true
|
62
84
|
def multiple?
|
63
85
|
true
|
64
86
|
end
|
65
87
|
|
88
|
+
# Execute this ConvertListCommand
|
66
89
|
def execute()
|
67
90
|
if not @subcommands.empty?
|
68
91
|
CommandPrinter.new(self).print unless quiet?
|
@@ -22,9 +22,17 @@ module Pandocomatic
|
|
22
22
|
require_relative '../error/io_error.rb'
|
23
23
|
require_relative 'command.rb'
|
24
24
|
|
25
|
+
# A command to copy a file
|
26
|
+
#
|
27
|
+
# @!attribute src
|
28
|
+
# @return [String] path to the file to copy
|
25
29
|
class CopyFileCommand < Command
|
26
30
|
attr_reader :src
|
27
31
|
|
32
|
+
# Create a new CopyFileCommand
|
33
|
+
#
|
34
|
+
# @param src [String] path to the file to copy
|
35
|
+
# @param dst [String] path to the place to copy the source file to
|
28
36
|
def initialize(src, dst)
|
29
37
|
super()
|
30
38
|
@src = src
|
@@ -33,6 +41,7 @@ module Pandocomatic
|
|
33
41
|
@errors.push IOError.new(:file_is_not_writable, nil, @dst) unless not File.exist?(@dst) or File.writable?(@dst)
|
34
42
|
end
|
35
43
|
|
44
|
+
# Run this CopyFileCommand
|
36
45
|
def run()
|
37
46
|
begin
|
38
47
|
FileUtils.cp(@src, @dst) if file_modified?(@src, @dst)
|
@@ -41,6 +50,9 @@ module Pandocomatic
|
|
41
50
|
end
|
42
51
|
end
|
43
52
|
|
53
|
+
# A string representation of this CopyFileCommand
|
54
|
+
#
|
55
|
+
# @return [String]
|
44
56
|
def to_s()
|
45
57
|
"copy #{File.basename @src}"
|
46
58
|
end
|
@@ -24,10 +24,24 @@ module Pandocomatic
|
|
24
24
|
require_relative '../error/io_error.rb'
|
25
25
|
require_relative '../printer/warning_printer.rb'
|
26
26
|
|
27
|
+
# A command to create a link to a file
|
28
|
+
#
|
29
|
+
# @!attribute src
|
30
|
+
# @return [String] the path to the file to link to
|
31
|
+
#
|
32
|
+
# @!attribute dst
|
33
|
+
# @return [String] the link name to create
|
34
|
+
#
|
35
|
+
# @!attribute dst_target
|
36
|
+
# @return [String] the link in the destination tree to link to
|
27
37
|
class CreateLinkCommand < Command
|
28
38
|
|
29
39
|
attr_reader :src, :dst, :dst_target
|
30
40
|
|
41
|
+
# Create a new CreateLinkCommand
|
42
|
+
#
|
43
|
+
# @param src [String] the path to the file to link
|
44
|
+
# @param dst [String] the path to the name of the link to create
|
31
45
|
def initialize(src, dst)
|
32
46
|
super()
|
33
47
|
@src = src
|
@@ -51,6 +65,7 @@ module Pandocomatic
|
|
51
65
|
end
|
52
66
|
end
|
53
67
|
|
68
|
+
# Run this CreateLinkCommand
|
54
69
|
def run()
|
55
70
|
begin
|
56
71
|
File.symlink @dst_target, @dst unless File.exist? @dst
|
@@ -59,18 +74,29 @@ module Pandocomatic
|
|
59
74
|
end
|
60
75
|
end
|
61
76
|
|
77
|
+
# Can this CreateLinkCommand be run?
|
78
|
+
#
|
79
|
+
# @return [Boolean] True if there are no errors and both source and
|
80
|
+
# destination do exist
|
62
81
|
def runnable?()
|
63
82
|
not (has_errors? or @dst.nil? or @dst_target.nil? or @src.nil?)
|
64
83
|
end
|
65
84
|
|
85
|
+
# Create a string representation of this CreateLinkCommand
|
66
86
|
def to_s()
|
67
87
|
"link #{File.basename @dst} -> #{@dst_target}"
|
68
88
|
end
|
69
89
|
|
90
|
+
# Should this CreateLinkCommand be skipped?
|
91
|
+
#
|
92
|
+
# @return [Boolean]
|
70
93
|
def skip?()
|
71
94
|
not modified_only? or not modified?
|
72
95
|
end
|
73
96
|
|
97
|
+
# Has the source file been modified?
|
98
|
+
#
|
99
|
+
# @return [Boolean]
|
74
100
|
def modified?()
|
75
101
|
if File.exist? @dst then
|
76
102
|
absolute_dst = File.realpath @dst
|
@@ -20,26 +20,48 @@ module Pandocomatic
|
|
20
20
|
|
21
21
|
require_relative 'command.rb'
|
22
22
|
|
23
|
+
# A command to skip a file or directory
|
24
|
+
#
|
25
|
+
# @!attribute src
|
26
|
+
# @return [String] the file or directory to skip
|
27
|
+
#
|
28
|
+
# @!attribute message
|
29
|
+
# @return [String] message explaining why the file or directory is being skipped.
|
23
30
|
class SkipCommand < Command
|
24
31
|
attr_reader :src, :message
|
25
32
|
|
33
|
+
# Create a new SkipCommand
|
34
|
+
#
|
35
|
+
# @param src [String] path to the file to skip
|
36
|
+
# @param message [String] the message explaining why this file is being
|
37
|
+
# skipped
|
26
38
|
def initialize(src, message)
|
27
39
|
super()
|
28
40
|
@src = src
|
29
41
|
@message = message
|
30
42
|
end
|
31
43
|
|
44
|
+
# Has this SkipCommand a message?
|
45
|
+
#
|
46
|
+
# @return [Boolean]
|
32
47
|
def has_message?()
|
33
48
|
not(@message.nil? or @message.empty?)
|
34
49
|
end
|
35
50
|
|
51
|
+
# 'Run' this SkipCommand by doing nothing
|
36
52
|
def run()
|
37
53
|
end
|
38
54
|
|
55
|
+
# Skip this command
|
56
|
+
#
|
57
|
+
# @return [Boolean] true
|
39
58
|
def skip?()
|
40
59
|
true
|
41
60
|
end
|
42
61
|
|
62
|
+
# A string representation of this SkipCommand
|
63
|
+
#
|
64
|
+
# @return [String]
|
43
65
|
def to_s
|
44
66
|
"skipping #{File.basename @src}" + if has_message?
|
45
67
|
": #{@message.to_s}"
|
@@ -282,7 +282,7 @@ module Pandocomatic
|
|
282
282
|
|
283
283
|
# Reset the settings for pandocomatic based on a new settings Hash
|
284
284
|
#
|
285
|
-
# @settings [Hash] the new settings to use to reset the settings in
|
285
|
+
# @param settings [Hash] the new settings to use to reset the settings in
|
286
286
|
# this Configuration with.
|
287
287
|
def reset_settings(settings)
|
288
288
|
settings.each do |setting, value|
|
@@ -297,6 +297,14 @@ module Pandocomatic
|
|
297
297
|
end
|
298
298
|
end
|
299
299
|
|
300
|
+
# Deep copy a template
|
301
|
+
#
|
302
|
+
# @param template [Hash] the template to clone
|
303
|
+
# @return [Hash]
|
304
|
+
def clone_template(template)
|
305
|
+
Marshal.load(Marshal.dump(template))
|
306
|
+
end
|
307
|
+
|
300
308
|
# Merge two templates
|
301
309
|
#
|
302
310
|
# @param base_template [Hash] the base template
|
@@ -370,7 +378,7 @@ module Pandocomatic
|
|
370
378
|
|
371
379
|
to_extend.each do |name|
|
372
380
|
if @templates.has_key? name
|
373
|
-
|
381
|
+
merge resolved_template, clone_template(@templates[name])
|
374
382
|
else
|
375
383
|
warn "Cannot find template with name '#{parent_template_name}'. Skipping this template while extending: '#{template.to_s}'."
|
376
384
|
end
|
@@ -392,7 +400,7 @@ module Pandocomatic
|
|
392
400
|
extended_template = extend_template template
|
393
401
|
|
394
402
|
if @templates.has_key? name then
|
395
|
-
|
403
|
+
merge @templates[name], extended_template
|
396
404
|
else
|
397
405
|
@templates[name] = extended_template
|
398
406
|
end
|
@@ -19,8 +19,10 @@
|
|
19
19
|
module Pandocomatic
|
20
20
|
require_relative './pandocomatic_error.rb'
|
21
21
|
|
22
|
+
# A ConfigurationError
|
22
23
|
class ConfigurationError < PandocomaticError
|
23
24
|
|
25
|
+
# The template to print this ConfigurationError
|
24
26
|
def template()
|
25
27
|
'configuration_error.txt'
|
26
28
|
end
|