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.
Files changed (31) hide show
  1. checksums.yaml +4 -4
  2. data/lib/pandocomatic/command/command.rb +0 -1
  3. data/lib/pandocomatic/command/convert_dir_command.rb +26 -0
  4. data/lib/pandocomatic/command/convert_file_command.rb +12 -0
  5. data/lib/pandocomatic/command/convert_file_multiple_command.rb +15 -19
  6. data/lib/pandocomatic/command/convert_list_command.rb +23 -0
  7. data/lib/pandocomatic/command/copy_file_command.rb +12 -0
  8. data/lib/pandocomatic/command/create_link_command.rb +26 -0
  9. data/lib/pandocomatic/command/skip_command.rb +22 -0
  10. data/lib/pandocomatic/configuration.rb +11 -3
  11. data/lib/pandocomatic/error/cli_error.rb +2 -0
  12. data/lib/pandocomatic/error/configuration_error.rb +2 -0
  13. data/lib/pandocomatic/error/io_error.rb +2 -0
  14. data/lib/pandocomatic/error/pandoc_error.rb +3 -1
  15. data/lib/pandocomatic/error/pandocomatic_error.rb +27 -0
  16. data/lib/pandocomatic/error/processor_error.rb +2 -0
  17. data/lib/pandocomatic/pandocomatic.rb +160 -152
  18. data/lib/pandocomatic/printer/command_printer.rb +2 -0
  19. data/lib/pandocomatic/printer/configuration_errors_printer.rb +2 -0
  20. data/lib/pandocomatic/printer/error_printer.rb +3 -0
  21. data/lib/pandocomatic/printer/finish_printer.rb +6 -1
  22. data/lib/pandocomatic/printer/help_printer.rb +2 -0
  23. data/lib/pandocomatic/printer/printer.rb +29 -17
  24. data/lib/pandocomatic/printer/summary_printer.rb +29 -15
  25. data/lib/pandocomatic/printer/version_printer.rb +2 -0
  26. data/lib/pandocomatic/printer/warning_printer.rb +15 -10
  27. data/lib/pandocomatic/processor.rb +19 -7
  28. data/lib/pandocomatic/processors/fileinfo_preprocessor.rb +26 -24
  29. data/lib/pandocomatic/processors/metadata_preprocessor.rb +17 -16
  30. data/lib/pandocomatic/warning.rb +19 -12
  31. metadata +3 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 11bf26bcbf6d79b0583eca48c30e1b685314f514
4
- data.tar.gz: c26dd9a4433581a6154df33096d993fe56208338
3
+ metadata.gz: 0f420d7805d00a32e2c3d512ef5e417e0d271747
4
+ data.tar.gz: 1f24021a1464b79431dc35fc7d65e208074e3914
5
5
  SHA512:
6
- metadata.gz: 5b1d7bcd5051193689a09812c45a7e4155d06e47ca9d6906b5d02ba0dbb628cdaa952ae613206b1eb59d3dfc3f21a81c102006743cc53895cc0b51500a078d9a
7
- data.tar.gz: cc8a459844153351c30749c2d0ff215ec8ff64655661b74f893acffcd7ecf1fba447d7d063a399dbf43a89b94862cd964b6e2c52c3ebc50c6872b672472ea8b1
6
+ metadata.gz: 831b0ebc2839e740b9d66a0b80938ec4ba98da4d0a7ba68101ff5293f58d5604d9991154c01af16f2a62c33469b97e10b47c9f433e9997cd8cb45106ea03f413
7
+ data.tar.gz: 70b08044e7a6810d4ed48f5d787c2fe182917aeaa3c8d1b256da5bd80a3652b313c61561825bb7e1e6ffae0b4aebff346242eaf1f8b95d79e47e6109a4c8cfeb
@@ -30,7 +30,6 @@ module Pandocomatic
30
30
  # @!attribute index
31
31
  # @return [Number] the index of this Command in the list with all commands
32
32
  # to run when running pandocomatic.
33
-
34
33
  class Command
35
34
 
36
35
  attr_reader :errors, :index
@@ -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
- resolved_template = merge resolved_template, @templates[name]
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
- @templates[name] = merge @templates[name], extended_template
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 command line error.
22
23
  class CLIError < PandocomaticError
23
24
 
25
+ # Get the template used to print this CLIError
24
26
  def template()
25
27
  'cli_error.txt'
26
28
  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
@@ -19,8 +19,10 @@
19
19
  module Pandocomatic
20
20
  require_relative './pandocomatic_error.rb'
21
21
 
22
+ # An IOError
22
23
  class IOError < PandocomaticError
23
24
 
25
+ # The template to use when printing this IOError
24
26
  def template()
25
27
  'io_error.txt'
26
28
  end