tilt 2.0.4 → 2.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/COPYING +1 -1
- data/README.md +1 -0
- data/docs/TEMPLATES.md +30 -1
- data/lib/tilt.rb +2 -1
- data/lib/tilt/mapping.rb +9 -6
- data/lib/tilt/pandoc.rb +23 -27
- data/lib/tilt/rst-pandoc.rb +18 -0
- data/test/tilt_mapping_test.rb +0 -14
- data/test/tilt_markdown_test.rb +0 -3
- data/test/tilt_pandoctemplate_test.rb +18 -7
- data/test/tilt_rstpandoctemplate_test.rb +32 -0
- data/tilt.gemspec +4 -2
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 736fe3309d9aab2be73d9ec2fd4d9b110d6736ac
|
4
|
+
data.tar.gz: 236969d204a43624049b69dee61983bf410b57d8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c30008417646c5d8273b32cb357c57635d6c34c879957f8712c2a52dac00b1915a44cb6937093eb2459c216d999a5b22aa1844381de8a94eb28610b6e24e13af
|
7
|
+
data.tar.gz: 2d4d093a48e787e69431b8e34d89ce983dd648b90820bdc393e83ba2f71015e63203031c81908ae6445dd7cc6138213bc78f9d999ad3968c6c307d9ab081b559
|
data/CHANGELOG.md
CHANGED
data/COPYING
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
Copyright (c) 2010 Ryan Tomayko <http://tomayko.com/about>
|
1
|
+
Copyright (c) 2010-2016 Ryan Tomayko <http://tomayko.com/about>
|
2
2
|
|
3
3
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
4
|
of this software and associated documentation files (the "Software"), to
|
data/README.md
CHANGED
@@ -41,6 +41,7 @@ Support for these template engines is included with the package:
|
|
41
41
|
| BlueCloth | .markdown, .mkd, .md | bluecloth | Community |
|
42
42
|
| Kramdown | .markdown, .mkd, .md | kramdown | Community |
|
43
43
|
| Pandoc | .markdown, .mkd, .md | pandoc | Community |
|
44
|
+
| reStructuredText | .rst | pandoc | Community |
|
44
45
|
| Maruku | .markdown, .mkd, .md | maruku | Community |
|
45
46
|
| CommonMarker | .markdown, .mkd, .md | commonmarker | Community |
|
46
47
|
| RedCloth | .textile | redcloth | Community |
|
data/docs/TEMPLATES.md
CHANGED
@@ -33,10 +33,11 @@ Tilt also includes support for CSS processors like [LessCSS][lesscss] and
|
|
33
33
|
* CoffeeScript - `Tilt::CoffeeScriptTemplate`
|
34
34
|
* Literate CoffeeScript - `Tilt::CoffeeScriptLiterateTemplate`
|
35
35
|
* [Textile](#redcloth) - `Tilt::RedClothTemplate`
|
36
|
+
* reStructuredText - `Tilt::RstPandocTemplate`
|
36
37
|
* Creole - `Tilt::CreoleTemplate`
|
37
38
|
* [RDoc](#rdoc) - `Tilt::RDocTemplate`
|
38
39
|
|
39
|
-
Tilt has extensive support for Markdown, backed by one of
|
40
|
+
Tilt has extensive support for Markdown, backed by one of seven different
|
40
41
|
implementations (depending on which are available on your system):
|
41
42
|
|
42
43
|
* [Markdown](#markdown) - Generic Markdown implementation
|
@@ -45,6 +46,7 @@ implementations (depending on which are available on your system):
|
|
45
46
|
* BlueCloth - `Tilt::BlueClothTemplate`
|
46
47
|
* Kramdown - `Tilt::KramdownTemplate`
|
47
48
|
* Pandoc - `Tilt::PandocTemplate`
|
49
|
+
* CommonMarker - `Tilt::CommonMarkerTemplate`
|
48
50
|
* Maruku - `Tilt::MarukuTemplate`
|
49
51
|
|
50
52
|
<a name='erb'></a>
|
@@ -393,6 +395,31 @@ when using this template engine in a threaded environment.
|
|
393
395
|
|
394
396
|
* [RedCloth][redcloth]
|
395
397
|
|
398
|
+
<a name='rst'></a>
|
399
|
+
reStructuredText (`rst`)
|
400
|
+
-------------------
|
401
|
+
|
402
|
+
reStructuredText is a lightweight markup language originally developed by David Goodger,
|
403
|
+
based on StructuredText and Setext. reStructuredText is primarily used for technical
|
404
|
+
documentation in the Python programming language community, e.g. by the
|
405
|
+
[Sphinx](http://www.sphinx-doc.org/en/stable/rest.html) Python documentation generator.
|
406
|
+
|
407
|
+
reStructuredText formatted texts are converted to HTML with [Pandoc][pandoc], which
|
408
|
+
is an application written in Haskell, with a Ruby wrapper provided by the
|
409
|
+
[pandoc-ruby][pandoc-ruby] gem.
|
410
|
+
|
411
|
+
### Example
|
412
|
+
|
413
|
+
Hello Rst Templates
|
414
|
+
===================
|
415
|
+
|
416
|
+
Hello World. This is a paragraph.
|
417
|
+
|
418
|
+
### See Also
|
419
|
+
|
420
|
+
* [Pandoc][pandoc]
|
421
|
+
* [pandoc-ruby][pandoc-ruby]
|
422
|
+
|
396
423
|
|
397
424
|
<a name='rdoc'></a>
|
398
425
|
RDoc (`rdoc`)
|
@@ -523,3 +550,5 @@ using this template engine within a threaded environment.
|
|
523
550
|
[rdiscount]: http://github.com/rtomayko/rdiscount/ "RDiscount"
|
524
551
|
[smartypants]: http://daringfireball.net/projects/smartypants/ "Smarty Pants"
|
525
552
|
[markdown]: http://en.wikipedia.org/wiki/Markdown "Markdown"
|
553
|
+
[pandoc]: http://pandoc.org/ "Pandoc"
|
554
|
+
[pandoc-ruby]: https://github.com/alphabetum/pandoc-ruby "pandoc-ruby"
|
data/lib/tilt.rb
CHANGED
@@ -4,7 +4,7 @@ require 'tilt/template'
|
|
4
4
|
# Namespace for Tilt. This module is not intended to be included anywhere.
|
5
5
|
module Tilt
|
6
6
|
# Current version.
|
7
|
-
VERSION = '2.0.
|
7
|
+
VERSION = '2.0.5'
|
8
8
|
|
9
9
|
@default_mapping = Mapping.new
|
10
10
|
|
@@ -146,6 +146,7 @@ module Tilt
|
|
146
146
|
register_lazy :RDocTemplate, 'tilt/rdoc', 'rdoc'
|
147
147
|
register_lazy :RadiusTemplate, 'tilt/radius', 'radius'
|
148
148
|
register_lazy :RedClothTemplate, 'tilt/redcloth', 'textile'
|
149
|
+
register_lazy :RstPandocTemplate, 'tilt/rst-pandoc', 'rst'
|
149
150
|
register_lazy :SassTemplate, 'tilt/sass', 'sass'
|
150
151
|
register_lazy :ScssTemplate, 'tilt/sass', 'scss'
|
151
152
|
register_lazy :StringTemplate, 'tilt/string', 'str'
|
data/lib/tilt/mapping.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'monitor'
|
2
|
+
|
1
3
|
module Tilt
|
2
4
|
# Tilt::Mapping associates file extensions with template implementations.
|
3
5
|
#
|
@@ -214,9 +216,14 @@ module Tilt
|
|
214
216
|
@template_map[ext] || lazy_load(ext)
|
215
217
|
end
|
216
218
|
|
219
|
+
LOCK = Monitor.new
|
220
|
+
|
217
221
|
def lazy_load(pattern)
|
218
222
|
return unless @lazy_map.has_key?(pattern)
|
219
223
|
|
224
|
+
LOCK.enter
|
225
|
+
entered = true
|
226
|
+
|
220
227
|
choices = @lazy_map[pattern]
|
221
228
|
|
222
229
|
# Check if a template class is already present
|
@@ -234,12 +241,6 @@ module Tilt
|
|
234
241
|
choices.each do |class_name, file|
|
235
242
|
begin
|
236
243
|
require file
|
237
|
-
|
238
|
-
if Thread.list.size > 1
|
239
|
-
warn "WARN: tilt autoloading '#{file}' in a non thread-safe way; " +
|
240
|
-
"explicit require '#{file}' suggested."
|
241
|
-
end
|
242
|
-
|
243
244
|
# It's safe to eval() here because constant_defined? will
|
244
245
|
# raise NameError on invalid constant names
|
245
246
|
template_class = eval(class_name)
|
@@ -252,6 +253,8 @@ module Tilt
|
|
252
253
|
end
|
253
254
|
|
254
255
|
raise first_failure if first_failure
|
256
|
+
ensure
|
257
|
+
LOCK.exit if entered
|
255
258
|
end
|
256
259
|
|
257
260
|
# This is due to a bug in JRuby (see GH issue jruby/jruby#3585)
|
data/lib/tilt/pandoc.rb
CHANGED
@@ -5,45 +5,41 @@ module Tilt
|
|
5
5
|
# Pandoc markdown implementation. See:
|
6
6
|
# http://pandoc.org/
|
7
7
|
class PandocTemplate < Template
|
8
|
-
|
9
|
-
@output = PandocRuby.convert(data, options_hash, *options_array).strip
|
10
|
-
end
|
8
|
+
self.default_mime_type = 'text/html'
|
11
9
|
|
12
10
|
def tilt_to_pandoc_mapping
|
13
|
-
{ :smartypants =>
|
14
|
-
:escape_html =>
|
11
|
+
{ :smartypants => :smart,
|
12
|
+
:escape_html => { :f => 'markdown-raw_html' },
|
13
|
+
:commonmark => { :f => 'commonmark' },
|
14
|
+
:markdown_strict => { :f => 'markdown_strict' }
|
15
15
|
}
|
16
16
|
end
|
17
17
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
18
|
+
# turn options hash into an array
|
19
|
+
# Map tilt options to pandoc options
|
20
|
+
# Replace hash keys with value true with symbol for key
|
21
|
+
# Remove hash keys with value false
|
22
|
+
# Leave other hash keys untouched
|
23
|
+
def pandoc_options
|
24
|
+
options.reduce([]) do |sum, (k,v)|
|
25
|
+
case v
|
26
|
+
when true
|
27
|
+
sum << (tilt_to_pandoc_mapping[k] || k)
|
28
|
+
when false
|
29
|
+
sum
|
22
30
|
else
|
23
|
-
|
31
|
+
sum << { k => v }
|
24
32
|
end
|
25
|
-
|
26
|
-
hash
|
27
|
-
end.merge({:to => :html})
|
28
|
-
end
|
29
|
-
|
30
|
-
def options_array
|
31
|
-
pandoc_optimised_options.map do |option|
|
32
|
-
option[0] if option[1] === true
|
33
|
-
end.compact
|
33
|
+
end
|
34
34
|
end
|
35
35
|
|
36
|
-
def
|
37
|
-
|
38
|
-
|
39
|
-
# next if option[1] === false
|
40
|
-
hash[option[0]] = option[1] unless option[1] === true or option[1] === false
|
41
|
-
hash
|
42
|
-
end
|
36
|
+
def prepare
|
37
|
+
@engine = PandocRuby.new(data, *pandoc_options)
|
38
|
+
@output = nil
|
43
39
|
end
|
44
40
|
|
45
41
|
def evaluate(scope, locals, &block)
|
46
|
-
@output
|
42
|
+
@output ||= @engine.to_html.strip
|
47
43
|
end
|
48
44
|
|
49
45
|
def allows_script?
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'tilt/template'
|
2
|
+
require 'tilt/pandoc'
|
3
|
+
|
4
|
+
module Tilt
|
5
|
+
# Pandoc reStructuredText implementation. See:
|
6
|
+
# http://pandoc.org/
|
7
|
+
# Use PandocTemplate and specify input format
|
8
|
+
class RstPandocTemplate < PandocTemplate
|
9
|
+
def tilt_to_pandoc_mapping
|
10
|
+
{ :smartypants => :smart }
|
11
|
+
end
|
12
|
+
|
13
|
+
def pandoc_options
|
14
|
+
options.merge!(f: 'rst')
|
15
|
+
super
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/test/tilt_mapping_test.rb
CHANGED
@@ -125,20 +125,6 @@ module Tilt
|
|
125
125
|
end
|
126
126
|
end
|
127
127
|
end
|
128
|
-
|
129
|
-
test "warns when there's multiple threads" do
|
130
|
-
Thread.new do
|
131
|
-
req = proc do |file|
|
132
|
-
class ::MyTemplate; end
|
133
|
-
end
|
134
|
-
|
135
|
-
@mapping.stub :require, req do
|
136
|
-
assert_output '', /autoloading 'my_template'/ do
|
137
|
-
@mapping['hello.mt']
|
138
|
-
end
|
139
|
-
end
|
140
|
-
end.join
|
141
|
-
end
|
142
128
|
end
|
143
129
|
|
144
130
|
context "lazy with two template classes" do
|
data/test/tilt_markdown_test.rb
CHANGED
@@ -180,9 +180,6 @@ begin
|
|
180
180
|
class MarkdownPandocTest < Minitest::Test
|
181
181
|
include MarkdownTests
|
182
182
|
template Tilt::PandocTemplate
|
183
|
-
|
184
|
-
# Doesn't support escaping
|
185
|
-
undef test_escape_html_true
|
186
183
|
end
|
187
184
|
rescue LoadError => boom
|
188
185
|
# It should already be warned in the main tests
|
@@ -9,12 +9,12 @@ begin
|
|
9
9
|
class PandocTemplateTest < Minitest::Test
|
10
10
|
test "preparing and evaluating templates on #render" do
|
11
11
|
template = Tilt::PandocTemplate.new { |t| "# Hello World!" }
|
12
|
-
assert_equal "<h1 id=\"hello-world\">Hello World!</h1>", template.render
|
12
|
+
assert_equal "<h1 id=\"hello-world\">Hello World!</h1>", template.render
|
13
13
|
end
|
14
14
|
|
15
15
|
test "can be rendered more than once" do
|
16
16
|
template = Tilt::PandocTemplate.new { |t| "# Hello World!" }
|
17
|
-
3.times { assert_equal "<h1 id=\"hello-world\">Hello World!</h1>", template.render
|
17
|
+
3.times { assert_equal "<h1 id=\"hello-world\">Hello World!</h1>", template.render }
|
18
18
|
end
|
19
19
|
|
20
20
|
test "smartypants when :smartypants is set" do
|
@@ -29,12 +29,23 @@ begin
|
|
29
29
|
|
30
30
|
# Pandoc has tons of additional markdown features (see http://pandoc.org/README.html#pandocs-markdown).
|
31
31
|
# The test for footnotes should be seen as a general representation for all of them.
|
32
|
-
|
33
|
-
template = Tilt::PandocTemplate.new { |t| "Here is an inline note.^[Inlines notes are cool!]" }
|
34
|
-
assert_equal "<p>Here is an inline note.<a href=\"#fn1\" class=\"footnoteRef\" id=\"fnref1\"><sup>1</sup></a></p>\n<div class=\"footnotes\">\n<hr />\n<ol>\n<li id=\"fn1\"><p>Inlines notes are cool!<a href=\"#fnref1\">↩</a></p></li>\n</ol>\n</div>", template.render.strip
|
35
|
-
end
|
36
|
-
|
32
|
+
# use markdown_strict => true to disable additional markdown features
|
37
33
|
describe "passing in Pandoc options" do
|
34
|
+
test "generates footnotes" do
|
35
|
+
template = Tilt::PandocTemplate.new { |t| "Here is an inline note.^[Inlines notes are cool!]" }
|
36
|
+
assert_equal "<p>Here is an inline note.<a href=\"#fn1\" class=\"footnoteRef\" id=\"fnref1\"><sup>1</sup></a></p>\n<div class=\"footnotes\">\n<hr />\n<ol>\n<li id=\"fn1\"><p>Inlines notes are cool!<a href=\"#fnref1\">↩</a></p></li>\n</ol>\n</div>", template.render
|
37
|
+
end
|
38
|
+
|
39
|
+
test "doesn't generate footnotes with markdown_strict option" do
|
40
|
+
template = Tilt::PandocTemplate.new(:markdown_strict => true) { |t| "Here is an inline note.^[Inlines notes are cool!]" }
|
41
|
+
assert_equal "<p>Here is an inline note.^[Inlines notes are cool!]</p>", template.render
|
42
|
+
end
|
43
|
+
|
44
|
+
test "doesn't generate footnotes with commonmark option" do
|
45
|
+
template = Tilt::PandocTemplate.new(:commonmark => true) { |t| "Here is an inline note.^[Inlines notes are cool!]" }
|
46
|
+
assert_equal "<p>Here is an inline note.^[Inlines notes are cool!]</p>", template.render
|
47
|
+
end
|
48
|
+
|
38
49
|
test "accepts arguments with values (e.g. :id_prefix => 'xyz')" do
|
39
50
|
# Table of contents isn't on by default
|
40
51
|
template = Tilt::PandocTemplate.new { |t| "# This is a heading" }
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'tilt'
|
3
|
+
|
4
|
+
begin
|
5
|
+
require 'tilt/rst-pandoc'
|
6
|
+
|
7
|
+
class RstPandocTemplateTest < Minitest::Test
|
8
|
+
test "is registered for '.rst' files" do
|
9
|
+
assert_equal Tilt::RstPandocTemplate, Tilt['test.rst']
|
10
|
+
end
|
11
|
+
|
12
|
+
test "compiles and evaluates the template on #render" do
|
13
|
+
template = Tilt::RstPandocTemplate.new { |t| "Hello World!\n============" }
|
14
|
+
assert_equal "<h1 id=\"hello-world\">Hello World!</h1>", template.render
|
15
|
+
end
|
16
|
+
|
17
|
+
test "can be rendered more than once" do
|
18
|
+
template = Tilt::RstPandocTemplate.new { |t| "Hello World!\n============" }
|
19
|
+
3.times do
|
20
|
+
assert_equal "<h1 id=\"hello-world\">Hello World!</h1>", template.render
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
test "doens't use markdown options" do
|
25
|
+
template = Tilt::RstPandocTemplate.new(:escape_html => true) { |t| "HELLO <blink>WORLD</blink>" }
|
26
|
+
err = assert_raises(RuntimeError) { template.render }
|
27
|
+
assert_match /pandoc: unrecognized option `--escape-html/, err.message
|
28
|
+
end
|
29
|
+
end
|
30
|
+
rescue LoadError => boom
|
31
|
+
warn "Tilt::RstPandocTemplate (disabled) [#{boom}]"
|
32
|
+
end
|
data/tilt.gemspec
CHANGED
@@ -3,8 +3,8 @@ Gem::Specification.new do |s|
|
|
3
3
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
4
4
|
|
5
5
|
s.name = 'tilt'
|
6
|
-
s.version = '2.0.
|
7
|
-
s.date = '2016-
|
6
|
+
s.version = '2.0.5'
|
7
|
+
s.date = '2016-06-02'
|
8
8
|
|
9
9
|
s.description = "Generic interface to multiple Ruby template engines"
|
10
10
|
s.summary = s.description
|
@@ -53,6 +53,7 @@ Gem::Specification.new do |s|
|
|
53
53
|
lib/tilt/rdoc.rb
|
54
54
|
lib/tilt/redcarpet.rb
|
55
55
|
lib/tilt/redcloth.rb
|
56
|
+
lib/tilt/rst-pandoc.rb
|
56
57
|
lib/tilt/sass.rb
|
57
58
|
lib/tilt/string.rb
|
58
59
|
lib/tilt/template.rb
|
@@ -101,6 +102,7 @@ Gem::Specification.new do |s|
|
|
101
102
|
test/tilt_rdoctemplate_test.rb
|
102
103
|
test/tilt_redcarpettemplate_test.rb
|
103
104
|
test/tilt_redclothtemplate_test.rb
|
105
|
+
test/tilt_rstpandoctemplate_test.rb
|
104
106
|
test/tilt_sasstemplate_test.rb
|
105
107
|
test/tilt_stringtemplate_test.rb
|
106
108
|
test/tilt_template_test.rb
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tilt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Tomayko
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-06-02 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Generic interface to multiple Ruby template engines
|
14
14
|
email: r@tomayko.com
|
@@ -55,6 +55,7 @@ files:
|
|
55
55
|
- lib/tilt/rdoc.rb
|
56
56
|
- lib/tilt/redcarpet.rb
|
57
57
|
- lib/tilt/redcloth.rb
|
58
|
+
- lib/tilt/rst-pandoc.rb
|
58
59
|
- lib/tilt/sass.rb
|
59
60
|
- lib/tilt/string.rb
|
60
61
|
- lib/tilt/template.rb
|
@@ -103,6 +104,7 @@ files:
|
|
103
104
|
- test/tilt_rdoctemplate_test.rb
|
104
105
|
- test/tilt_redcarpettemplate_test.rb
|
105
106
|
- test/tilt_redclothtemplate_test.rb
|
107
|
+
- test/tilt_rstpandoctemplate_test.rb
|
106
108
|
- test/tilt_sasstemplate_test.rb
|
107
109
|
- test/tilt_stringtemplate_test.rb
|
108
110
|
- test/tilt_template_test.rb
|
@@ -137,7 +139,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
137
139
|
version: '0'
|
138
140
|
requirements: []
|
139
141
|
rubyforge_project:
|
140
|
-
rubygems_version: 2.
|
142
|
+
rubygems_version: 2.5.1
|
141
143
|
signing_key:
|
142
144
|
specification_version: 2
|
143
145
|
summary: Generic interface to multiple Ruby template engines
|
@@ -171,6 +173,7 @@ test_files:
|
|
171
173
|
- test/tilt_rdoctemplate_test.rb
|
172
174
|
- test/tilt_redcarpettemplate_test.rb
|
173
175
|
- test/tilt_redclothtemplate_test.rb
|
176
|
+
- test/tilt_rstpandoctemplate_test.rb
|
174
177
|
- test/tilt_sasstemplate_test.rb
|
175
178
|
- test/tilt_stringtemplate_test.rb
|
176
179
|
- test/tilt_template_test.rb
|