paru 0.2.5.12 → 0.3.0a1

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
  SHA1:
3
- metadata.gz: 3b04f0bfc217b81b510d46cc2ef83601123b07e2
4
- data.tar.gz: 4c00811eac2de58979daa5958e1331b60f35da8a
3
+ metadata.gz: 1d3f58592821c089eb71f929c5913f09c5235bf8
4
+ data.tar.gz: d9f6b513b294bc25d8ffba591915895397c5729a
5
5
  SHA512:
6
- metadata.gz: 42f4816cbcdd7b6fc3e52dae360e1305e1e3546b3b28a69cfe7d8c0b2cc1f29b427e96b5c4be4e3ce381c39fbd25003ab475d0c8125e834e9bd4f6b31708bd05
7
- data.tar.gz: c3ee0635d919ca0d8aedc0cd2ca790bf05750d21329cdf2340cdd4074474fb770f0f647ef47cd2890144e85704544355a1cb040949d930116d03b9c27c262a47
6
+ metadata.gz: 062e92c053c9b8dcfdfaaf30d18f9f3f8c88ce1618d7b6e5a0c9265ed4e80e7b43de6149d39b9a35a9c87adf33b9bb9688834ce65cfeab22c0f9817a337db033
7
+ data.tar.gz: a19be07f8af5978259da737e47f93b6cd0ae071e62c38dba9633d7331672d1698c1780337214ed3c6f59340150c3c0951217efe589e3c2c4a7b85b23694a5a5e
data/lib/paru.rb CHANGED
@@ -18,5 +18,5 @@
18
18
  #++
19
19
  module Paru
20
20
  # Paru's current version
21
- VERSION = [0, 2, 5, 11]
21
+ VERSION = [0, 2, 5, 3]
22
22
  end
data/lib/paru/filter.rb CHANGED
@@ -226,6 +226,7 @@ module Paru
226
226
  def initialize(input = $stdin, output = $stdout)
227
227
  @input = input
228
228
  @output = output
229
+ @running = false
229
230
  end
230
231
 
231
232
  # Run the filter specified by block. This is a convenience method that
@@ -277,22 +278,30 @@ module Paru
277
278
  end
278
279
  end
279
280
 
281
+ @running = true # used to be able to stop filtering immediately
280
282
  @current_node = @document
281
283
 
282
- nodes_to_filter.each do |node|
283
- if @current_node.has_been_replaced?
284
- @current_node = @current_node.get_replacement
285
- @filtered_nodes.pop
286
- else
287
- @current_node = node
288
- end
289
-
290
- @filtered_nodes.push @current_node
284
+ while @running do
285
+ begin
286
+ if @current_node.has_been_replaced?
287
+ @current_node = @current_node.get_replacement
288
+ @filtered_nodes.pop
289
+ else
290
+ @current_node = nodes_to_filter.next
291
+ end
292
+
293
+ @filtered_nodes.push @current_node
291
294
 
292
- instance_eval(&block) # run the actual filter code
295
+ instance_eval(&block) # run the actual filter code
296
+ rescue StopIteration
297
+ @running = false
298
+ end
293
299
  end
300
+
301
+ @running = false
294
302
 
295
- write_document
303
+ @document.meta = @metadata.to_meta
304
+ @output.write @document.to_JSON
296
305
  end
297
306
 
298
307
  # Specify what nodes to filter with a +selector+. If the +current_node+
@@ -309,15 +318,10 @@ module Paru
309
318
  # This is a great timesaver for filters that only act on a small
310
319
  # number of nodes in a large document, or when you only want to set
311
320
  # the metadata.
312
- #
313
- # Note, stop will break off the filter immediately after outputting
314
- # the document in its current state.
315
321
  def stop!()
316
- write_document
317
- exit true
322
+ @running = false
318
323
  end
319
324
 
320
-
321
325
  private
322
326
 
323
327
  # The Document node from JSON formatted pandoc document structure
