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.
Files changed (91) hide show
  1. checksums.yaml +7 -0
  2. data/COPYING +1 -1
  3. data/bin/tilt +18 -8
  4. data/lib/tilt/asciidoc.rb +1 -8
  5. data/lib/tilt/babel.rb +16 -0
  6. data/lib/tilt/bluecloth.rb +24 -0
  7. data/lib/tilt/builder.rb +12 -15
  8. data/lib/tilt/coffee.rb +10 -6
  9. data/lib/tilt/commonmarker.rb +88 -0
  10. data/lib/tilt/creole.rb +25 -0
  11. data/lib/tilt/csv.rb +12 -18
  12. data/lib/tilt/dummy.rb +3 -0
  13. data/lib/tilt/erb.rb +9 -56
  14. data/lib/tilt/erubi.rb +32 -0
  15. data/lib/tilt/erubis.rb +43 -0
  16. data/lib/tilt/haml.rb +66 -44
  17. data/lib/tilt/kramdown.rb +25 -0
  18. data/lib/tilt/less.rb +30 -0
  19. data/lib/tilt/liquid.rb +9 -10
  20. data/lib/tilt/livescript.rb +23 -0
  21. data/lib/tilt/mapping.rb +293 -0
  22. data/lib/tilt/markaby.rb +1 -8
  23. data/lib/tilt/maruku.rb +22 -0
  24. data/lib/tilt/nokogiri.rb +1 -8
  25. data/lib/tilt/pandoc.rb +57 -0
  26. data/lib/tilt/plain.rb +0 -4
  27. data/lib/tilt/prawn.rb +43 -0
  28. data/lib/tilt/radius.rb +1 -8
  29. data/lib/tilt/rdiscount.rb +39 -0
  30. data/lib/tilt/rdoc.rb +3 -10
  31. data/lib/tilt/redcarpet.rb +86 -0
  32. data/lib/tilt/{textile.rb → redcloth.rb} +1 -8
  33. data/lib/tilt/rst-pandoc.rb +23 -0
  34. data/lib/tilt/sass.rb +78 -0
  35. data/lib/tilt/sigil.rb +34 -0
  36. data/lib/tilt/string.rb +1 -1
  37. data/lib/tilt/template.rb +121 -105
  38. data/lib/tilt/typescript.rb +26 -0
  39. data/lib/tilt/wikicloth.rb +22 -0
  40. data/lib/tilt/yajl.rb +1 -8
  41. data/lib/tilt.rb +118 -155
  42. metadata +38 -469
  43. data/CHANGELOG.md +0 -44
  44. data/Gemfile +0 -32
  45. data/HACKING +0 -16
  46. data/README.md +0 -232
  47. data/Rakefile +0 -104
  48. data/TEMPLATES.md +0 -516
  49. data/lib/tilt/css.rb +0 -80
  50. data/lib/tilt/markdown.rb +0 -214
  51. data/lib/tilt/wiki.rb +0 -58
  52. data/test/contest.rb +0 -68
  53. data/test/markaby/locals.mab +0 -1
  54. data/test/markaby/markaby.mab +0 -1
  55. data/test/markaby/markaby_other_static.mab +0 -1
  56. data/test/markaby/render_twice.mab +0 -1
  57. data/test/markaby/scope.mab +0 -1
  58. data/test/markaby/yielding.mab +0 -2
  59. data/test/tilt_asciidoctor_test.rb +0 -44
  60. data/test/tilt_blueclothtemplate_test.rb +0 -45
  61. data/test/tilt_buildertemplate_test.rb +0 -59
  62. data/test/tilt_cache_test.rb +0 -32
  63. data/test/tilt_coffeescripttemplate_test.rb +0 -114
  64. data/test/tilt_compilesite_test.rb +0 -51
  65. data/test/tilt_creoletemplate_test.rb +0 -28
  66. data/test/tilt_csv_test.rb +0 -69
  67. data/test/tilt_erbtemplate_test.rb +0 -239
  68. data/test/tilt_erubistemplate_test.rb +0 -151
  69. data/test/tilt_etannitemplate_test.rb +0 -173
  70. data/test/tilt_fallback_test.rb +0 -122
  71. data/test/tilt_hamltemplate_test.rb +0 -144
  72. data/test/tilt_kramdown_test.rb +0 -42
  73. data/test/tilt_lesstemplate_test.less +0 -1
  74. data/test/tilt_lesstemplate_test.rb +0 -42
  75. data/test/tilt_liquidtemplate_test.rb +0 -78
  76. data/test/tilt_markaby_test.rb +0 -88
  77. data/test/tilt_markdown_test.rb +0 -172
  78. data/test/tilt_marukutemplate_test.rb +0 -48
  79. data/test/tilt_nokogiritemplate_test.rb +0 -87
  80. data/test/tilt_radiustemplate_test.rb +0 -75
  81. data/test/tilt_rdiscounttemplate_test.rb +0 -55
  82. data/test/tilt_rdoctemplate_test.rb +0 -31
  83. data/test/tilt_redcarpettemplate_test.rb +0 -71
  84. data/test/tilt_redclothtemplate_test.rb +0 -36
  85. data/test/tilt_sasstemplate_test.rb +0 -41
  86. data/test/tilt_stringtemplate_test.rb +0 -170
  87. data/test/tilt_template_test.rb +0 -323
  88. data/test/tilt_test.rb +0 -65
  89. data/test/tilt_wikiclothtemplate_test.rb +0 -32
  90. data/test/tilt_yajltemplate_test.rb +0 -101
  91. 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
@@ -6,7 +6,7 @@ module Tilt
6
6
  class StringTemplate < Template
7
7
  def prepare
8
8
  hash = "TILT#{data.hash.abs}"
9
- @code = "<<#{hash}.chomp\n#{data}\n#{hash}"
9
+ @code = String.new("<<#{hash}.chomp\n#{data}\n#{hash}")
10
10
  end
11
11
 
12
12
  def precompiled_template(locals)