RbST 0.4.0 → 0.5.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +5 -5
- data/Gemfile.lock +6 -7
- data/README.markdown +37 -21
- data/RbST.gemspec +16 -10
- data/lib/rbst.rb +33 -15
- data/lib/rst2parts/rst2html.py +7 -0
- data/lib/rst2parts/rst2latex.py +9 -1
- data/lib/rst2parts/transform.py +3 -3
- data/test/files/test.latex +0 -1
- data/test/test_rbst.rb +118 -15
- metadata +65 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e4300ed0df2f3d9e19a5b3af60d29c6b97b8cf28
|
4
|
+
data.tar.gz: d2219182d61736eb21747b4fd91549bf3e9c9506
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6363108ae317b6d0decbde9fc16d8266716f23aa1157f53ac5dd6b5a680ff71d39b1c8ff2131b9af7adabd2290584b4a17a47630bb57058b767e213d45e71fd8
|
7
|
+
data.tar.gz: be8f6a799bf142600b11b4f8d302668ee01b5fe3786b83e4f29d6289594a6d8f47e682a8aeccb771e84841270bb8643459ebc56be48ea7fe8696507900a0b5e3
|
data/Gemfile
CHANGED
@@ -6,9 +6,9 @@ source "http://rubygems.org"
|
|
6
6
|
# Add dependencies to develop your gem here.
|
7
7
|
# Include everything needed to run rake, tests, features, etc.
|
8
8
|
group :development, :test do
|
9
|
-
gem "mocha"
|
10
|
-
gem "
|
11
|
-
gem "
|
12
|
-
gem "shoulda"
|
13
|
-
gem "test-unit"
|
9
|
+
gem "mocha", "~> 1.1.0"
|
10
|
+
gem "rake", "~> 10.4.2"
|
11
|
+
gem "rdoc", "~> 4.2.0"
|
12
|
+
gem "shoulda", "~> 3.5.0"
|
13
|
+
gem "test-unit", "~> 3.0.9"
|
14
14
|
end
|
data/Gemfile.lock
CHANGED
@@ -15,8 +15,7 @@ GEM
|
|
15
15
|
metaclass (~> 0.0.1)
|
16
16
|
power_assert (0.2.2)
|
17
17
|
rake (10.4.2)
|
18
|
-
rdoc (
|
19
|
-
json (~> 1.4)
|
18
|
+
rdoc (4.2.0)
|
20
19
|
shoulda (3.5.0)
|
21
20
|
shoulda-context (~> 1.0, >= 1.0.1)
|
22
21
|
shoulda-matchers (>= 1.4.1, < 3.0)
|
@@ -33,8 +32,8 @@ PLATFORMS
|
|
33
32
|
ruby
|
34
33
|
|
35
34
|
DEPENDENCIES
|
36
|
-
mocha
|
37
|
-
rake
|
38
|
-
rdoc (~>
|
39
|
-
shoulda
|
40
|
-
test-unit
|
35
|
+
mocha (~> 1.1.0)
|
36
|
+
rake (~> 10.4.2)
|
37
|
+
rdoc (~> 4.2.0)
|
38
|
+
shoulda (~> 3.5.0)
|
39
|
+
test-unit (~> 3.0.9)
|
data/README.markdown
CHANGED
@@ -4,7 +4,7 @@ A simple Ruby wrapper for processing reStructuredText via Python's Docutils.
|
|
4
4
|
|
5
5
|
## Installation
|
6
6
|
|
7
|
-
Python 2.3+ is required.
|
7
|
+
Python 2.3+ (or 3.3+) is required.
|
8
8
|
|
9
9
|
RbST is available on [RubyGems.org](http://gemcutter.org/gems/RbST).
|
10
10
|
|
@@ -18,18 +18,22 @@ RbST is available on [RubyGems.org](http://gemcutter.org/gems/RbST).
|
|
18
18
|
# or
|
19
19
|
@latex = RbST.new('*hello*').to_latex
|
20
20
|
|
21
|
-
This takes the reStructuredText formatted file and converts it to either HTML
|
21
|
+
This takes the reStructuredText formatted file and converts it to either HTML
|
22
|
+
or LaTeX. The first argument can be either a file or a string.
|
22
23
|
|
23
24
|
You can also use the `convert` class method to output HTML:
|
24
25
|
|
25
26
|
puts RbST.convert('/some/file.rst')
|
26
27
|
|
27
|
-
Arguments can be passed to `#to_html`, `#to_latex`, `new` or `convert`,
|
28
|
+
Arguments can be passed to `#to_html`, `#to_latex`, `new` or `convert`,
|
29
|
+
accepting symbols or strings for options without arguments and hashes of
|
30
|
+
strings or symbols for options with arguments.
|
28
31
|
|
29
32
|
puts RbST.new(".. a comment").to_html('strip-comments')
|
30
33
|
# => '<div class="document">\n</div>'
|
31
34
|
|
32
|
-
Options passed as string use hyphens while symbols use underscores. For
|
35
|
+
Options passed as string use hyphens while symbols use underscores. For
|
36
|
+
instance, the above could also be written as:
|
33
37
|
|
34
38
|
puts RbST.new(".. a comment").to_html(:strip_comments)
|
35
39
|
# => '<div class="document">\n</div>'
|
@@ -39,33 +43,45 @@ Document parts can also be specified with the `:parts` option.
|
|
39
43
|
puts RbST.new("hello world").to_html(:part => :fragment)
|
40
44
|
# => '<p>hello world</p>'
|
41
45
|
|
42
|
-
By default, RbST uses the `html_body` part for HTML and the `whole` part
|
46
|
+
By default, RbST uses the `html_body` part for HTML and the `whole` part
|
47
|
+
for LaTeX.
|
43
48
|
|
44
|
-
Available options can be viewed using the `RbST.html_options` and
|
49
|
+
Available options can be viewed using the `RbST.html_options` and
|
50
|
+
`RbST.latex_options` class methods.
|
45
51
|
|
46
|
-
You might run into a situation where you want to specify a custom script for
|
52
|
+
You might run into a situation where you want to specify a custom script for
|
53
|
+
processing one or both of the output formats. If so, just specify the full
|
54
|
+
path to the custom script for the format by passing a hash to the
|
55
|
+
`RbST.executables=` method:
|
47
56
|
|
48
57
|
RbST.executables = {:html => "/some/other/path/2html.py"}
|
49
|
-
RbST.new("something").to_html # uses custom executable for outputting html
|
50
|
-
RbST.new("something else").to_latex # uses default executable for latex since a custom one wasn't specified
|
51
58
|
|
52
|
-
|
53
|
-
|
59
|
+
# uses custom executable for outputting html
|
60
|
+
RbST.new("something").to_html
|
61
|
+
|
62
|
+
# uses default executable for latex since a custom one wasn't specified
|
63
|
+
RbST.new("something else").to_latex
|
54
64
|
|
55
|
-
|
65
|
+
Similarly, if you want to explicitly specify which python executable to
|
66
|
+
use, set the path with the `RbST.python_path=` method:
|
56
67
|
|
57
|
-
|
58
|
-
|
59
|
-
|
68
|
+
RbST.python_path = "/usr/bin/env python3"
|
69
|
+
RbST.new("something").to_latex
|
70
|
+
|
71
|
+
For more information on reStructuredText, see the
|
72
|
+
[ReST documentation](http://docutils.sourceforge.net/rst.html).
|
60
73
|
|
61
74
|
## Note on Patches/Pull Requests
|
62
75
|
|
63
|
-
-
|
64
|
-
-
|
65
|
-
-
|
66
|
-
|
67
|
-
-
|
76
|
+
- Fork the project.
|
77
|
+
- Make your feature addition or bug fix.
|
78
|
+
- Add tests for it. This is important so I don't break it in a future version
|
79
|
+
unintentionally.
|
80
|
+
- Commit, do not mess with rakefile, version, or history. (if you want to have
|
81
|
+
your own version, that is fine but bump version in a commit by itself I can
|
82
|
+
ignore when I pull)
|
83
|
+
- Send me a pull request. Bonus points for topic branches.
|
68
84
|
|
69
85
|
## Copyright
|
70
86
|
|
71
|
-
Copyright (c) 2009-
|
87
|
+
Copyright (c) 2009-2015 William Melody. See LICENSE for details.
|
data/RbST.gemspec
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "RbST"
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.5.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["William Melody"]
|
@@ -45,17 +45,23 @@ Gem::Specification.new do |s|
|
|
45
45
|
s.specification_version = 3
|
46
46
|
|
47
47
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
48
|
-
s.add_development_dependency(
|
49
|
-
s.add_development_dependency(
|
50
|
-
s.add_development_dependency(
|
48
|
+
s.add_development_dependency('mocha', '~> 1.1', '> 1.1.0')
|
49
|
+
s.add_development_dependency('rake', '~> 10.4', '>= 10.4.2')
|
50
|
+
s.add_development_dependency('rdoc', '~> 4.2', '>= 4.2.0')
|
51
|
+
s.add_development_dependency('shoulda', '~> 3.5', '>= 3.5.0')
|
52
|
+
s.add_development_dependency('test-unit', '~> 3.0', '>= 3.0.9')
|
51
53
|
else
|
52
|
-
s.add_dependency(%q<mocha>, ["
|
53
|
-
s.add_dependency(%q<
|
54
|
-
s.add_dependency(%q<
|
54
|
+
s.add_dependency(%q<mocha>, ["~> 1.1.0"])
|
55
|
+
s.add_dependency(%q<rake>, ["~> 10.4.2"])
|
56
|
+
s.add_dependency(%q<rdoc>, ["~> 4.2.0"])
|
57
|
+
s.add_dependency(%q<shoulda>, ["~> 3.5.0"])
|
58
|
+
s.add_dependency(%q<test-unit>, ["~> 3.0.9"])
|
55
59
|
end
|
56
60
|
else
|
57
|
-
s.add_dependency(%q<mocha>, ["
|
58
|
-
s.add_dependency(%q<
|
59
|
-
s.add_dependency(%q<
|
61
|
+
s.add_dependency(%q<mocha>, ["~> 1.1.0"])
|
62
|
+
s.add_dependency(%q<rake>, ["~> 10.4.2"])
|
63
|
+
s.add_dependency(%q<rdoc>, ["~> 4.2.0"])
|
64
|
+
s.add_dependency(%q<shoulda>, ["~> 3.5.0"])
|
65
|
+
s.add_dependency(%q<test-unit>, ["~> 3.0.9"])
|
60
66
|
end
|
61
67
|
end
|
data/lib/rbst.rb
CHANGED
@@ -1,24 +1,29 @@
|
|
1
1
|
# encoding: UTF-8
|
2
2
|
|
3
3
|
class RbST
|
4
|
-
|
5
|
-
@@executable_path = File.expand_path(
|
4
|
+
@@python_path="python"
|
5
|
+
@@executable_path = File.expand_path(
|
6
|
+
File.join(File.dirname(__FILE__), "rst2parts")
|
7
|
+
)
|
6
8
|
@@executables = {
|
7
9
|
:html => File.join(@@executable_path, "rst2html.py"),
|
8
10
|
:latex => File.join(@@executable_path, "rst2latex.py")
|
9
11
|
}
|
10
|
-
|
11
|
-
# Takes a string or file path plus any additional options and converts the
|
12
|
+
|
13
|
+
# Takes a string or file path plus any additional options and converts the
|
14
|
+
# input.
|
12
15
|
def self.convert(*args)
|
13
16
|
new(*args).convert
|
14
17
|
end
|
15
18
|
|
16
|
-
# Print LaTeX-Specific Options, General Docutils Options and reStructuredText
|
19
|
+
# Print LaTeX-Specific Options, General Docutils Options and reStructuredText
|
20
|
+
# Parser Options.
|
17
21
|
def self.latex_options
|
18
22
|
new.print_options(:latex)
|
19
23
|
end
|
20
24
|
|
21
|
-
# Print HTML-Specific Options, General Docutils Options and reStructuredText
|
25
|
+
# Print HTML-Specific Options, General Docutils Options and reStructuredText
|
26
|
+
# Parser Options.
|
22
27
|
def self.html_options
|
23
28
|
new.print_options(:html)
|
24
29
|
end
|
@@ -35,7 +40,15 @@ class RbST
|
|
35
40
|
# Return the executable hash.
|
36
41
|
def self.executables; @@executables end
|
37
42
|
|
38
|
-
#
|
43
|
+
# Specify a python path or executable.
|
44
|
+
def self.python_path=(path_to_python)
|
45
|
+
@@python_path = path_to_python
|
46
|
+
end
|
47
|
+
# Return the python path.
|
48
|
+
def self.python_path; @@python_path end
|
49
|
+
|
50
|
+
# Takes a string or file path plus any additional options and creates a new
|
51
|
+
# converter object.
|
39
52
|
def initialize(*args)
|
40
53
|
target = args.shift
|
41
54
|
@target = File.exists?(target) ? File.read(target) : target rescue target
|
@@ -44,7 +57,10 @@ class RbST
|
|
44
57
|
|
45
58
|
def convert # :nodoc:
|
46
59
|
@output_format ||= :html
|
47
|
-
execute
|
60
|
+
execute(
|
61
|
+
"#{@@python_path} #{@@executables[@output_format]}" +
|
62
|
+
convert_options
|
63
|
+
)
|
48
64
|
end
|
49
65
|
alias_method :to_s, :convert
|
50
66
|
|
@@ -62,19 +78,21 @@ class RbST
|
|
62
78
|
convert
|
63
79
|
end
|
64
80
|
|
65
|
-
# Formats and prints the options from the docutils help in the way they'd be
|
81
|
+
# Formats and prints the options from the docutils help in the way they'd be
|
82
|
+
# specified in RbST: strings, symbols and hashes.
|
66
83
|
def print_options(format)
|
67
|
-
help = execute("
|
68
|
-
# non-hyphenated long options to symbols
|
84
|
+
help = execute("#{@@python_path} #{@@executables[format]} --help")
|
85
|
+
# Convert non-hyphenated long options to symbols
|
69
86
|
help.gsub!(/(\-\-)([A-Za-z0-9]+)([=|\s])/, ':\2\3')
|
70
|
-
# hyphenated long options to quoted strings
|
87
|
+
# Convert hyphenated long options to quoted strings
|
71
88
|
help.gsub!(/(\-\-)([\w|\-]+)(\n)?[^$|^=|\]]?/, '\'\2\'\3')
|
72
|
-
# equal to hashrocket
|
89
|
+
# Convert equal signs to hashrocket
|
73
90
|
help.gsub!(/\=/, ' => ')
|
74
|
-
#
|
91
|
+
# Convert short options to symbols
|
75
92
|
help.gsub!(/([^\w])\-(\w)([^\w])/, '\1:\2\1')
|
76
|
-
# short options with args get a hashrocket
|
93
|
+
# Convert short options with args get a hashrocket
|
77
94
|
help.gsub!(/(:\w) </, '\1 => <')
|
95
|
+
# Print converted help text
|
78
96
|
puts help
|
79
97
|
end
|
80
98
|
|
data/lib/rst2parts/rst2html.py
CHANGED
@@ -6,6 +6,7 @@ try:
|
|
6
6
|
except:
|
7
7
|
pass
|
8
8
|
|
9
|
+
import codecs
|
9
10
|
import sys
|
10
11
|
from transform import transform
|
11
12
|
from docutils.writers.html4css1 import Writer
|
@@ -14,4 +15,10 @@ def main():
|
|
14
15
|
return transform(writer=Writer(), part='html_body')
|
15
16
|
|
16
17
|
if __name__ == '__main__':
|
18
|
+
# Python 2 wants an encoded string for unicode, while Python 3 views an
|
19
|
+
# encoded string as bytes and asks for a string. Solution via:
|
20
|
+
# http://stackoverflow.com/a/24104423
|
21
|
+
if sys.version_info[0] < 3:
|
22
|
+
UTF8Writer = codecs.getwriter('utf8')
|
23
|
+
sys.stdout = UTF8Writer(sys.stdout)
|
17
24
|
sys.stdout.write(main())
|
data/lib/rst2parts/rst2latex.py
CHANGED
@@ -6,6 +6,8 @@ try:
|
|
6
6
|
except:
|
7
7
|
pass
|
8
8
|
|
9
|
+
import codecs
|
10
|
+
import sys
|
9
11
|
from transform import transform
|
10
12
|
from docutils.writers.latex2e import Writer
|
11
13
|
|
@@ -13,4 +15,10 @@ def main():
|
|
13
15
|
return transform(writer=Writer(), part='whole')
|
14
16
|
|
15
17
|
if __name__ == '__main__':
|
16
|
-
|
18
|
+
# Python 2 wants an encoded string for unicode, while Python 3 views an
|
19
|
+
# encoded string as bytes and asks for a string. Solution via:
|
20
|
+
# http://stackoverflow.com/a/24104423
|
21
|
+
if sys.version_info[0] < 3:
|
22
|
+
UTF8Writer = codecs.getwriter('utf8')
|
23
|
+
sys.stdout = UTF8Writer(sys.stdout)
|
24
|
+
sys.stdout.write(main())
|
data/lib/rst2parts/transform.py
CHANGED
@@ -23,7 +23,7 @@ def transform(writer=None, part=None):
|
|
23
23
|
|
24
24
|
if len(args) == 1:
|
25
25
|
try:
|
26
|
-
content = open(args[0], '
|
26
|
+
content = open(args[0], 'rb').read()
|
27
27
|
except IOError:
|
28
28
|
content = args[0]
|
29
29
|
else:
|
@@ -36,5 +36,5 @@ def transform(writer=None, part=None):
|
|
36
36
|
)
|
37
37
|
|
38
38
|
if opts.part in parts:
|
39
|
-
return parts[opts.part]
|
40
|
-
return ''
|
39
|
+
return parts[opts.part]
|
40
|
+
return u''
|
data/test/files/test.latex
CHANGED
data/test/test_rbst.rb
CHANGED
@@ -11,12 +11,17 @@ class TestRbST < Test::Unit::TestCase
|
|
11
11
|
File.join(File.dirname(__FILE__), 'files', "test.#{f}")
|
12
12
|
)
|
13
13
|
end
|
14
|
-
@rst2parts_path = File.expand_path(
|
14
|
+
@rst2parts_path = File.expand_path(
|
15
|
+
File.join(File.dirname(__FILE__), '..', 'lib', 'rst2parts')
|
16
|
+
)
|
15
17
|
end
|
16
18
|
|
17
19
|
should "call bare rest2parts when passed no options" do
|
18
20
|
converter = RbST.new(@rst_file)
|
19
|
-
converter
|
21
|
+
converter \
|
22
|
+
.expects(:execute) \
|
23
|
+
.with("python #{@rst2parts_path}/rst2html.py") \
|
24
|
+
.returns(true)
|
20
25
|
assert converter.convert
|
21
26
|
end
|
22
27
|
|
@@ -25,7 +30,10 @@ class TestRbST < Test::Unit::TestCase
|
|
25
30
|
default_executables = RbST.executables
|
26
31
|
RbST.executables = executables
|
27
32
|
converter = RbST.new(@file)
|
28
|
-
converter
|
33
|
+
converter \
|
34
|
+
.expects(:execute) \
|
35
|
+
.with("python #{executables[:html]}") \
|
36
|
+
.returns(true)
|
29
37
|
assert converter.to_html
|
30
38
|
RbST.executables = default_executables
|
31
39
|
end
|
@@ -42,46 +50,141 @@ class TestRbST < Test::Unit::TestCase
|
|
42
50
|
|
43
51
|
should "convert ReST to html" do
|
44
52
|
html = RbST.new(@rst_file).to_html
|
45
|
-
assert_equal
|
53
|
+
assert_equal(
|
54
|
+
File.read(@html_file),
|
55
|
+
html
|
56
|
+
)
|
46
57
|
end
|
47
58
|
|
48
59
|
should "convert ReST to LaTeX" do
|
49
60
|
latex = RbST.new(@rst_file).to_latex
|
50
|
-
assert_equal
|
61
|
+
assert_equal(
|
62
|
+
File.read(@latex_file),
|
63
|
+
latex
|
64
|
+
)
|
51
65
|
end
|
52
66
|
|
53
67
|
[:html, :latex].each do |f|
|
54
68
|
should "accept options on #to_#{f}" do
|
55
69
|
converter = RbST.new(@rst_file)
|
56
|
-
converter
|
70
|
+
converter \
|
71
|
+
.expects(:execute) \
|
72
|
+
.with("python #{@rst2parts_path}/rst2#{f}.py --raw-enabled") \
|
73
|
+
.returns(true)
|
57
74
|
assert converter.send("to_#{f}", :raw_enabled)
|
58
75
|
end
|
59
76
|
end
|
60
77
|
|
61
78
|
should "recognize strip_comments option" do
|
62
79
|
html_with_comment = RbST.convert(".. comment")
|
63
|
-
assert_equal
|
80
|
+
assert_equal(
|
81
|
+
html_with_comment,
|
82
|
+
%Q{<div class=\"document\">\n<!-- comment -->\n</div>\n}
|
83
|
+
)
|
64
84
|
html_without_comment = RbST.convert(".. comment", 'strip-comments')
|
65
|
-
assert_equal
|
85
|
+
assert_equal(
|
86
|
+
html_without_comment,
|
87
|
+
%Q{<div class=\"document\">\n</div>\n}
|
88
|
+
)
|
66
89
|
end
|
67
90
|
|
68
91
|
should "recognize cloak_email_addresses option" do
|
69
92
|
html_with_uncloaked_email = RbST.convert("steve@mac.com")
|
70
|
-
assert_equal
|
93
|
+
assert_equal(
|
94
|
+
%Q{<div class=\"document\">\n<p><a class=\"reference external\" href=\"mailto:steve@mac.com\">steve@mac.com</a></p>\n</div>\n},
|
95
|
+
html_with_uncloaked_email
|
96
|
+
)
|
71
97
|
html_with_cloaked_email = RbST.convert("steve@mac.com", 'cloak-email-addresses')
|
72
|
-
assert_equal
|
98
|
+
assert_equal(
|
99
|
+
%Q{<div class=\"document\">\n<p><a class=\"reference external\" href=\"mailto:steve%40mac.com\">steve<span>@</span>mac<span>.</span>com</a></p>\n</div>\n},
|
100
|
+
html_with_cloaked_email
|
101
|
+
)
|
73
102
|
end
|
74
103
|
|
75
104
|
should "recognize part option" do
|
76
105
|
html_body = RbST.convert("hello world", :part => :html_body)
|
77
|
-
assert_equal
|
106
|
+
assert_equal(
|
107
|
+
%Q{<div class=\"document\">\n<p>hello world</p>\n</div>\n},
|
108
|
+
html_body
|
109
|
+
)
|
78
110
|
fragment = RbST.convert("hello world", :part => :fragment)
|
79
|
-
assert_equal
|
111
|
+
assert_equal(
|
112
|
+
%Q{<p>hello world</p>\n},
|
113
|
+
fragment
|
114
|
+
)
|
80
115
|
end
|
81
116
|
|
82
|
-
should "convert unicode" do
|
83
|
-
|
84
|
-
|
117
|
+
should "convert to html with unicode" do
|
118
|
+
test_string = "Hello ☃".force_encoding("utf-8")
|
119
|
+
output = RbST.new(test_string).to_html(:part => :fragment)
|
120
|
+
assert_equal(
|
121
|
+
%Q{<p>#{test_string}</p>\n},
|
122
|
+
output
|
123
|
+
)
|
124
|
+
end
|
125
|
+
|
126
|
+
should "convert to latex with unicode" do
|
127
|
+
test_string = "Hello ☃".force_encoding("utf-8")
|
128
|
+
output = RbST.new(test_string).to_latex(:part => :body)
|
129
|
+
assert_equal(
|
130
|
+
%Q{\n#{test_string}\n},
|
131
|
+
output
|
132
|
+
)
|
133
|
+
end
|
134
|
+
|
135
|
+
should "execute with custom python path" do
|
136
|
+
RbST.python_path = "/usr/bin/env python3"
|
137
|
+
converter = RbST.new(@rst_file)
|
138
|
+
converter \
|
139
|
+
.expects(:execute) \
|
140
|
+
.with("/usr/bin/env python3 #{@rst2parts_path}/rst2html.py") \
|
141
|
+
.returns(true)
|
142
|
+
assert converter.convert
|
143
|
+
RbST.python_path = "python"
|
144
|
+
end
|
145
|
+
|
146
|
+
should "convert to html with python3" do
|
147
|
+
RbST.python_path = "/usr/bin/env python3"
|
148
|
+
test_string = "Hello ☃".force_encoding("utf-8")
|
149
|
+
output = RbST.new(test_string).to_html(:part => :fragment)
|
150
|
+
assert_equal(
|
151
|
+
%Q{<p>#{test_string}</p>\n},
|
152
|
+
output
|
153
|
+
)
|
154
|
+
RbST.python_path = "python"
|
155
|
+
end
|
156
|
+
|
157
|
+
should "convert to latex with python3" do
|
158
|
+
RbST.python_path = "/usr/bin/env python3"
|
159
|
+
test_string = "Hello ☃".force_encoding("utf-8")
|
160
|
+
output = RbST.new(test_string).to_latex(:part => :body)
|
161
|
+
assert_equal(
|
162
|
+
%Q{\n#{test_string}\n},
|
163
|
+
output
|
164
|
+
)
|
165
|
+
RbST.python_path = "python"
|
166
|
+
end
|
167
|
+
|
168
|
+
should "convert to html with python2" do
|
169
|
+
RbST.python_path = "/usr/bin/env python2"
|
170
|
+
test_string = "Hello ☃".force_encoding("utf-8")
|
171
|
+
output = RbST.new(test_string).to_html(:part => :fragment)
|
172
|
+
assert_equal(
|
173
|
+
%Q{<p>#{test_string}</p>\n},
|
174
|
+
output
|
175
|
+
)
|
176
|
+
RbST.python_path = "python"
|
177
|
+
end
|
178
|
+
|
179
|
+
should "convert to latex with python2" do
|
180
|
+
RbST.python_path = "/usr/bin/env python2"
|
181
|
+
test_string = "Hello ☃".force_encoding("utf-8")
|
182
|
+
output = RbST.new(test_string).to_latex(:part => :body)
|
183
|
+
assert_equal(
|
184
|
+
%Q{\n#{test_string}\n},
|
185
|
+
output
|
186
|
+
)
|
187
|
+
RbST.python_path = "python"
|
85
188
|
end
|
86
189
|
|
87
190
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: RbST
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- William Melody
|
@@ -14,44 +14,102 @@ dependencies:
|
|
14
14
|
name: mocha
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.1'
|
20
|
+
- - ">"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 1.1.0
|
23
|
+
type: :development
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - "~>"
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '1.1'
|
30
|
+
- - ">"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 1.1.0
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: rake
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - "~>"
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '10.4'
|
17
40
|
- - ">="
|
18
41
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
42
|
+
version: 10.4.2
|
20
43
|
type: :development
|
21
44
|
prerelease: false
|
22
45
|
version_requirements: !ruby/object:Gem::Requirement
|
23
46
|
requirements:
|
47
|
+
- - "~>"
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '10.4'
|
24
50
|
- - ">="
|
25
51
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
52
|
+
version: 10.4.2
|
27
53
|
- !ruby/object:Gem::Dependency
|
28
54
|
name: rdoc
|
29
55
|
requirement: !ruby/object:Gem::Requirement
|
30
56
|
requirements:
|
31
57
|
- - "~>"
|
32
58
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
59
|
+
version: '4.2'
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: 4.2.0
|
34
63
|
type: :development
|
35
64
|
prerelease: false
|
36
65
|
version_requirements: !ruby/object:Gem::Requirement
|
37
66
|
requirements:
|
38
67
|
- - "~>"
|
39
68
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
69
|
+
version: '4.2'
|
70
|
+
- - ">="
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: 4.2.0
|
41
73
|
- !ruby/object:Gem::Dependency
|
42
74
|
name: shoulda
|
43
75
|
requirement: !ruby/object:Gem::Requirement
|
44
76
|
requirements:
|
77
|
+
- - "~>"
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: '3.5'
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 3.5.0
|
83
|
+
type: :development
|
84
|
+
prerelease: false
|
85
|
+
version_requirements: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '3.5'
|
90
|
+
- - ">="
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: 3.5.0
|
93
|
+
- !ruby/object:Gem::Dependency
|
94
|
+
name: test-unit
|
95
|
+
requirement: !ruby/object:Gem::Requirement
|
96
|
+
requirements:
|
97
|
+
- - "~>"
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: '3.0'
|
45
100
|
- - ">="
|
46
101
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
102
|
+
version: 3.0.9
|
48
103
|
type: :development
|
49
104
|
prerelease: false
|
50
105
|
version_requirements: !ruby/object:Gem::Requirement
|
51
106
|
requirements:
|
107
|
+
- - "~>"
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '3.0'
|
52
110
|
- - ">="
|
53
111
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
112
|
+
version: 3.0.9
|
55
113
|
description: A simple Ruby wrapper for processing reStructuredText via Python's Docutils
|
56
114
|
email: hi@williammelody.com
|
57
115
|
executables: []
|