@@ -328,12 +332,6 @@ module Paru
328
332
  def read_document()
329
333
  PandocFilter::Document.from_JSON @input.read
330
334
  end
331
-
332
- # Write the document being filtered to STDOUT
333
- def write_document()
334
- @document.meta = @metadata.to_meta
335
- @output.write @document.to_JSON
336
- end
337
335
  end
338
336
 
339
337
  # FilterError is thrown when there is an error during filtering
@@ -49,8 +49,8 @@ module Paru
49
49
  ]
50
50
  end
51
51
 
52
- #undef_method :inner_markdown
53
- #undef_method :inner_markdown=
52
+ undef_method :inner_markdown
53
+ undef_method :inner_markdown=
54
54
  end
55
55
  end
56
56
  end
@@ -36,7 +36,7 @@ module Paru
36
36
 
37
37
  # The current pandoc type version
38
38
  # @see https://hackage.haskell.org/package/pandoc-types
39
- CURRENT_PANDOC_VERSION = [1, 17, 0, 5]
39
+ CURRENT_PANDOC_VERSION = [1, 17, 1]
40
40
 
41
41
  # Each file that is being filtered by pandoc is represented by a root
42
42
  # Document. It is the root node of the AST of the document in the file.
data/lib/paru/pandoc.rb CHANGED
@@ -16,7 +16,6 @@
16
16
  # You should have received a copy of the GNU General Public License
17
17
  # along with Paru. If not, see <http://www.gnu.org/licenses/>.
18
18
  #++
19
- require "open3"
20
19
  require "shellwords"
21
20
  require "yaml"
22
21
 
@@ -79,10 +78,6 @@ module Paru
79
78
  #
80
79
  #
81
80
  class Pandoc
82
-
83
- # Use a readable option separator on Unix-like systems, but fall back
84
- # to a space on Windows.
85
- DEFAULT_OPTION_SEP = if Gem.win_platform? then " " else " \\\n\t" end
86
81
 
87
82
  # Path to the pandoc executatble to use by paru.
88
83
  PARU_PANDOC_PATH = "PARU_PANDOC_PATH"
@@ -154,7 +149,17 @@ module Paru
154
149
  # @example Using <<
155
150
  # output = converter << 'this is a *strong* word'
156
151
  def convert(input)
157
- run_converter to_command, input
152
+ begin
153
+ output = ''
154
+ IO.popen(to_command, 'r+') do |p|
155
+ p << input
156
+ p.close_write
157
+ output << p.read
158
+ end
159
+ output
160
+ rescue StandardError => err
161
+ throw Error.new "Error while running '#{to_command}' on input:\n\n#{input}\n\nPandoc responds: '#{err.message}'"
162
+ end
158
163
  end
159
164
  alias << convert
160
165
 
@@ -170,7 +175,17 @@ module Paru
170
175
  # @example Using convert_file
171
176
  # output = converter.convert_file 'files/document.md'
172
177
  def convert_file(input_file)
173
- run_converter "#{to_command} #{input_file}"
178
+ command = "#{to_command} #{input_file}"
179
+ begin
180
+ output = ''
181
+ IO.popen(command, 'r+') do |p|
182
+ p.close_write
183
+ output << p.read
184
+ end
185
+ output
186
+ rescue StandardError => err
187
+ throw Error.new "Error while running '#{command}' on input:\n\n#{input}\n\nPandoc responds: '#{err.message}'"
188
+ end
174
189
  end
175
190
 
176
191
  # Create a string representation of this converter's pandoc command
@@ -178,8 +193,8 @@ module Paru
178
193
  #
179
194
  # @param option_sep [String] the string to separate options with
180
195
  # @return [String] This converter's command line invocation string.
181
- def to_command(option_sep = DEFAULT_OPTION_SEP)
182
- "#{escape(@@pandoc_exec)}\t#{to_option_string option_sep}"
196
+ def to_command(option_sep = " \\\n\t")
197
+ "#{@@pandoc_exec.shellescape}\t#{to_option_string option_sep}"
183
198
  end
