tilt 2.0.0 → 2.4.0
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 +5 -5
- data/COPYING +2 -1
- data/bin/tilt +2 -110
- data/lib/tilt/_emacs_org.rb +2 -0
- data/lib/tilt/_handlebars.rb +2 -0
- data/lib/tilt/_jbuilder.rb +2 -0
- data/lib/tilt/_org.rb +2 -0
- data/lib/tilt/asciidoc.rb +11 -23
- data/lib/tilt/babel.rb +8 -0
- data/lib/tilt/builder.rb +23 -14
- data/lib/tilt/cli.rb +134 -0
- data/lib/tilt/coffee.rb +17 -25
- data/lib/tilt/commonmarker.rb +95 -0
- data/lib/tilt/creole.rb +9 -20
- data/lib/tilt/csv.rb +9 -21
- data/lib/tilt/erb.rb +27 -19
- data/lib/tilt/erubi.rb +55 -0
- data/lib/tilt/erubis.rb +20 -12
- data/lib/tilt/etanni.rb +5 -4
- data/lib/tilt/haml.rb +79 -42
- data/lib/tilt/kramdown.rb +8 -28
- data/lib/tilt/liquid.rb +11 -9
- data/lib/tilt/livescript.rb +11 -0
- data/lib/tilt/mapping.rb +242 -95
- data/lib/tilt/markaby.rb +5 -7
- data/lib/tilt/maruku.rb +6 -18
- data/lib/tilt/nokogiri.rb +11 -10
- data/lib/tilt/pandoc.rb +39 -0
- data/lib/tilt/pipeline.rb +19 -0
- data/lib/tilt/plain.rb +4 -19
- data/lib/tilt/prawn.rb +28 -0
- data/lib/tilt/radius.rb +15 -22
- data/lib/tilt/rdiscount.rb +17 -33
- data/lib/tilt/rdoc.rb +14 -35
- data/lib/tilt/redcarpet.rb +20 -93
- data/lib/tilt/redcloth.rb +9 -19
- data/lib/tilt/rst-pandoc.rb +10 -0
- data/lib/tilt/sass.rb +59 -22
- data/lib/tilt/slim.rb +5 -0
- data/lib/tilt/string.rb +9 -3
- data/lib/tilt/template.rb +246 -78
- data/lib/tilt/typescript.rb +19 -0
- data/lib/tilt/wikicloth.rb +8 -18
- data/lib/tilt/yajl.rb +5 -11
- data/lib/tilt.rb +91 -41
- metadata +39 -102
- data/CHANGELOG.md +0 -61
- data/Gemfile +0 -39
- data/HACKING +0 -16
- data/README.md +0 -206
- data/Rakefile +0 -95
- data/docs/TEMPLATES.md +0 -523
- data/docs/common.css +0 -14
- data/lib/tilt/bluecloth.rb +0 -24
- data/lib/tilt/less.rb +0 -38
- 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/test_helper.rb +0 -64
- data/test/tilt_asciidoctor_test.rb +0 -44
- data/test/tilt_blueclothtemplate_test.rb +0 -33
- data/test/tilt_buildertemplate_test.rb +0 -59
- data/test/tilt_cache_test.rb +0 -32
- data/test/tilt_coffeescripttemplate_test.rb +0 -104
- data/test/tilt_compilesite_test.rb +0 -51
- data/test/tilt_creoletemplate_test.rb +0 -24
- data/test/tilt_csv_test.rb +0 -65
- data/test/tilt_erbtemplate_test.rb +0 -239
- data/test/tilt_erubistemplate_test.rb +0 -151
- data/test/tilt_etannitemplate_test.rb +0 -174
- data/test/tilt_hamltemplate_test.rb +0 -144
- data/test/tilt_kramdown_test.rb +0 -20
- 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_mapping_test.rb +0 -229
- data/test/tilt_markaby_test.rb +0 -88
- data/test/tilt_markdown_test.rb +0 -174
- data/test/tilt_marukutemplate_test.rb +0 -36
- data/test/tilt_metadata_test.rb +0 -42
- data/test/tilt_nokogiritemplate_test.rb +0 -87
- data/test/tilt_radiustemplate_test.rb +0 -75
- data/test/tilt_rdiscounttemplate_test.rb +0 -43
- data/test/tilt_rdoctemplate_test.rb +0 -29
- data/test/tilt_redcarpettemplate_test.rb +0 -59
- data/test/tilt_redclothtemplate_test.rb +0 -36
- data/test/tilt_sasstemplate_test.rb +0 -41
- data/test/tilt_stringtemplate_test.rb +0 -171
- data/test/tilt_template_test.rb +0 -316
- data/test/tilt_test.rb +0 -60
- data/test/tilt_wikiclothtemplate_test.rb +0 -32
- data/test/tilt_yajltemplate_test.rb +0 -101
- data/tilt.gemspec +0 -107
data/lib/tilt/radius.rb
CHANGED
@@ -1,44 +1,37 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require_relative 'template'
|
2
3
|
require 'radius'
|
3
4
|
|
4
5
|
module Tilt
|
5
6
|
# Radius Template
|
6
7
|
# http://github.com/jlong/radius/
|
7
8
|
class RadiusTemplate < Template
|
8
|
-
|
9
|
-
|
10
|
-
attr_accessor :tilt_scope
|
9
|
+
class ContextClass < Radius::Context
|
10
|
+
attr_accessor :tilt_scope
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
end
|
15
|
-
|
16
|
-
def dup
|
17
|
-
i = super
|
18
|
-
i.tilt_scope = tilt_scope
|
19
|
-
i
|
20
|
-
end
|
12
|
+
def tag_missing(name, attributes)
|
13
|
+
tilt_scope.__send__(name)
|
21
14
|
end
|
22
|
-
end
|
23
15
|
|
24
|
-
|
16
|
+
def dup
|
17
|
+
i = super
|
18
|
+
i.tilt_scope = tilt_scope
|
19
|
+
i
|
20
|
+
end
|
25
21
|
end
|
26
22
|
|
27
23
|
def evaluate(scope, locals, &block)
|
28
|
-
context =
|
24
|
+
context = ContextClass.new
|
29
25
|
context.tilt_scope = scope
|
30
|
-
context.define_tag("yield")
|
31
|
-
block.call
|
32
|
-
end
|
26
|
+
context.define_tag("yield", &block) if block
|
33
27
|
locals.each do |tag, value|
|
34
28
|
context.define_tag(tag) do
|
35
29
|
value
|
36
30
|
end
|
37
31
|
end
|
38
32
|
|
39
|
-
options
|
40
|
-
|
41
|
-
parser.parse(data)
|
33
|
+
@options[:tag_prefix] = 'r' unless @options.has_key?(:tag_prefix)
|
34
|
+
Radius::Parser.new(context, @options).parse(@data)
|
42
35
|
end
|
43
36
|
|
44
37
|
def allows_script?
|
data/lib/tilt/rdiscount.rb
CHANGED
@@ -1,39 +1,23 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require_relative 'template'
|
2
3
|
require 'rdiscount'
|
3
4
|
|
4
|
-
|
5
|
-
|
6
|
-
|
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'
|
5
|
+
aliases = {
|
6
|
+
:escape_html => :filter_html,
|
7
|
+
:smartypants => :smart
|
8
|
+
}.freeze
|
13
9
|
|
14
|
-
|
15
|
-
:escape_html => :filter_html,
|
16
|
-
:smartypants => :smart
|
17
|
-
}
|
10
|
+
_flags = [:smart, :filter_html, :smartypants, :escape_html].freeze
|
18
11
|
|
19
|
-
|
12
|
+
# Discount Markdown implementation. See:
|
13
|
+
# http://github.com/rtomayko/rdiscount
|
14
|
+
#
|
15
|
+
# RDiscount is a simple text filter. It does not support +scope+ or
|
16
|
+
# +locals+. The +:smart+ and +:filter_html+ options may be set true
|
17
|
+
# to enable those flags on the underlying RDiscount object.
|
18
|
+
Tilt::RDiscountTemplate = Tilt::StaticTemplate.subclass do
|
19
|
+
flags = _flags.select { |flag| @options[flag] }.
|
20
|
+
map! { |flag| aliases[flag] || flag }
|
20
21
|
|
21
|
-
|
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
|
22
|
+
RDiscount.new(@data, *flags).to_html
|
38
23
|
end
|
39
|
-
|
data/lib/tilt/rdoc.rb
CHANGED
@@ -1,40 +1,19 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require_relative 'template'
|
2
3
|
require 'rdoc'
|
3
4
|
require 'rdoc/markup'
|
4
5
|
require 'rdoc/markup/to_html'
|
6
|
+
require 'rdoc/options'
|
5
7
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
begin
|
18
|
-
# RDoc 4.0
|
19
|
-
require 'rdoc/options'
|
20
|
-
RDoc::Markup::ToHtml.new(RDoc::Options.new, nil)
|
21
|
-
rescue ArgumentError
|
22
|
-
# RDoc < 4.0
|
23
|
-
RDoc::Markup::ToHtml.new
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
def prepare
|
28
|
-
@engine = markup.convert(data)
|
29
|
-
@output = nil
|
30
|
-
end
|
31
|
-
|
32
|
-
def evaluate(scope, locals, &block)
|
33
|
-
@output ||= @engine.to_s
|
34
|
-
end
|
35
|
-
|
36
|
-
def allows_script?
|
37
|
-
false
|
38
|
-
end
|
39
|
-
end
|
8
|
+
# RDoc template. See: https://github.com/ruby/rdoc
|
9
|
+
#
|
10
|
+
# It's suggested that your program run the following at load time when
|
11
|
+
# using this templae engine in a threaded environment:
|
12
|
+
#
|
13
|
+
# require 'rdoc'
|
14
|
+
# require 'rdoc/markup'
|
15
|
+
# require 'rdoc/markup/to_html'
|
16
|
+
# require 'rdoc/options'
|
17
|
+
Tilt::RDocTemplate = Tilt::StaticTemplate.subclass do
|
18
|
+
RDoc::Markup::ToHtml.new(RDoc::Options.new, nil).convert(@data).to_s
|
40
19
|
end
|
data/lib/tilt/redcarpet.rb
CHANGED
@@ -1,104 +1,31 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require_relative 'template'
|
2
3
|
require 'redcarpet'
|
3
4
|
|
4
|
-
|
5
|
-
# Compatibility mode for Redcarpet 1.x
|
6
|
-
class Redcarpet1Template < Template
|
7
|
-
self.default_mime_type = 'text/html'
|
5
|
+
aliases = {:escape_html => :filter_html, :smartypants => :smart}.freeze
|
8
6
|
|
9
|
-
|
10
|
-
|
11
|
-
|
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 self.engine_initialized?
|
39
|
-
defined? ::Redcarpet::Render and defined? ::Redcarpet::Markdown
|
40
|
-
end
|
41
|
-
|
42
|
-
def generate_renderer
|
43
|
-
renderer = options.delete(:renderer) || ::Redcarpet::Render::HTML
|
44
|
-
return renderer unless options.delete(:smartypants)
|
45
|
-
return renderer if renderer.is_a?(Class) && renderer <= ::Redcarpet::Render::SmartyPants
|
46
|
-
|
47
|
-
if renderer == ::Redcarpet::Render::XHTML
|
48
|
-
::Redcarpet::Render::SmartyHTML.new(:xhtml => true)
|
49
|
-
elsif renderer == ::Redcarpet::Render::HTML
|
50
|
-
::Redcarpet::Render::SmartyHTML
|
51
|
-
elsif renderer.is_a? Class
|
52
|
-
Class.new(renderer) { include ::Redcarpet::Render::SmartyPants }
|
53
|
-
else
|
54
|
-
renderer.extend ::Redcarpet::Render::SmartyPants
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
def prepare
|
59
|
-
# try to support the same aliases
|
60
|
-
Redcarpet1Template::ALIAS.each do |opt, aka|
|
61
|
-
next if options.key? opt or not options.key? aka
|
62
|
-
options[opt] = options.delete(aka)
|
63
|
-
end
|
64
|
-
|
65
|
-
# only raise an exception if someone is trying to enable :escape_html
|
66
|
-
options.delete(:escape_html) unless options[:escape_html]
|
67
|
-
|
68
|
-
@engine = ::Redcarpet::Markdown.new(generate_renderer, options)
|
69
|
-
@output = nil
|
70
|
-
end
|
71
|
-
|
72
|
-
def evaluate(scope, locals, &block)
|
73
|
-
@output ||= @engine.render(data)
|
74
|
-
end
|
75
|
-
|
76
|
-
def allows_script?
|
77
|
-
false
|
7
|
+
Tilt::RedcarpetTemplate = Tilt::StaticTemplate.subclass do
|
8
|
+
aliases.each do |opt, aka|
|
9
|
+
if options.key?(aka) || !@options.key?(opt)
|
10
|
+
@options[opt] = @options.delete(aka)
|
78
11
|
end
|
79
12
|
end
|
80
13
|
|
81
|
-
#
|
82
|
-
|
83
|
-
#
|
84
|
-
# Supports both Redcarpet 1.x and 2.x
|
85
|
-
class RedcarpetTemplate < Template
|
86
|
-
Redcarpet1 = Redcarpet1Template
|
87
|
-
Redcarpet2 = Redcarpet2Template
|
88
|
-
|
89
|
-
def prepare
|
90
|
-
klass = Redcarpet2.engine_initialized? ? Redcarpet2 : Redcarpet1
|
91
|
-
@engine = klass.new(file, line, options) { data }
|
92
|
-
end
|
14
|
+
# only raise an exception if someone is trying to enable :escape_html
|
15
|
+
@options.delete(:escape_html) unless @options[:escape_html]
|
93
16
|
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
17
|
+
renderer = @options.delete(:renderer) || ::Redcarpet::Render::HTML.new(@options)
|
18
|
+
if options.delete(:smartypants) && !(renderer.is_a?(Class) && renderer <= ::Redcarpet::Render::SmartyPants)
|
19
|
+
renderer = if renderer == ::Redcarpet::Render::XHTML
|
20
|
+
::Redcarpet::Render::SmartyHTML.new(:xhtml => true)
|
21
|
+
elsif renderer == ::Redcarpet::Render::HTML
|
22
|
+
::Redcarpet::Render::SmartyHTML
|
23
|
+
elsif renderer.is_a? Class
|
24
|
+
Class.new(renderer) { include ::Redcarpet::Render::SmartyPants }
|
25
|
+
else
|
26
|
+
renderer.extend ::Redcarpet::Render::SmartyPants
|
100
27
|
end
|
101
28
|
end
|
102
29
|
|
30
|
+
Redcarpet::Markdown.new(renderer, @options).render(@data)
|
103
31
|
end
|
104
|
-
|
data/lib/tilt/redcloth.rb
CHANGED
@@ -1,23 +1,13 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require_relative 'template'
|
2
3
|
require 'redcloth'
|
3
4
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
options.each {|k, v| @engine.send("#{k}=", v) if @engine.respond_to? "#{k}="}
|
11
|
-
@output = nil
|
12
|
-
end
|
13
|
-
|
14
|
-
def evaluate(scope, locals, &block)
|
15
|
-
@output ||= @engine.to_html
|
16
|
-
end
|
17
|
-
|
18
|
-
def allows_script?
|
19
|
-
false
|
20
|
-
end
|
5
|
+
# RedCloth implementation. See: https://github.com/jgarber/redcloth
|
6
|
+
Tilt::RedClothTemplate = Tilt::StaticTemplate.subclass do
|
7
|
+
engine = RedCloth.new(@data)
|
8
|
+
@options.each do |k, v|
|
9
|
+
m = :"#{k}="
|
10
|
+
engine.send(m, v) if engine.respond_to? m
|
21
11
|
end
|
12
|
+
engine.to_html
|
22
13
|
end
|
23
|
-
|
@@ -0,0 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require_relative 'template'
|
3
|
+
require_relative 'pandoc'
|
4
|
+
|
5
|
+
rst = {:f => "rst"}.freeze
|
6
|
+
|
7
|
+
# Pandoc reStructuredText implementation. See: # http://pandoc.org/
|
8
|
+
Tilt::RstPandocTemplate = Tilt::StaticTemplate.subclass do
|
9
|
+
PandocRuby.new(@data, rst).to_html.strip
|
10
|
+
end
|
data/lib/tilt/sass.rb
CHANGED
@@ -1,41 +1,78 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require_relative 'template'
|
3
3
|
|
4
4
|
module Tilt
|
5
|
-
# Sass template implementation. See:
|
6
|
-
# http://haml.hamptoncatlin.com/
|
5
|
+
# Sass template implementation for generating CSS. See: https://sass-lang.com/
|
7
6
|
#
|
8
7
|
# Sass templates do not support object scopes, locals, or yield.
|
9
|
-
class SassTemplate <
|
8
|
+
class SassTemplate < StaticTemplate
|
10
9
|
self.default_mime_type = 'text/css'
|
11
10
|
|
12
|
-
|
13
|
-
|
14
|
-
|
11
|
+
begin
|
12
|
+
require 'sass-embedded'
|
13
|
+
# :nocov:
|
14
|
+
require 'uri'
|
15
15
|
|
16
|
-
|
17
|
-
|
18
|
-
|
16
|
+
ALLOWED_KEYS = (defined?(::Sass::Compiler) ? ::Sass::Compiler : ::Sass::Embedded).
|
17
|
+
instance_method(:compile_string).
|
18
|
+
parameters.
|
19
|
+
map{|k, v| v if k == :key}.
|
20
|
+
compact rescue nil
|
21
|
+
private_constant :ALLOWED_KEYS
|
19
22
|
|
20
|
-
|
21
|
-
false
|
22
|
-
end
|
23
|
+
private
|
23
24
|
|
24
|
-
|
25
|
-
|
26
|
-
|
25
|
+
def _prepare_output
|
26
|
+
::Sass.compile_string(@data, **sass_options).css
|
27
|
+
end
|
28
|
+
|
29
|
+
def sass_options
|
30
|
+
path = File.absolute_path(eval_file)
|
31
|
+
path = '/' + path unless path.start_with?('/')
|
32
|
+
opts = @options.dup
|
33
|
+
opts[:url] = ::URI::File.build([nil, ::URI::DEFAULT_PARSER.escape(path)]).to_s
|
34
|
+
opts[:syntax] = :indented
|
35
|
+
opts.delete_if{|k| !ALLOWED_KEYS.include?(k)} if ALLOWED_KEYS
|
36
|
+
opts
|
37
|
+
end
|
38
|
+
rescue LoadError => err
|
39
|
+
begin
|
40
|
+
require 'sassc'
|
41
|
+
Engine = ::SassC::Engine
|
42
|
+
rescue LoadError
|
43
|
+
begin
|
44
|
+
require 'sass'
|
45
|
+
Engine = ::Sass::Engine
|
46
|
+
rescue LoadError
|
47
|
+
raise err
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
def _prepare_output
|
54
|
+
Engine.new(@data, sass_options).render
|
55
|
+
end
|
56
|
+
|
57
|
+
def sass_options
|
58
|
+
@options[:filename] = eval_file
|
59
|
+
@options[:line] = @line
|
60
|
+
@options[:syntax] = :sass
|
61
|
+
@options
|
62
|
+
end
|
63
|
+
# :nocov:
|
27
64
|
end
|
28
65
|
end
|
29
66
|
|
30
|
-
# Sass's new .scss type template implementation.
|
31
67
|
class ScssTemplate < SassTemplate
|
32
68
|
self.default_mime_type = 'text/css'
|
33
69
|
|
34
|
-
|
70
|
+
private
|
71
|
+
|
35
72
|
def sass_options
|
36
|
-
|
73
|
+
opts = super
|
74
|
+
opts[:syntax] = :scss
|
75
|
+
opts
|
37
76
|
end
|
38
77
|
end
|
39
|
-
|
40
78
|
end
|
41
|
-
|
data/lib/tilt/slim.rb
ADDED
data/lib/tilt/string.rb
CHANGED
@@ -1,12 +1,14 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require_relative 'template'
|
2
3
|
|
3
4
|
module Tilt
|
4
5
|
# The template source is evaluated as a Ruby string. The #{} interpolation
|
5
6
|
# syntax can be used to generated dynamic output.
|
6
7
|
class StringTemplate < Template
|
7
8
|
def prepare
|
8
|
-
hash = "TILT#{data.hash.abs}"
|
9
|
-
@
|
9
|
+
hash = "TILT#{@data.hash.abs}"
|
10
|
+
@freeze_string_literals = !!@options[:freeze]
|
11
|
+
@code = String.new("<<#{hash}.chomp\n#{@data}\n#{hash}")
|
10
12
|
end
|
11
13
|
|
12
14
|
def precompiled_template(locals)
|
@@ -17,5 +19,9 @@ module Tilt
|
|
17
19
|
source, offset = super
|
18
20
|
[source, offset + 1]
|
19
21
|
end
|
22
|
+
|
23
|
+
def freeze_string_literals?
|
24
|
+
@freeze_string_literals
|
25
|
+
end
|
20
26
|
end
|
21
27
|
end
|