pandocomatic 0.2.5.4 → 0.2.7.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c2f6a7f6a8eee5d33ad05f1e41251a25719ca5bc7f025d51304825c80c1ddb84
4
- data.tar.gz: e7a9771bc2521c6c7565d745290a57bb6167ab13760c7dbb3d8d5b1f40bfab44
3
+ metadata.gz: 8c5160563dbb3f82d9854f6c822e3e99ab25bd98518baa5628559b2e27b8e46f
4
+ data.tar.gz: 520905c9a5e69954fbf6f7f8b1217734463f5207e8d1566d2343b4efa40d2dac
5
5
  SHA512:
6
- metadata.gz: 0bf99bb6171e37d1a9a4753892a96a36446f9b22d9ecb07c7cefa3c91f8b0d297a2f1402bcd5d38278c6d449bb3c172bf7963b32d913abc781421030f7b6509f
7
- data.tar.gz: '00769002b86dce30908ea8bd3418b2700f25a1ffba669c1ce7f3ba614f11c479f65527ab69cc1f151a4f5fbbea0a592b0728b4573a55da76ca9a13fae6fc4d65'
6
+ metadata.gz: 629402536265e66ba416bd93d8515086e1db45752d7bc0168489253350c2e789156eca213105177b8d76b657fa78efd54ee669e8524329099f552ecafa75acca
7
+ data.tar.gz: 83f696edff0469c550249b41c330b25214f324f349c4295ca43aba7a828cdb2d6a4f93d3c471c3be08da873fbeca2896978d2818300d5d78c14b680b9b8eedf8
@@ -66,7 +66,10 @@ module Pandocomatic
66
66
  opt :output, 'Output', :short => '-o', :type => String
67
67
  opt :input, 'Input', :short => '-i', :type => String, :multi => true
68
68
 
69
- # Version and help
69
+ # Experimental
70
+ opt :root_path, 'Root path', :short => '-r', :type => String
71
+
72
+ # Common
70
73
  opt :show_version, 'Version', :short => '-v', :long => 'version'
71
74
  opt :show_help, 'Help', :short => '-h', :long => 'help'
72
75
  end
@@ -122,6 +125,11 @@ module Pandocomatic
122
125
  raise CLIError.new(:no_output_given) if not multiple_inputs and File.directory? input.first
123
126
  end
124
127
 
128
+ # No check for root_path: a user can supply one that does not exists
129
+ # at this location and still work on the output location.
130
+ if options[:root_path_given]
131
+ end
132
+
125
133
  # Data dir, if specified, should be an existing and readable directory
126
134
  if options[:data_dir_given]
127
135
  data_dir = File.absolute_path options[:data_dir]
@@ -109,6 +109,11 @@ module Pandocomatic
109
109
 
110
110
  pandoc_options = Configuration.extend_value(pandoc_options, template['pandoc'])
111
111
  end
112
+
113
+ # Write out the results of the conversion process to file.
114
+ if @dst.to_s.empty? and @metadata.pandoc_options.has_key? 'output'
115
+ @dst = @metadata.pandoc_options['output']
116
+ end
112
117
 
113
118
  template = Configuration.extend_value(@metadata.pandocomatic, template) if @metadata.has_pandocomatic?
114
119
 
@@ -121,7 +126,7 @@ module Pandocomatic
121
126
  # Run the default preprocessors to mix-in information about the file
122
127
  # that is being converted and mix-in the template's metadata section as
123
128
  # well
124
- input = FileInfoPreprocessor.run input, @src, pandoc_options
129
+ input = FileInfoPreprocessor.run input, @src, src_root, pandoc_options
125
130
  input = MetadataPreprocessor.run input, template['metadata'] if template.has_key? 'metadata' and not template['metadata'].empty?
126
131
 
127
132
  # Convert the file by preprocessing it, run pandoc on it, and
@@ -130,11 +135,6 @@ module Pandocomatic
130
135
  input = pandoc input, pandoc_options, File.dirname(@src)
131
136
  output = postprocess input, template
132
137
 
