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 +4 -4
- data/lib/paru.rb +1 -1
- data/lib/paru/filter.rb +21 -23
- data/lib/paru/filter/cite.rb +2 -2
- data/lib/paru/filter/document.rb +1 -1
- data/lib/paru/pandoc.rb +26 -50
- data/lib/paru/pandoc_options_version_2.yaml +2 -4
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1d3f58592821c089eb71f929c5913f09c5235bf8
|
4
|
+
data.tar.gz: d9f6b513b294bc25d8ffba591915895397c5729a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 062e92c053c9b8dcfdfaaf30d18f9f3f8c88ce1618d7b6e5a0c9265ed4e80e7b43de6149d39b9a35a9c87adf33b9bb9688834ce65cfeab22c0f9817a337db033
|
7
|
+
data.tar.gz: a19be07f8af5978259da737e47f93b6cd0ae071e62c38dba9633d7331672d1698c1780337214ed3c6f59340150c3c0951217efe589e3c2c4a7b85b23694a5a5e
|
data/lib/paru.rb
CHANGED
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
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
data/lib/paru/filter/cite.rb
CHANGED
data/lib/paru/filter/document.rb
CHANGED
@@ -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,
|
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
|
-
|
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
|
-
|
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 =
|
182
|
-
"#{
|
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}=#{
|
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}=#{
|
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
|
-
|
82
|
-
|
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.
|
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-
|
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:
|
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: []
|