184
199
 
185
200
  private
@@ -199,11 +214,11 @@ module Paru
199
214
  when Array then
200
215
  # This option can occur multiple times: list each with its value.
201
216
  # For example: --css=main.css --css=print.css
202
- options_arr.push value.map {|val| "#{option_string}=#{escape(val.to_s)}"}.join(option_sep)
217
+ options_arr.push value.map {|val| "#{option_string}=#{val.to_s.shellescape}"}.join(option_sep)
203
218
  else
204
219
  # All options that aren't flags and can occur only once have the
205
220
  # same pattern: --option=value
206
- options_arr.push "#{option_string}=#{escape(value.to_s)}"
221
+ options_arr.push "#{option_string}=#{value.to_s.shellescape}"
207
222
  end
208
223
  end
209
224
  options_arr.join(option_sep)
@@ -280,45 +295,6 @@ module Paru
280
295
  end
281
296
  end
282
297
 
283
- private
284
-
285
- def escape(str)
286
- if Gem.win_platform?
287
- escaped = str.gsub("\\", "\\\\")
288
- "\"#{escaped}\""
289
- else
290
- str.shellescape
291
- end
292
- end
293
-
294
- def run_converter(command, input = nil)
295
- begin
296
- output = ''
297
- error = ''
298
- status = 0
299
-
300
- Open3.popen3(command) do |stdin, stdout, stderr, thread|
301
- stdin << input unless input.nil?
302
- stdin.close
303
- output << stdout.read
304
- error << stderr.read
305
- status = thread.value.exitstatus
306
- end
307
-
308
- warn error unless error.empty?
309
-
310
- if 0 < status
311
- # pandoc exited with an error
312
- raise Paru::Error.new "error while running:\n\n#{command}\n\nPandoc responded with:\n\n#{error}\n"
313
- end
314
-
315
- output
316
- rescue Paru::Error => err
317
- raise err
318
- rescue StandardError => err
319
- throw Error.new "Unable to run pandoc via command '#{command}': #{err.message}"
320
- end
321
- end
322
298
  end
323
299
 
324
300
  end
@@ -43,10 +43,8 @@ dpi: 96
43
43
  eol: "native"
44
44
  wrap: "auto"
45
45
  columns: 78
46
- strip-comments: true
47
46
  toc: true
48
47
  table_of_contents: true
49
- toc_depth: 3
50
48
  no_highlight: true
51
49
  highlight_style: ""
52
50
  syntax_definition: ""
@@ -78,8 +76,8 @@ epub_cover_image: ""
78
76
  epub_metadata: ""
79
77
  epub_embed_font: ""
80
78
  epub_chapter_level: 1
81
- pdf_engine: ""
82
- pdf_engine_opt: ""
79
+ latex_engine: ""
80
+ latex_engine_opt: ""
83
81
  bibliography: ""
84
82
  csl: ""
85
83
  citation_abbreviation: ""
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: paru
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.5.12
4
+ version: 0.3.0a1
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: 2017-09-26 00:00:00.000000000 Z
11
+ date: 2017-09-06 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Use Pandoc (http://www.pandoc.org) with ruby
14
14
  email: Huub@heerdebeer.org
@@ -102,13 +102,13 @@ required_ruby_version: !ruby/object:Gem::Requirement
102
102
  version: '0'
103
103
  required_rubygems_version: !ruby/object:Gem::Requirement
104
104
  requirements:
105
- - - ">="
105
+ - - ">"
106
106
  - !ruby/object:Gem::Version
107
- version: '0'
107
+ version: 1.3.1
108
108
  requirements: []
109
109
  rubyforge_project:
110
110
  rubygems_version: 2.5.2
111
111
  signing_key:
112
112
  specification_version: 4
113
- summary: Paru is a ruby wrapper around pandoc
113
+ summary: Paru is a ruby wrapper around pandoc (pandoc 2)
114
114
  test_files: []