133
- # Write out the results of the conversion process to file.
134
- if @dst.to_s.empty? and @metadata.pandoc_options.has_key? 'output'
135
- @dst = @metadata.pandoc_options['output']
136
- end
137
-
138
138
  begin
139
139
  unless use_output_option @dst then
140
140
  File.open(@dst, 'w') do |file|
@@ -187,9 +187,9 @@ module Pandocomatic
187
187
  if PANDOC_OPTIONS_WITH_PATH.include? option
188
188
  is_executable = option == "filter"
189
189
  if value.is_a? Array
190
- value = value.map {|v| @config.update_path(v, src_dir, is_executable)}
190
+ value = value.map {|v| @config.update_path(v, src_dir, absolute_dst, is_executable)}
191
191
  else
192
- value = @config.update_path(value, src_dir, is_executable)
192
+ value = @config.update_path(value, src_dir, @dst, is_executable)
193
193
  end
194
194
  end
195
195
 
@@ -264,10 +264,10 @@ module Pandocomatic
264
264
  processors = config[type]
265
265
  output = input
266
266
  processors.each do |processor|
267
- script = if @config.is_local_path processor
267
+ script = if @config.is_local_path? processor
268
268
  processor
269
269
  else
270
- @config.update_path(processor, File.dirname(@src), true)
270
+ @config.update_path(processor, File.dirname(@src), @dst, true)
271
271
  end
272
272
 
273
273
  command, *parameters = script.shellsplit # split on spaces unless it is preceded by a backslash
@@ -64,7 +64,6 @@ module Pandocomatic
64
64
  global_templates = @config.determine_templates(@src)
65
65
 
66
66
  if global_templates.empty?
67
-
68
67
  subcommands.push ConvertFileCommand.new(@config, @src, dst)
69
68
  else
70
69
  global_templates.each do |template_name|
@@ -58,6 +58,10 @@ module Pandocomatic
58
58
  's5' => 'html'
59
59
  }
60
60
 
61
+ # Indicator for paths that should be treated as "relative to the root
62
+ # path". These paths start with this ROOT_PATH_INDICATOR.
63
+ ROOT_PATH_INDICATOR = "$ROOT$"
64
+
61
65
  # A Configuration object models a pandocomatic configuration.
62
66
  class Configuration
63
67
 
@@ -90,6 +94,8 @@ module Pandocomatic
90
94
  nil
91
95
  end
92
96
 
97
+ @root_path = determine_root_path options
98
+
93
99
  # Extend the command classes by setting the source tree root
94
100
  # directory, and the options quiet and dry-run, which are used when
95
101
  # executing a command: if dry-run the command is not actually
@@ -231,6 +237,13 @@ module Pandocomatic
231
237
  @options[:data_dir_given]
232
238
  end
233
239
 
240
+ # Is the root path CLI option given?
241
+ #
242
+ # @return [Boolean]
243
+ def root_path?()
244
+ @options[:root_path_given]
245
+ end
246
+
234
247
  # Is the config CLI option given?
235
248
  #
236
249
  # @return [Boolean]
@@ -288,6 +301,7 @@ module Pandocomatic
288
301
  # If a temporary file has been created while concatenating
289
302
  # multiple input files, ensure it is removed.
290
303
  if @input.is_a? MultipleFilesInput then
304
+ warn "CLEAN UP"
291
305
  @input.destroy!
292
306
  end
293
307
  end
@@ -528,29 +542,30 @@ module Pandocomatic
528
542
  # @param path [String] path to the executable
529
543
  # @param src_dir [String] the source directory from which pandocomatic
530
544
  # conversion process has been started
531
- # @param check_executable [Booelan = false] Should the executable be
545
+ # @param dst [String] the destination path
546
+ # @param check_executable [Boolean = false] Should the executable be
532
547
  # verified to be executable? Defaults to false.
533
548
  #
534
549
  # @return [String] the updated path.
535
- def update_path(path, src_dir, check_executable = false, output = false)
550
+ def update_path(path, src_dir, dst = "", check_executable = false, output = false)
536
551
  updated_path = path
537
552
 
538
- if is_local_path path
553
+ if is_local_path? path
539
554
  # refers to a local dir; strip the './' before appending it to
