tilt 1.4.1 → 2.0.11
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 +7 -0
- data/COPYING +1 -1
- data/bin/tilt +18 -8
- data/lib/tilt/asciidoc.rb +1 -8
- data/lib/tilt/babel.rb +16 -0
- data/lib/tilt/bluecloth.rb +24 -0
- data/lib/tilt/builder.rb +12 -15
- data/lib/tilt/coffee.rb +10 -6
- data/lib/tilt/commonmarker.rb +88 -0
- data/lib/tilt/creole.rb +25 -0
- data/lib/tilt/csv.rb +12 -18
- data/lib/tilt/dummy.rb +3 -0
- data/lib/tilt/erb.rb +9 -56
- data/lib/tilt/erubi.rb +32 -0
- data/lib/tilt/erubis.rb +43 -0
- data/lib/tilt/haml.rb +66 -44
- data/lib/tilt/kramdown.rb +25 -0
- data/lib/tilt/less.rb +30 -0
- data/lib/tilt/liquid.rb +9 -10
- data/lib/tilt/livescript.rb +23 -0
- data/lib/tilt/mapping.rb +293 -0
- data/lib/tilt/markaby.rb +1 -8
- data/lib/tilt/maruku.rb +22 -0
- data/lib/tilt/nokogiri.rb +1 -8
- data/lib/tilt/pandoc.rb +57 -0
- data/lib/tilt/plain.rb +0 -4
- data/lib/tilt/prawn.rb +43 -0
- data/lib/tilt/radius.rb +1 -8
- data/lib/tilt/rdiscount.rb +39 -0
- data/lib/tilt/rdoc.rb +3 -10
- data/lib/tilt/redcarpet.rb +86 -0
- data/lib/tilt/{textile.rb → redcloth.rb} +1 -8
- data/lib/tilt/rst-pandoc.rb +23 -0
- data/lib/tilt/sass.rb +78 -0
- data/lib/tilt/sigil.rb +34 -0
- data/lib/tilt/string.rb +1 -1
- data/lib/tilt/template.rb +121 -105
- data/lib/tilt/typescript.rb +26 -0
- data/lib/tilt/wikicloth.rb +22 -0
- data/lib/tilt/yajl.rb +1 -8
- data/lib/tilt.rb +118 -155
- metadata +38 -469
- data/CHANGELOG.md +0 -44
- data/Gemfile +0 -32
- data/HACKING +0 -16
- data/README.md +0 -232
- data/Rakefile +0 -104
- data/TEMPLATES.md +0 -516
- data/lib/tilt/css.rb +0 -80
- data/lib/tilt/markdown.rb +0 -214
- data/lib/tilt/wiki.rb +0 -58
- data/test/contest.rb +0 -68
- data/test/markaby/locals.mab +0 -1
- data/test/markaby/markaby.mab +0 -1
- data/test/markaby/markaby_other_static.mab +0 -1
- data/test/markaby/render_twice.mab +0 -1
- data/test/markaby/scope.mab +0 -1
- data/test/markaby/yielding.mab +0 -2
- data/test/tilt_asciidoctor_test.rb +0 -44
- data/test/tilt_blueclothtemplate_test.rb +0 -45
- data/test/tilt_buildertemplate_test.rb +0 -59
- data/test/tilt_cache_test.rb +0 -32
- data/test/tilt_coffeescripttemplate_test.rb +0 -114
- data/test/tilt_compilesite_test.rb +0 -51
- data/test/tilt_creoletemplate_test.rb +0 -28
- data/test/tilt_csv_test.rb +0 -69
- data/test/tilt_erbtemplate_test.rb +0 -239
- data/test/tilt_erubistemplate_test.rb +0 -151
- data/test/tilt_etannitemplate_test.rb +0 -173
- data/test/tilt_fallback_test.rb +0 -122
- data/test/tilt_hamltemplate_test.rb +0 -144
- data/test/tilt_kramdown_test.rb +0 -42
- data/test/tilt_lesstemplate_test.less +0 -1
- data/test/tilt_lesstemplate_test.rb +0 -42
- data/test/tilt_liquidtemplate_test.rb +0 -78
- data/test/tilt_markaby_test.rb +0 -88
- data/test/tilt_markdown_test.rb +0 -172
- data/test/tilt_marukutemplate_test.rb +0 -48
- data/test/tilt_nokogiritemplate_test.rb +0 -87
- data/test/tilt_radiustemplate_test.rb +0 -75
- data/test/tilt_rdiscounttemplate_test.rb +0 -55
- data/test/tilt_rdoctemplate_test.rb +0 -31
- data/test/tilt_redcarpettemplate_test.rb +0 -71
- data/test/tilt_redclothtemplate_test.rb +0 -36
- data/test/tilt_sasstemplate_test.rb +0 -41
- data/test/tilt_stringtemplate_test.rb +0 -170
- data/test/tilt_template_test.rb +0 -323
- data/test/tilt_test.rb +0 -65
- data/test/tilt_wikiclothtemplate_test.rb +0 -32
- data/test/tilt_yajltemplate_test.rb +0 -101
- data/tilt.gemspec +0 -120
data/lib/tilt/prawn.rb
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'tilt/template'
|
2
|
+
require 'prawn'
|
3
|
+
|
4
|
+
module Tilt
|
5
|
+
# Prawn template implementation. See: http://prawnpdf.org
|
6
|
+
#
|
7
|
+
class PrawnTemplate < Template
|
8
|
+
self.default_mime_type = 'application/pdf'
|
9
|
+
|
10
|
+
def prepare
|
11
|
+
@engine = ::Prawn::Document.new(prawn_options)
|
12
|
+
end
|
13
|
+
|
14
|
+
def evaluate(scope, locals, &block)
|
15
|
+
pdf = @engine
|
16
|
+
if data.respond_to?(:to_str)
|
17
|
+
locals[:pdf] = pdf
|
18
|
+
super(scope, locals, &block)
|
19
|
+
elsif data.kind_of?(Proc)
|
20
|
+
data.call(pdf)
|
21
|
+
end
|
22
|
+
@output ||= pdf.render
|
23
|
+
end
|
24
|
+
|
25
|
+
def allows_script?
|
26
|
+
false
|
27
|
+
end
|
28
|
+
|
29
|
+
def precompiled_template(locals)
|
30
|
+
data.to_str
|
31
|
+
end
|
32
|
+
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def prawn_options
|
37
|
+
# defaults to A4 instead of crazy US Letter format.
|
38
|
+
{ :page_size => "A4", :page_layout => :portrait }.merge(options)
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
data/lib/tilt/radius.rb
CHANGED
@@ -1,13 +1,10 @@
|
|
1
1
|
require 'tilt/template'
|
2
|
+
require 'radius'
|
2
3
|
|
3
4
|
module Tilt
|
4
5
|
# Radius Template
|
5
6
|
# http://github.com/jlong/radius/
|
6
7
|
class RadiusTemplate < Template
|
7
|
-
def self.engine_initialized?
|
8
|
-
defined? ::Radius
|
9
|
-
end
|
10
|
-
|
11
8
|
def self.context_class
|
12
9
|
@context_class ||= Class.new(Radius::Context) do
|
13
10
|
attr_accessor :tilt_scope
|
@@ -24,10 +21,6 @@ module Tilt
|
|
24
21
|
end
|
25
22
|
end
|
26
23
|
|
27
|
-
def initialize_engine
|
28
|
-
require_template_library 'radius'
|
29
|
-
end
|
30
|
-
|
31
24
|
def prepare
|
32
25
|
end
|
33
26
|
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'tilt/template'
|
2
|
+
require 'rdiscount'
|
3
|
+
|
4
|
+
module Tilt
|
5
|
+
# Discount Markdown implementation. See:
|
6
|
+
# http://github.com/rtomayko/rdiscount
|
7
|
+
#
|
8
|
+
# RDiscount is a simple text filter. It does not support +scope+ or
|
9
|
+
# +locals+. The +:smart+ and +:filter_html+ options may be set true
|
10
|
+
# to enable those flags on the underlying RDiscount object.
|
11
|
+
class RDiscountTemplate < Template
|
12
|
+
self.default_mime_type = 'text/html'
|
13
|
+
|
14
|
+
ALIAS = {
|
15
|
+
:escape_html => :filter_html,
|
16
|
+
:smartypants => :smart
|
17
|
+
}
|
18
|
+
|
19
|
+
FLAGS = [:smart, :filter_html, :smartypants, :escape_html]
|
20
|
+
|
21
|
+
def flags
|
22
|
+
FLAGS.select { |flag| options[flag] }.map { |flag| ALIAS[flag] || flag }
|
23
|
+
end
|
24
|
+
|
25
|
+
def prepare
|
26
|
+
@engine = RDiscount.new(data, *flags)
|
27
|
+
@output = nil
|
28
|
+
end
|
29
|
+
|
30
|
+
def evaluate(scope, locals, &block)
|
31
|
+
@output ||= @engine.to_html
|
32
|
+
end
|
33
|
+
|
34
|
+
def allows_script?
|
35
|
+
false
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
data/lib/tilt/rdoc.rb
CHANGED
@@ -1,4 +1,7 @@
|
|
1
1
|
require 'tilt/template'
|
2
|
+
require 'rdoc'
|
3
|
+
require 'rdoc/markup'
|
4
|
+
require 'rdoc/markup/to_html'
|
2
5
|
|
3
6
|
module Tilt
|
4
7
|
# RDoc template. See:
|
@@ -10,16 +13,6 @@ module Tilt
|
|
10
13
|
class RDocTemplate < Template
|
11
14
|
self.default_mime_type = 'text/html'
|
12
15
|
|
13
|
-
def self.engine_initialized?
|
14
|
-
defined? ::RDoc::Markup::ToHtml
|
15
|
-
end
|
16
|
-
|
17
|
-
def initialize_engine
|
18
|
-
require_template_library 'rdoc'
|
19
|
-
require_template_library 'rdoc/markup'
|
20
|
-
require_template_library 'rdoc/markup/to_html'
|
21
|
-
end
|
22
|
-
|
23
16
|
def markup
|
24
17
|
begin
|
25
18
|
# RDoc 4.0
|
@@ -0,0 +1,86 @@
|
|
1
|
+
require 'tilt/template'
|
2
|
+
require 'redcarpet'
|
3
|
+
|
4
|
+
module Tilt
|
5
|
+
# Compatibility mode for Redcarpet 1.x
|
6
|
+
class Redcarpet1Template < Template
|
7
|
+
self.default_mime_type = 'text/html'
|
8
|
+
|
9
|
+
ALIAS = {
|
10
|
+
:escape_html => :filter_html,
|
11
|
+
:smartypants => :smart
|
12
|
+
}
|
13
|
+
|
14
|
+
FLAGS = [:smart, :filter_html, :smartypants, :escape_html]
|
15
|
+
|
16
|
+
def flags
|
17
|
+
FLAGS.select { |flag| options[flag] }.map { |flag| ALIAS[flag] || flag }
|
18
|
+
end
|
19
|
+
|
20
|
+
def prepare
|
21
|
+
@engine = RedcarpetCompat.new(data, *flags)
|
22
|
+
@output = nil
|
23
|
+
end
|
24
|
+
|
25
|
+
def evaluate(scope, locals, &block)
|
26
|
+
@output ||= @engine.to_html
|
27
|
+
end
|
28
|
+
|
29
|
+
def allows_script?
|
30
|
+
false
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
# Future proof mode for Redcarpet 2.x (not yet released)
|
35
|
+
class Redcarpet2Template < Template
|
36
|
+
self.default_mime_type = 'text/html'
|
37
|
+
|
38
|
+
def generate_renderer
|
39
|
+
renderer = options.delete(:renderer) || ::Redcarpet::Render::HTML.new(options)
|
40
|
+
return renderer unless options.delete(:smartypants)
|
41
|
+
return renderer if renderer.is_a?(Class) && renderer <= ::Redcarpet::Render::SmartyPants
|
42
|
+
|
43
|
+
if renderer == ::Redcarpet::Render::XHTML
|
44
|
+
::Redcarpet::Render::SmartyHTML.new(:xhtml => true)
|
45
|
+
elsif renderer == ::Redcarpet::Render::HTML
|
46
|
+
::Redcarpet::Render::SmartyHTML
|
47
|
+
elsif renderer.is_a? Class
|
48
|
+
Class.new(renderer) { include ::Redcarpet::Render::SmartyPants }
|
49
|
+
else
|
50
|
+
renderer.extend ::Redcarpet::Render::SmartyPants
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def prepare
|
55
|
+
# try to support the same aliases
|
56
|
+
Redcarpet1Template::ALIAS.each do |opt, aka|
|
57
|
+
next if options.key? opt or not options.key? aka
|
58
|
+
options[opt] = options.delete(aka)
|
59
|
+
end
|
60
|
+
|
61
|
+
# only raise an exception if someone is trying to enable :escape_html
|
62
|
+
options.delete(:escape_html) unless options[:escape_html]
|
63
|
+
|
64
|
+
@engine = ::Redcarpet::Markdown.new(generate_renderer, options)
|
65
|
+
@output = nil
|
66
|
+
end
|
67
|
+
|
68
|
+
def evaluate(scope, locals, &block)
|
69
|
+
@output ||= @engine.render(data)
|
70
|
+
end
|
71
|
+
|
72
|
+
def allows_script?
|
73
|
+
false
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
if defined? ::Redcarpet::Render and defined? ::Redcarpet::Markdown
|
78
|
+
superclass = Redcarpet2Template
|
79
|
+
else
|
80
|
+
superclass = Redcarpet1Template
|
81
|
+
end
|
82
|
+
|
83
|
+
class RedcarpetTemplate < superclass
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
@@ -1,17 +1,10 @@
|
|
1
1
|
require 'tilt/template'
|
2
|
+
require 'redcloth'
|
2
3
|
|
3
4
|
module Tilt
|
4
5
|
# RedCloth implementation. See:
|
5
6
|
# http://redcloth.org/
|
6
7
|
class RedClothTemplate < Template
|
7
|
-
def self.engine_initialized?
|
8
|
-
defined? ::RedCloth
|
9
|
-
end
|
10
|
-
|
11
|
-
def initialize_engine
|
12
|
-
require_template_library 'redcloth'
|
13
|
-
end
|
14
|
-
|
15
8
|
def prepare
|
16
9
|
@engine = RedCloth.new(data)
|
17
10
|
options.each {|k, v| @engine.send("#{k}=", v) if @engine.respond_to? "#{k}="}
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'tilt/template'
|
2
|
+
require 'pandoc'
|
3
|
+
|
4
|
+
module Tilt
|
5
|
+
# Pandoc reStructuredText implementation. See:
|
6
|
+
# http://pandoc.org/
|
7
|
+
class RstPandocTemplate < PandocTemplate
|
8
|
+
self.default_mime_type = 'text/html'
|
9
|
+
|
10
|
+
def prepare
|
11
|
+
@engine = PandocRuby.new(data, :f => "rst")
|
12
|
+
@output = nil
|
13
|
+
end
|
14
|
+
|
15
|
+
def evaluate(scope, locals, &block)
|
16
|
+
@output ||= @engine.to_html.strip
|
17
|
+
end
|
18
|
+
|
19
|
+
def allows_script?
|
20
|
+
false
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/tilt/sass.rb
ADDED
@@ -0,0 +1,78 @@
|
|
1
|
+
require 'tilt/template'
|
2
|
+
|
3
|
+
module Tilt
|
4
|
+
# Sass template implementation. See:
|
5
|
+
# http://haml.hamptoncatlin.com/
|
6
|
+
#
|
7
|
+
# Sass templates do not support object scopes, locals, or yield.
|
8
|
+
class SassTemplate < Template
|
9
|
+
self.default_mime_type = 'text/css'
|
10
|
+
|
11
|
+
begin
|
12
|
+
require 'sass-embedded'
|
13
|
+
require 'uri'
|
14
|
+
Engine = nil
|
15
|
+
rescue LoadError => err
|
16
|
+
begin
|
17
|
+
require 'sassc'
|
18
|
+
Engine = ::SassC::Engine
|
19
|
+
rescue LoadError
|
20
|
+
begin
|
21
|
+
require 'sass'
|
22
|
+
Engine = ::Sass::Engine
|
23
|
+
rescue LoadError
|
24
|
+
raise err
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def prepare
|
30
|
+
@engine = unless Engine.nil?
|
31
|
+
Engine.new(data, sass_options)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def evaluate(scope, locals, &block)
|
36
|
+
@output ||= if @engine.nil?
|
37
|
+
::Sass.compile_string(data, **sass_embedded_options).css
|
38
|
+
else
|
39
|
+
@engine.render
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def allows_script?
|
44
|
+
false
|
45
|
+
end
|
46
|
+
|
47
|
+
private
|
48
|
+
def eval_file_url
|
49
|
+
path = File.absolute_path(eval_file)
|
50
|
+
path = '/' + path unless path.start_with?('/')
|
51
|
+
::URI::File.build([nil, ::URI::DEFAULT_PARSER.escape(path)]).to_s
|
52
|
+
end
|
53
|
+
|
54
|
+
def sass_embedded_options
|
55
|
+
options.merge(:url => eval_file_url, :syntax => :indented)
|
56
|
+
end
|
57
|
+
|
58
|
+
def sass_options
|
59
|
+
options.merge(:filename => eval_file, :line => line, :syntax => :sass)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
# Sass's new .scss type template implementation.
|
64
|
+
class ScssTemplate < SassTemplate
|
65
|
+
self.default_mime_type = 'text/css'
|
66
|
+
|
67
|
+
private
|
68
|
+
def sass_embedded_options
|
69
|
+
options.merge(:url => eval_file_url, :syntax => :scss)
|
70
|
+
end
|
71
|
+
|
72
|
+
def sass_options
|
73
|
+
options.merge(:filename => eval_file, :line => line, :syntax => :scss)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
78
|
+
|
data/lib/tilt/sigil.rb
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'open3'
|
2
|
+
require 'shellwords'
|
3
|
+
|
4
|
+
module Tilt
|
5
|
+
# Standalone string interpolator and template processor implementation in Go.
|
6
|
+
# see: https://github.com/gliderlabs/sigil
|
7
|
+
class SigilTemplate < Template
|
8
|
+
def prepare
|
9
|
+
end
|
10
|
+
|
11
|
+
def evaluate(scope, locals, &block)
|
12
|
+
variables = locals.map {|k, v| "#{k}=#{v}" }
|
13
|
+
|
14
|
+
cmd = ['sigil']
|
15
|
+
|
16
|
+
unless variables.empty?
|
17
|
+
cmd << '-p'
|
18
|
+
cmd.concat(variables)
|
19
|
+
end
|
20
|
+
|
21
|
+
out, err, status = Open3.capture3(*cmd, :stdin_data => data)
|
22
|
+
|
23
|
+
if status.success?
|
24
|
+
out.chomp
|
25
|
+
else
|
26
|
+
raise err.chomp.gsub('<stdin>', file)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def allows_script?
|
31
|
+
false
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/lib/tilt/string.rb
CHANGED