pandoc-ruby 2.1.1 → 2.1.5
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/Gemfile.lock +5 -5
- data/README.md +39 -29
- data/lib/pandoc-ruby.rb +54 -38
- data/pandoc-ruby.gemspec +2 -2
- data/test/test_conversions.rb +3 -2
- data/test/test_pandoc_ruby.rb +165 -38
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cae685a045d8dbe0031568787e914fc4a3a6ac2228abf9cb5447ee41cebddfe4
|
4
|
+
data.tar.gz: e603e4caa7038e4b299457c8ad9e48464d6283ecaa02ac5dc383d27e7f768b2f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b066e046f9f55034567f483b037481c933b4c754cfe776133c002f15968999f27a924ebb2ce6d726637741e734893439b6f4ec3ae1157647641be274e11273c3
|
7
|
+
data.tar.gz: ded6cbe85511048fc67b07aba3b6ed83610bfce88ac391e820c80ad341c3fe886e4109695dab660b6fe58dad6aaeb2460d6b882a324169d582d64c3c9ade7352
|
data/Gemfile.lock
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
GEM
|
2
2
|
remote: http://rubygems.org/
|
3
3
|
specs:
|
4
|
-
minitest (5.14.
|
5
|
-
mocha (1.
|
6
|
-
rake (13.0.
|
7
|
-
rdoc (6.
|
4
|
+
minitest (5.14.4)
|
5
|
+
mocha (1.13.0)
|
6
|
+
rake (13.0.6)
|
7
|
+
rdoc (6.3.3)
|
8
8
|
|
9
9
|
PLATFORMS
|
10
10
|
ruby
|
@@ -16,4 +16,4 @@ DEPENDENCIES
|
|
16
16
|
rdoc
|
17
17
|
|
18
18
|
BUNDLED WITH
|
19
|
-
2.
|
19
|
+
2.2.28
|
data/README.md
CHANGED
@@ -1,32 +1,38 @@
|
|
1
1
|
# PandocRuby
|
2
2
|
|
3
|
+
[](https://travis-ci.org/xwmx/pandoc-ruby)
|
4
|
+
[](http://rubygems.org/gems/pandoc-ruby)
|
5
|
+
[](http://rubygems.org/gems/pandoc-ruby)
|
6
|
+
|
3
7
|
PandocRuby is a wrapper for [Pandoc](http://johnmacfarlane.net/pandoc/), a
|
4
8
|
Haskell library with command line tools for converting one markup format to
|
5
9
|
another.
|
6
10
|
|
7
|
-
Pandoc can convert documents
|
8
|
-
DocBook, LaTeX,
|
9
|
-
|
10
|
-
OpenDocument XML, ODT, GNU Texinfo, MediaWiki
|
11
|
-
HTML slide shows, EPUB,
|
11
|
+
Pandoc can convert documents from a variety of formats including markdown,
|
12
|
+
reStructuredText, textile, HTML, DocBook, LaTeX, and MediaWiki markup to a
|
13
|
+
variety of other formats, including markdown, reStructuredText, HTML, LaTeX,
|
14
|
+
ConTeXt, PDF, RTF, DocBook XML, OpenDocument XML, ODT, GNU Texinfo, MediaWiki
|
15
|
+
markup, groff man pages, HTML slide shows, EPUB, Microsoft Word docx, and more.
|
12
16
|
|
13
17
|
## Installation
|
14
18
|
|
15
|
-
First,
|
16
|
-
[install Pandoc](http://johnmacfarlane.net/pandoc/installing.html).
|
19
|
+
First, [install Pandoc](http://johnmacfarlane.net/pandoc/installing.html).
|
17
20
|
|
18
|
-
|
21
|
+
PandocRuby is available on [RubyGems](http://rubygems.org/gems/pandoc-ruby):
|
19
22
|
|
20
|
-
```
|
21
|
-
gem
|
23
|
+
```bash
|
24
|
+
gem install pandoc-ruby
|
22
25
|
```
|
23
26
|
|
24
|
-
|
27
|
+
To install with [Bundler](https://bundler.io/), add the following to your
|
28
|
+
Gemfile:
|
25
29
|
|
26
|
-
```
|
27
|
-
gem
|
30
|
+
```ruby
|
31
|
+
gem 'pandoc-ruby'
|
28
32
|
```
|
29
33
|
|
34
|
+
Then run `bundle install`
|
35
|
+
|
30
36
|
## Usage
|
31
37
|
|
32
38
|
```ruby
|
@@ -35,7 +41,7 @@ require 'pandoc-ruby'
|
|
35
41
|
puts @converter.convert
|
36
42
|
```
|
37
43
|
|
38
|
-
This takes the Markdown formatted
|
44
|
+
This takes the Markdown formatted string and converts it to reStructuredText.
|
39
45
|
|
40
46
|
You can also use the `#convert` class method:
|
41
47
|
|
@@ -44,28 +50,28 @@ puts PandocRuby.convert('# Markdown Title', from: :markdown, to: :html)
|
|
44
50
|
```
|
45
51
|
|
46
52
|
Other arguments are simply converted into command line options, accepting
|
47
|
-
symbols
|
48
|
-
symbols for options with arguments.
|
53
|
+
symbols and strings for options and hashes for options with arguments.
|
49
54
|
|
50
55
|
```ruby
|
51
|
-
PandocRuby.convert('# Markdown Title', :s, {f: :markdown, to: :rst}, '
|
56
|
+
PandocRuby.convert('# Markdown Title', :s, {f: :markdown, to: :rst}, '--wrap=none', :table_of_contents)
|
52
57
|
```
|
53
58
|
|
54
59
|
is equivalent to
|
55
60
|
|
56
61
|
```bash
|
57
|
-
echo "# Markdown Title" | pandoc -s -f markdown --to=rst --
|
62
|
+
echo "# Markdown Title" | pandoc -s -f markdown --to=rst --wrap=none --table-of-contents
|
58
63
|
```
|
59
64
|
|
60
65
|
Also provided are `#to_[writer]` instance methods for each of the writers,
|
61
66
|
and these can also accept options:
|
62
67
|
|
63
68
|
```ruby
|
64
|
-
PandocRuby.new(
|
65
|
-
# => "<
|
69
|
+
PandocRuby.new('# Example').to_html(:ascii)
|
70
|
+
# => "<h1 id="example">Example</h1>"
|
66
71
|
# or
|
67
|
-
PandocRuby.new("#
|
68
|
-
# => "
|
72
|
+
PandocRuby.new("# Example").to_rst
|
73
|
+
# => "Example
|
74
|
+
# ======="
|
69
75
|
```
|
70
76
|
|
71
77
|
Similarly, there are class methods for each of the readers, so readers
|
@@ -76,7 +82,14 @@ PandocRuby.html("<h1>hello</h1>").to_latex
|
|
76
82
|
# => "\\section{hello}"
|
77
83
|
```
|
78
84
|
|
79
|
-
|
85
|
+
Available readers and writers are can be found in the following
|
86
|
+
variables:
|
87
|
+
- [`PandocRuby::READERS`](lib/pandoc-ruby.rb#L10)
|
88
|
+
- [`PandocRuby::STRING_WRITERS`](lib/pandoc-ruby.rb#L48)
|
89
|
+
- [`PandocRuby::BINARY_WRITERS`](lib/pandoc-ruby.rb#L104)
|
90
|
+
- [`PandocRuby::WRITERS`](lib/pandoc-ruby.rb#L113)
|
91
|
+
|
92
|
+
PandocRuby assumes the `pandoc` executable is in your environment's `$PATH`
|
80
93
|
variable. If you'd like to set an explicit path to the `pandoc` executable,
|
81
94
|
you can do so with `PandocRuby.pandoc_path = '/path/to/pandoc'`
|
82
95
|
|
@@ -108,20 +121,17 @@ used to modify the behavior of readers and writers. To use an extension,
|
|
108
121
|
add the extension with a `+` or `-` after the reader or writer name:
|
109
122
|
|
110
123
|
```ruby
|
111
|
-
# Without extension
|
124
|
+
# Without extension:
|
112
125
|
PandocRuby.new("Line 1\n# Heading", from: 'markdown_strict').to_html
|
113
126
|
# => "<p>Line 1</p>\n<h1>Heading</h1>\n"
|
114
127
|
|
115
|
-
# With extension:
|
116
|
-
|
128
|
+
# With `+blank_before_header` extension:
|
129
|
+
PandocRuby.new("Line 1\n# Heading", from: 'markdown_strict+blank_before_header').to_html
|
117
130
|
# => "<p>Line 1 # Heading</p>\n
|
118
131
|
```
|
119
132
|
|
120
133
|
### More Information
|
121
134
|
|
122
|
-
Available format readers and writers are available in the `PandocRuby::READERS`
|
123
|
-
and `PandocRuby::WRITERS` constants.
|
124
|
-
|
125
135
|
For more information on Pandoc, see the
|
126
136
|
[Pandoc documentation](http://johnmacfarlane.net/pandoc/)
|
127
137
|
or run `man pandoc`
|
data/lib/pandoc-ruby.rb
CHANGED
@@ -3,7 +3,11 @@ require 'tempfile'
|
|
3
3
|
require 'timeout'
|
4
4
|
|
5
5
|
class PandocRuby
|
6
|
-
|
6
|
+
# Use the pandoc command with a custom executable path.
|
7
|
+
@pandoc_path = 'pandoc'
|
8
|
+
class << self
|
9
|
+
attr_accessor :pandoc_path
|
10
|
+
end
|
7
11
|
|
8
12
|
# The available readers and their corresponding names. The keys are used to
|
9
13
|
# generate methods and specify options to Pandoc.
|
@@ -112,12 +116,6 @@ class PandocRuby
|
|
112
116
|
# All of the available Writers.
|
113
117
|
WRITERS = STRING_WRITERS.merge(BINARY_WRITERS)
|
114
118
|
|
115
|
-
# To use run the pandoc command with a custom executable path, the path
|
116
|
-
# to the pandoc executable can be set here.
|
117
|
-
def self.pandoc_path=(path)
|
118
|
-
@@pandoc_path = path
|
119
|
-
end
|
120
|
-
|
121
119
|
# A shortcut method that creates a new PandocRuby object and immediately
|
122
120
|
# calls `#convert`. Options passed to this method are passed directly to
|
123
121
|
# `#new` and treated the same as if they were passed directly to the
|
@@ -127,23 +125,27 @@ class PandocRuby
|
|
127
125
|
end
|
128
126
|
|
129
127
|
attr_writer :binary_output
|
128
|
+
|
130
129
|
def binary_output
|
131
|
-
@binary_output
|
130
|
+
@binary_output ||= false
|
132
131
|
end
|
133
132
|
|
134
133
|
attr_writer :options
|
134
|
+
|
135
135
|
def options
|
136
|
-
@options
|
136
|
+
@options ||= []
|
137
137
|
end
|
138
138
|
|
139
139
|
attr_writer :option_string
|
140
|
+
|
140
141
|
def option_string
|
141
|
-
@option_string
|
142
|
+
@option_string ||= ''
|
142
143
|
end
|
143
144
|
|
144
145
|
attr_writer :writer
|
146
|
+
|
145
147
|
def writer
|
146
|
-
@writer
|
148
|
+
@writer ||= 'html'
|
147
149
|
end
|
148
150
|
|
149
151
|
attr_accessor :input_files
|
@@ -159,11 +161,13 @@ class PandocRuby
|
|
159
161
|
# new(["/path/to/file.md"], :option1 => :value, :option2)
|
160
162
|
# new(["/to/file1.html", "/to/file2.html"], :option1 => :value)
|
161
163
|
def initialize(*args)
|
162
|
-
|
164
|
+
case args[0]
|
165
|
+
when String
|
163
166
|
self.input_string = args.shift
|
164
|
-
|
165
|
-
self.input_files
|
167
|
+
when Array
|
168
|
+
self.input_files = args.shift.join(' ')
|
166
169
|
end
|
170
|
+
|
167
171
|
self.options = args
|
168
172
|
end
|
169
173
|
|
@@ -179,8 +183,9 @@ class PandocRuby
|
|
179
183
|
# PandocRuby.new("# text").convert
|
180
184
|
# # => "<h1 id=\"text\">text</h1>\n"
|
181
185
|
def convert(*args)
|
182
|
-
self.options
|
183
|
-
self.option_string
|
186
|
+
self.options += args if args
|
187
|
+
self.option_string = prepare_options(self.options)
|
188
|
+
|
184
189
|
if self.binary_output
|
185
190
|
convert_binary
|
186
191
|
else
|
@@ -201,6 +206,7 @@ class PandocRuby
|
|
201
206
|
READERS.each_key do |r|
|
202
207
|
define_method(r) do |*args|
|
203
208
|
args += [{ :from => r }]
|
209
|
+
|
204
210
|
new(*args)
|
205
211
|
end
|
206
212
|
end
|
@@ -218,6 +224,7 @@ class PandocRuby
|
|
218
224
|
WRITERS.each_key do |w|
|
219
225
|
define_method(:"to_#{w}") do |*args|
|
220
226
|
args += [{ :to => w.to_sym }]
|
227
|
+
|
221
228
|
convert(*args)
|
222
229
|
end
|
223
230
|
end
|
@@ -229,13 +236,17 @@ class PandocRuby
|
|
229
236
|
# temp file is closed and unlinked.
|
230
237
|
def convert_binary
|
231
238
|
tmp_file = Tempfile.new('pandoc-conversion')
|
239
|
+
|
232
240
|
begin
|
233
|
-
self.options
|
234
|
-
self.option_string
|
241
|
+
self.options += [{ :output => tmp_file.path }]
|
242
|
+
self.option_string = "#{self.option_string} --output \"#{tmp_file.path}\""
|
243
|
+
|
235
244
|
execute_pandoc
|
245
|
+
|
236
246
|
return IO.binread(tmp_file)
|
237
247
|
ensure
|
238
248
|
tmp_file.close
|
249
|
+
|
239
250
|
tmp_file.unlink
|
240
251
|
end
|
241
252
|
end
|
@@ -248,30 +259,33 @@ class PandocRuby
|
|
248
259
|
# Wrapper to run pandoc in a consistent, DRY way
|
249
260
|
def execute_pandoc
|
250
261
|
if !self.input_files.nil?
|
251
|
-
execute("#{
|
262
|
+
execute("#{PandocRuby.pandoc_path} #{self.input_files}#{self.option_string}")
|
252
263
|
else
|
253
|
-
execute("#{
|
264
|
+
execute("#{PandocRuby.pandoc_path}#{self.option_string}")
|
254
265
|
end
|
255
266
|
end
|
256
267
|
|
257
268
|
# Run the command and returns the output.
|
258
269
|
def execute(command)
|
259
270
|
output = error = exit_status = nil
|
260
|
-
|
271
|
+
|
272
|
+
@timeout ||= 31_557_600
|
273
|
+
|
261
274
|
Open3.popen3(command) do |stdin, stdout, stderr, wait_thr|
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
rescue Timeout::Error => ex
|
271
|
-
Process.kill 9, wait_thr.pid
|
272
|
-
maybe_ex = "\n#{ex}" if ex
|
273
|
-
error = "Pandoc timed out after #{@timeout} seconds.#{maybe_ex}"
|
275
|
+
Timeout.timeout(@timeout) do
|
276
|
+
stdin.puts self.input_string
|
277
|
+
|
278
|
+
stdin.close
|
279
|
+
|
280
|
+
output = stdout.read
|
281
|
+
error = stderr.read
|
282
|
+
exit_status = wait_thr.value
|
274
283
|
end
|
284
|
+
rescue Timeout::Error => ex
|
285
|
+
Process.kill 9, wait_thr.pid
|
286
|
+
|
287
|
+
maybe_ex = "\n#{ex}" if ex
|
288
|
+
error = "Pandoc timed out after #{@timeout} seconds.#{maybe_ex}"
|
275
289
|
end
|
276
290
|
|
277
291
|
raise error unless exit_status && exit_status.success?
|
@@ -303,10 +317,10 @@ class PandocRuby
|
|
303
317
|
set_pandoc_ruby_options(flag, argument)
|
304
318
|
return '' if flag == 'timeout' # pandoc doesn't accept timeouts yet
|
305
319
|
|
306
|
-
if
|
307
|
-
"#{format_flag(flag)} #{argument}"
|
308
|
-
else
|
320
|
+
if argument.nil?
|
309
321
|
format_flag(flag)
|
322
|
+
else
|
323
|
+
"#{format_flag(flag)} \"#{argument}\""
|
310
324
|
end
|
311
325
|
end
|
312
326
|
|
@@ -315,6 +329,8 @@ class PandocRuby
|
|
315
329
|
def format_flag(flag)
|
316
330
|
if flag.length == 1
|
317
331
|
" -#{flag}"
|
332
|
+
elsif flag =~ /^-|\+/
|
333
|
+
" #{flag}"
|
318
334
|
else
|
319
335
|
" --#{flag.to_s.tr('_', '-')}"
|
320
336
|
end
|
@@ -325,8 +341,8 @@ class PandocRuby
|
|
325
341
|
def set_pandoc_ruby_options(flag, argument = nil)
|
326
342
|
case flag
|
327
343
|
when 't', 'to'
|
328
|
-
self.writer
|
329
|
-
self.binary_output
|
344
|
+
self.writer = argument.to_s
|
345
|
+
self.binary_output = true if BINARY_WRITERS.key?(self.writer)
|
330
346
|
when 'timeout'
|
331
347
|
@timeout = argument
|
332
348
|
end
|
data/pandoc-ruby.gemspec
CHANGED
@@ -5,9 +5,9 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = 'pandoc-ruby'
|
8
|
-
s.version = '2.1.
|
8
|
+
s.version = '2.1.5'
|
9
9
|
s.authors = ['William Melody']
|
10
|
-
s.date = '
|
10
|
+
s.date = '2021-11-13'
|
11
11
|
s.description = 'Ruby wrapper for Pandoc'
|
12
12
|
s.email = 'hi@williammelody.com'
|
13
13
|
s.extra_rdoc_files = [
|
data/test/test_conversions.rb
CHANGED
@@ -23,7 +23,8 @@ describe 'Conversions' do
|
|
23
23
|
:from => from,
|
24
24
|
:to => to
|
25
25
|
)
|
26
|
-
|
26
|
+
|
27
|
+
assert_equal(to_content.strip, converted_content.strip)
|
27
28
|
end
|
28
29
|
end
|
29
30
|
end
|
@@ -47,7 +48,7 @@ describe 'Conversions' do
|
|
47
48
|
)
|
48
49
|
end
|
49
50
|
|
50
|
-
assert_match(/couldn't
|
51
|
+
assert_match(/couldn't unpack docx container/, error.message)
|
51
52
|
end
|
52
53
|
|
53
54
|
it "raises an error when attempting to convert doc with doc format" do
|
data/test/test_pandoc_ruby.rb
CHANGED
@@ -2,10 +2,10 @@ require 'helper'
|
|
2
2
|
|
3
3
|
describe PandocRuby do
|
4
4
|
before do
|
5
|
-
@file
|
6
|
-
@file2
|
7
|
-
@string
|
8
|
-
@converter
|
5
|
+
@file = File.join(File.dirname(__FILE__), 'files', 'test.md')
|
6
|
+
@file2 = File.join(File.dirname(__FILE__), 'files', 'test2.md')
|
7
|
+
@string = '# Test String'
|
8
|
+
@converter = PandocRuby.new(@string, :t => :rst)
|
9
9
|
end
|
10
10
|
|
11
11
|
after do
|
@@ -14,15 +14,20 @@ describe PandocRuby do
|
|
14
14
|
|
15
15
|
it 'calls bare pandoc when passed no options' do
|
16
16
|
converter = PandocRuby.new(@string)
|
17
|
+
|
17
18
|
converter.expects(:execute).with('pandoc').returns(true)
|
19
|
+
|
18
20
|
assert converter.convert
|
19
21
|
end
|
20
22
|
|
21
23
|
it 'converts with altered pandoc_path' do
|
22
24
|
path = '/usr/bin/env pandoc'
|
23
25
|
PandocRuby.pandoc_path = path
|
26
|
+
|
24
27
|
converter = PandocRuby.new(@string)
|
28
|
+
|
25
29
|
converter.expects(:execute).with(path).returns(true)
|
30
|
+
|
26
31
|
assert converter.convert
|
27
32
|
end
|
28
33
|
|
@@ -45,50 +50,79 @@ describe PandocRuby do
|
|
45
50
|
end
|
46
51
|
|
47
52
|
it 'accepts short options' do
|
48
|
-
@converter.expects(:execute).with('pandoc -t rst').returns(true)
|
53
|
+
@converter.expects(:execute).with('pandoc -t "rst"').returns(true)
|
54
|
+
|
49
55
|
assert @converter.convert
|
50
56
|
end
|
51
57
|
|
52
58
|
it 'accepts long options' do
|
53
59
|
converter = PandocRuby.new(@string, :to => :rst)
|
54
|
-
|
60
|
+
|
61
|
+
converter.expects(:execute).with('pandoc --to "rst"').returns(true)
|
62
|
+
|
55
63
|
assert converter.convert
|
56
64
|
end
|
57
65
|
|
58
66
|
it 'accepts a variety of options in initializer' do
|
59
|
-
converter = PandocRuby.new(
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
67
|
+
converter = PandocRuby.new(
|
68
|
+
@string,
|
69
|
+
:s,
|
70
|
+
{ :f => :markdown, :to => :rst },
|
71
|
+
'no-wrap'
|
72
|
+
)
|
73
|
+
|
74
|
+
converter \
|
75
|
+
.expects(:execute) \
|
76
|
+
.with('pandoc -s -f "markdown" --to "rst" --no-wrap') \
|
65
77
|
.returns(true)
|
78
|
+
|
66
79
|
assert converter.convert
|
67
80
|
end
|
68
81
|
|
69
82
|
it 'accepts a variety of options in convert' do
|
70
83
|
converter = PandocRuby.new(@string)
|
71
|
-
|
72
|
-
|
73
|
-
.
|
84
|
+
|
85
|
+
converter \
|
86
|
+
.expects(:execute) \
|
87
|
+
.with('pandoc -s -f "markdown" --to "rst" --no-wrap') \
|
74
88
|
.returns(true)
|
89
|
+
|
75
90
|
assert converter.convert(:s, { :f => :markdown, :to => :rst }, 'no-wrap')
|
76
91
|
end
|
77
92
|
|
78
93
|
it 'converts underscore symbol args to hyphenated long options' do
|
79
|
-
converter = PandocRuby.new(
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
94
|
+
converter = PandocRuby.new(
|
95
|
+
@string,
|
96
|
+
{ :email_obfuscation => :javascript },
|
97
|
+
:table_of_contents
|
98
|
+
)
|
99
|
+
|
100
|
+
converter \
|
101
|
+
.expects(:execute) \
|
102
|
+
.with('pandoc --email-obfuscation "javascript" --table-of-contents') \
|
85
103
|
.returns(true)
|
104
|
+
|
86
105
|
assert converter.convert
|
87
106
|
end
|
88
107
|
|
89
108
|
it 'uses second arg as option' do
|
90
109
|
converter = PandocRuby.new(@string, 'toc')
|
110
|
+
|
91
111
|
converter.expects(:execute).with('pandoc --toc').returns(true)
|
112
|
+
|
113
|
+
assert converter.convert
|
114
|
+
end
|
115
|
+
|
116
|
+
it 'passes command line options without modification' do
|
117
|
+
converter = PandocRuby.new(
|
118
|
+
@string,
|
119
|
+
'+RTS', '-M512M', '-RTS', '--to=markdown', '--no-wrap'
|
120
|
+
)
|
121
|
+
|
122
|
+
converter.expects(:execute).with(
|
123
|
+
'pandoc +RTS -M512M -RTS --to=markdown --no-wrap'
|
124
|
+
).returns(true)
|
125
|
+
|
92
126
|
assert converter.convert
|
93
127
|
end
|
94
128
|
|
@@ -101,6 +135,7 @@ describe PandocRuby do
|
|
101
135
|
),
|
102
136
|
"<p>Line 1</p>\n<h1>Heading</h1>\n"
|
103
137
|
)
|
138
|
+
|
104
139
|
assert_equal(
|
105
140
|
PandocRuby.convert(
|
106
141
|
"Line 1\n# Heading",
|
@@ -120,6 +155,7 @@ describe PandocRuby do
|
|
120
155
|
),
|
121
156
|
"~example~\n"
|
122
157
|
)
|
158
|
+
|
123
159
|
assert_equal(
|
124
160
|
PandocRuby.convert(
|
125
161
|
"<sub>example</sub>\n",
|
@@ -130,6 +166,89 @@ describe PandocRuby do
|
|
130
166
|
)
|
131
167
|
end
|
132
168
|
|
169
|
+
it 'supports output filenames without spaces' do
|
170
|
+
Tempfile.create('example') do |file|
|
171
|
+
PandocRuby.convert(
|
172
|
+
'# Example',
|
173
|
+
:from => 'markdown',
|
174
|
+
:to => 'html',
|
175
|
+
:output => file.path
|
176
|
+
)
|
177
|
+
|
178
|
+
file.rewind
|
179
|
+
|
180
|
+
assert_equal("<h1 id=\"example\">Example</h1>\n", file.read)
|
181
|
+
end
|
182
|
+
end
|
183
|
+
|
184
|
+
it 'quotes output filenames with spaces' do
|
185
|
+
Tempfile.create('example with spaces') do |file|
|
186
|
+
converter = PandocRuby.new(
|
187
|
+
'# Example',
|
188
|
+
:from => 'markdown',
|
189
|
+
:to => 'html',
|
190
|
+
:output => file.path
|
191
|
+
)
|
192
|
+
|
193
|
+
converter \
|
194
|
+
.expects(:execute) \
|
195
|
+
.with(
|
196
|
+
"pandoc --from \"markdown\" --to \"html\" --output \"#{file.path}\""
|
197
|
+
).returns(true)
|
198
|
+
|
199
|
+
assert converter.convert
|
200
|
+
end
|
201
|
+
end
|
202
|
+
|
203
|
+
it 'outputs to filenames with spaces' do
|
204
|
+
Tempfile.create('example with spaces') do |file|
|
205
|
+
PandocRuby.convert(
|
206
|
+
'# Example',
|
207
|
+
:from => 'markdown',
|
208
|
+
:to => 'html',
|
209
|
+
:output => file.path
|
210
|
+
)
|
211
|
+
|
212
|
+
file.rewind
|
213
|
+
|
214
|
+
assert_equal("<h1 id=\"example\">Example</h1>\n", file.read)
|
215
|
+
end
|
216
|
+
end
|
217
|
+
|
218
|
+
it 'quotes output filenames as Pathname objects' do
|
219
|
+
Tempfile.create('example with spaces') do |file|
|
220
|
+
converter = PandocRuby.new(
|
221
|
+
'# Example',
|
222
|
+
:from => 'markdown',
|
223
|
+
:to => 'html',
|
224
|
+
:output => Pathname.new(file.path)
|
225
|
+
)
|
226
|
+
|
227
|
+
converter \
|
228
|
+
.expects(:execute) \
|
229
|
+
.with(
|
230
|
+
"pandoc --from \"markdown\" --to \"html\" --output \"#{file.path}\""
|
231
|
+
).returns(true)
|
232
|
+
|
233
|
+
assert converter.convert
|
234
|
+
end
|
235
|
+
end
|
236
|
+
|
237
|
+
it 'outputs to filenames as Pathname objects' do
|
238
|
+
Tempfile.create('example with spaces') do |file|
|
239
|
+
PandocRuby.convert(
|
240
|
+
'# Example',
|
241
|
+
:from => 'markdown',
|
242
|
+
:to => 'html',
|
243
|
+
:output => Pathname.new(file.path)
|
244
|
+
)
|
245
|
+
|
246
|
+
file.rewind
|
247
|
+
|
248
|
+
assert_equal("<h1 id=\"example\">Example</h1>\n", file.read)
|
249
|
+
end
|
250
|
+
end
|
251
|
+
|
133
252
|
it 'raises RuntimeError from pandoc executable error' do
|
134
253
|
assert_raises(RuntimeError) do
|
135
254
|
PandocRuby.new('# hello', 'badopt').to_html5
|
@@ -139,7 +258,9 @@ describe PandocRuby do
|
|
139
258
|
PandocRuby::READERS.each_key do |r|
|
140
259
|
it "converts from #{r} with PandocRuby.#{r}" do
|
141
260
|
converter = PandocRuby.send(r, @string)
|
142
|
-
|
261
|
+
|
262
|
+
converter.expects(:execute).with("pandoc --from \"#{r}\"").returns(true)
|
263
|
+
|
143
264
|
assert converter.convert
|
144
265
|
end
|
145
266
|
end
|
@@ -147,10 +268,12 @@ describe PandocRuby do
|
|
147
268
|
PandocRuby::STRING_WRITERS.each_key do |w|
|
148
269
|
it "converts to #{w} with to_#{w}" do
|
149
270
|
converter = PandocRuby.new(@string)
|
150
|
-
|
151
|
-
|
152
|
-
.
|
271
|
+
|
272
|
+
converter \
|
273
|
+
.expects(:execute) \
|
274
|
+
.with("pandoc --no-wrap --to \"#{w}\"") \
|
153
275
|
.returns(true)
|
276
|
+
|
154
277
|
assert converter.send("to_#{w}", :no_wrap)
|
155
278
|
end
|
156
279
|
end
|
@@ -158,26 +281,31 @@ describe PandocRuby do
|
|
158
281
|
PandocRuby::BINARY_WRITERS.each_key do |w|
|
159
282
|
it "converts to #{w} with to_#{w}" do
|
160
283
|
converter = PandocRuby.new(@string)
|
161
|
-
|
162
|
-
|
163
|
-
.
|
284
|
+
|
285
|
+
converter \
|
286
|
+
.expects(:execute) \
|
287
|
+
.with(regexp_matches(/^pandoc --no-wrap --to "#{w}" --output /)) \
|
164
288
|
.returns(true)
|
289
|
+
|
165
290
|
assert converter.send("to_#{w}", :no_wrap)
|
166
291
|
end
|
167
292
|
end
|
168
293
|
|
169
294
|
it 'works with strings' do
|
170
295
|
converter = PandocRuby.new('## this is a title')
|
296
|
+
|
171
297
|
assert_match(/h2/, converter.convert)
|
172
298
|
end
|
173
299
|
|
174
300
|
it 'accepts blank strings' do
|
175
301
|
converter = PandocRuby.new('')
|
302
|
+
|
176
303
|
assert_match("\n", converter.convert)
|
177
304
|
end
|
178
305
|
|
179
306
|
it 'accepts nil and treats like a blank string' do
|
180
307
|
converter = PandocRuby.new(nil)
|
308
|
+
|
181
309
|
assert_match("\n", converter.convert)
|
182
310
|
end
|
183
311
|
|
@@ -190,21 +318,20 @@ describe PandocRuby do
|
|
190
318
|
end
|
191
319
|
|
192
320
|
it 'runs more than 400 times without error' do
|
193
|
-
|
194
|
-
|
195
|
-
PandocRuby.convert(@string)
|
196
|
-
end
|
197
|
-
assert true
|
198
|
-
rescue Errno::EMFILE, Errno::EAGAIN => e
|
199
|
-
flunk e
|
321
|
+
400.times do
|
322
|
+
PandocRuby.convert(@string)
|
200
323
|
end
|
324
|
+
|
325
|
+
assert true
|
326
|
+
rescue Errno::EMFILE, Errno::EAGAIN => e
|
327
|
+
flunk e
|
201
328
|
end
|
202
329
|
|
203
330
|
it 'gracefully times out when pandoc hangs due to malformed input' do
|
204
|
-
skip(
|
205
|
-
|
206
|
-
))
|
331
|
+
skip('Pandoc no longer times out with test file. Determine how to test.')
|
332
|
+
|
207
333
|
file = File.join(File.dirname(__FILE__), 'files', 'bomb.tex')
|
334
|
+
|
208
335
|
contents = File.read(file)
|
209
336
|
|
210
337
|
assert_raises(RuntimeError) do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pandoc-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1.
|
4
|
+
version: 2.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- William Melody
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-11-13 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Ruby wrapper for Pandoc
|
14
14
|
email: hi@williammelody.com
|
@@ -36,7 +36,7 @@ homepage: http://github.com/xwmx/pandoc-ruby
|
|
36
36
|
licenses:
|
37
37
|
- MIT
|
38
38
|
metadata: {}
|
39
|
-
post_install_message:
|
39
|
+
post_install_message:
|
40
40
|
rdoc_options: []
|
41
41
|
require_paths:
|
42
42
|
- lib
|
@@ -51,8 +51,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
51
51
|
- !ruby/object:Gem::Version
|
52
52
|
version: '0'
|
53
53
|
requirements: []
|
54
|
-
rubygems_version: 3.
|
55
|
-
signing_key:
|
54
|
+
rubygems_version: 3.2.22
|
55
|
+
signing_key:
|
56
56
|
specification_version: 4
|
57
57
|
summary: PandocRuby
|
58
58
|
test_files: []
|