540
555
  # the source directory as to prevent /some/path/./to/path
541
556
  updated_path = path[2..-1]
542
- else
543
- if is_absolute_path path
544
- updated_path = path
545
- else
546
- if check_executable
547
- updated_path = Configuration.which path
548
- end
557
+ elsif is_absolute_path? path
558
+ updated_path = path
559
+ elsif is_root_relative_path? path
560
+ updated_path = make_path_root_relative path, dst, @root_path
561
+ else
562
+ if check_executable
563
+ updated_path = Configuration.which path
564
+ end
549
565
 
550
- if updated_path.nil? or not check_executable then
551
- # refers to data-dir
552
- updated_path = File.join @data_dir, path
553
- end
566
+ if updated_path.nil? or not check_executable then
567
+ # refers to data-dir
568
+ updated_path = File.join @data_dir, path
554
569
  end
555
570
  end
556
571
 
@@ -643,7 +658,7 @@ module Pandocomatic
643
658
  end
644
659
  end
645
660
 
646
- def is_local_path(path)
661
+ def is_local_path?(path)
647
662
  if Gem.win_platform? then
648
663
  path.match("^\\.\\\\\.*$")
649
664
  else
@@ -818,7 +833,7 @@ module Pandocomatic
818
833
  end
819
834
 
820
835
 
821
- def is_absolute_path(path)
836
+ def is_absolute_path?(path)
822
837
  if Gem.win_platform? then
823
838
  path.match("^[a-zA-Z]:\\\\\.*$")
824
839
  else
@@ -826,6 +841,43 @@ module Pandocomatic
826
841
  end
827
842
  end
828
843
 
844
+ def is_root_relative_path?(path)
845
+ path.start_with? ROOT_PATH_INDICATOR
846
+ end
847
+
848
+ def make_path_root_relative(path, dst, root)
849
+ # Find how to get to the root directopry from dst directory.
850
+ # Assumption is that dst is a subdirectory of root.
851
+ dst_dir = File.dirname(File.absolute_path(dst))
852
+
853
+ path.delete_prefix! ROOT_PATH_INDICATOR if is_root_relative_path? path
854
+
855
+ if File.exist? root and File.realpath("#{dst_dir}").start_with?(File.realpath(root)) then
856
+ rel_start = ""
857
+
858
+ until File.identical?(File.realpath("#{dst_dir}/#{rel_start}"), File.realpath(root)) do
859
+ # invariant dst_dir/rel_start <= root
860
+ rel_start += "../"
861
+ end
862
+
863
+ if rel_start.end_with? "/" and path.start_with? "/" then
864
+ "#{rel_start}#{path.delete_prefix("/")}"
865
+ else
866
+ "#{rel_start}#{path}"
867
+ end
868
+ else
869
+ # Because the destination is not in a subdirectory of root, a
870
+ # relative path to that root cannot be created. Instead,
871
+ # the path is assumed to be absolute relative to root
872
+ root = root.delete_suffix "/" if root.end_with? "/"
873
+ path = path.delete_prefix "/" if path.start_with? "/"
874
+
875
+ "#{root}/#{path}"
876
+ end
877
+
878
+
879
+ end
880
+
829
881
  def determine_config_file(options, data_dir = Dir.pwd)
830
882
  config_file = ''
831
883
 
@@ -884,5 +936,15 @@ module Pandocomatic
884
936
 
885
937
  path
886
938
  end
939
+
940
+ def determine_root_path(options)
941
+ if options[:root_path_given] then
942
+ options[:root_path]
943
+ elsif options[:output_given] then
944
+ File.absolute_path(File.dirname options[:output])
945
+ else
946
+ File.absolute_path "."
947
+ end
948
+ end
887
949
  end
888
950
  end
@@ -47,7 +47,7 @@ module Pandocomatic
47
47
  ERROR_STATUS = 1266 # This is the sum of the ascii values of the characters in 'pandocomatic'
48
48
 
49
49
  # Pandocomatic's current version
50
- VERSION = [0, 2, 5, 4]
50
+ VERSION = [0, 2, 7, 2]
51
51
 
52
52
  # Run pandocomatic given options
53
53
  #
@@ -25,6 +25,9 @@ DESCRIPTION
25
25
 
26
26
  OPTIONS
27
27
 
28
+
29
+ Required:
30
+
28
31
  -i PATH, --input PATH
29
32
  Convert PATH. If this option is not given, INPUT is
30
33
  converted. INPUT and --input cannot be used together.
@@ -36,7 +39,8 @@ OPTIONS
36
39
  -o PATH, --output PATH
37
40
  Create converted files and directories in PATH.
38
41
 
39
- optional arguments:
42
+
43
+ Optional:
40
44
 
41
45
  -d PATH, --data-dir PATH
42
46
  Configure pandocomatic to use PATH as its data directory.
@@ -99,6 +103,18 @@ OPTIONS
99
103
 
100
104
  -y, --dry-run Configure pandocomatic to run the conversion process, but do
101
105
  not actually run it. Default is FALSE.
106
+
107
+
108
+ Experimental:
109
+
110
+ -r PATH, --root-path PATH
111
+ Set the root path to use with paths that are specified as
112
+ relative to that root path. It is used mostly with the
113
+ --css pandoc option. It defaults to the directory of the
114
+ specified output.
115
+
116
+
117
+ Common:
102
118
 
103
119
  -v, --version Show the version. If this option is used, all other options
104
120
  are ignored.
@@ -134,7 +150,7 @@ AUTHOR
134
150
 
135
151
  LICENSE
136
152
 
137
- Copyright 2014—2019 Huub de Beer <Huub@heerdebeer.org>
153
+ Copyright 2014—2020 Huub de Beer <huub@heerdebeer.org>
138
154
 
139
155
  Pandocomatic is free software: you can redistribute it and/or modify
140
156
  it under the terms of the GNU General Public License as published by the
@@ -1,6 +1,6 @@
1
1
  Pandocomatic version <%=@version.join('.')%>
2
2
 
3
- © 2014—2019 Huub de Beer <Huub@heerdebeer.org>
3
+ © 2014—2020 Huub de Beer <Huub@heerdebeer.org>
4
4
 
5
5
  Pandocomatic is free software; pandocomatic is released under the GPLv3.
6
6
 
@@ -31,7 +31,7 @@ module Pandocomatic
31
31
  # @param path [String] the path to the input document
32
32
  # @param options [Hash] pandoc options collected by pandocomatic to run on
33
33
  # this file
34
- def self.run input, path, options
34
+ def self.run input, path, src_path, options
35
35
  created_at = File.stat(path).ctime
36
36
  modified_at = File.stat(path).mtime
37
37
  output = input
@@ -41,6 +41,7 @@ module Pandocomatic
41
41
  output << " to: #{options['to']}\n" if options.has_key? 'to'
42
42
  output << " template: #{options['template']}\n" if options.has_key? 'template'
43
43
  output << " path: '#{path}'\n"
44
+ output << " src_path: '#{src_path}'\n"
44
45
  output << " created: #{created_at.strftime '%Y-%m-%d'}\n"
45
46
  output << " modified: #{modified_at.strftime '%Y-%m-%d'}\n"
46
47
  output << "...\n\n"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pandocomatic
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.5.4
4
+ version: 0.2.7.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Huub de Beer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-07-18 00:00:00.000000000 Z
11
+ date: 2020-07-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: paru
@@ -16,20 +16,20 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.3.2
19
+ version: '0.4'
20
20
  - - ">="
21
21
  - !ruby/object:Gem::Version
22
- version: 0.3.2.0
22
+ version: 0.4.1
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
27
  - - "~>"
28
28
  - !ruby/object:Gem::Version
29
- version: 0.3.2
29
+ version: '0.4'
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
- version: 0.3.2.0
32
+ version: 0.4.1
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: optimist
35
35
  requirement: !ruby/object:Gem::Requirement
@@ -147,7 +147,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
147
147
  requirements:
148
148
  - - ">="
149
149
  - !ruby/object:Gem::Version
150
- version: 2.4.4
150
+ version: '2.5'
151
151
  required_rubygems_version: !ruby/object:Gem::Requirement
152
152
  requirements:
153
153
  - - ">="