-
Notifications
You must be signed in to change notification settings - Fork 224
/
Copy pathtilt.rb
171 lines (148 loc) · 6.28 KB
/
tilt.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
require_relative 'tilt/mapping'
require_relative 'tilt/template'
# Namespace for Tilt. This module is not intended to be included anywhere.
module Tilt
# Current version.
VERSION = '2.1.0'
@default_mapping = Mapping.new
class << self
# @return [Tilt::Mapping] the main mapping object
attr_reader :default_mapping
end
# @private
def self.lazy_map
default_mapping.lazy_map
end
# @see Tilt::Mapping#register
def self.register(template_class, *extensions)
default_mapping.register(template_class, *extensions)
end
# @see Tilt::Mapping#register_lazy
def self.register_lazy(class_name, file, *extensions)
default_mapping.register_lazy(class_name, file, *extensions)
end
# @see Tilt::Mapping#register_pipeline
def self.register_pipeline(ext, options={})
default_mapping.register_pipeline(ext, options)
end
# @deprecated Use {register} instead.
def self.prefer(template_class, *extensions)
register(template_class, *extensions)
end
# @see Tilt::Mapping#registered?
def self.registered?(ext)
default_mapping.registered?(ext)
end
# @see Tilt::Mapping#new
def self.new(file, line=nil, options={}, &block)
default_mapping.new(file, line, options, &block)
end
# @see Tilt::Mapping#[]
def self.[](file)
default_mapping[file]
end
# @see Tilt::Mapping#template_for
def self.template_for(file)
default_mapping.template_for(file)
end
# @see Tilt::Mapping#templates_for
def self.templates_for(file)
default_mapping.templates_for(file)
end
# @return the template object that is currently rendering.
#
# @example
# tmpl = Tilt['index.erb'].new { '<%= Tilt.current_template %>' }
# tmpl.render == tmpl.to_s
#
# @note This is currently an experimental feature and might return nil
# in the future.
def self.current_template
Thread.current[:tilt_current_template]
end
# Extremely simple template cache implementation. Calling applications
# create a Tilt::Cache instance and use #fetch with any set of hashable
# arguments (such as those to Tilt.new):
#
# cache = Tilt::Cache.new
# cache.fetch(path, line, options) { Tilt.new(path, line, options) }
#
# Subsequent invocations return the already loaded template object.
#
# @note
# Tilt::Cache is a thin wrapper around Hash. It has the following
# limitations:
# * Not thread-safe.
# * Size is unbounded.
# * Keys are not copied defensively, and should not be modified after
# being passed to #fetch. More specifically, the values returned by
# key#hash and key#eql? should not change.
# If this is too limiting for you, use a different cache implementation.
class Cache
def initialize
@cache = {}
end
# Caches a value for key, or returns the previously cached value.
# If a value has been previously cached for key then it is
# returned. Otherwise, block is yielded to and its return value
# which may be nil, is cached under key and returned.
# @yield
# @yieldreturn the value to cache for key
def fetch(*key)
@cache.fetch(key) do
@cache[key] = yield
end
end
# Clears the cache.
def clear
@cache = {}
end
end
# Template Implementations ================================================
# ERB
register_lazy :ERBTemplate, 'tilt/erb', 'erb', 'rhtml'
register_lazy :ErubisTemplate, 'tilt/erubis', 'erb', 'rhtml', 'erubis'
register_lazy :ErubiTemplate, 'tilt/erubi', 'erb', 'rhtml', 'erubi'
# Markdown
register_lazy :BlueClothTemplate, 'tilt/bluecloth', 'markdown', 'mkd', 'md'
register_lazy :MarukuTemplate, 'tilt/maruku', 'markdown', 'mkd', 'md'
register_lazy :KramdownTemplate, 'tilt/kramdown', 'markdown', 'mkd', 'md'
register_lazy :RDiscountTemplate, 'tilt/rdiscount', 'markdown', 'mkd', 'md'
register_lazy :RedcarpetTemplate, 'tilt/redcarpet', 'markdown', 'mkd', 'md'
register_lazy :CommonMarkerTemplate, 'tilt/commonmarker', 'markdown', 'mkd', 'md'
register_lazy :PandocTemplate, 'tilt/pandoc', 'markdown', 'mkd', 'md'
# Rest (sorted by name)
register_lazy :AsciidoctorTemplate, 'tilt/asciidoc', 'ad', 'adoc', 'asciidoc'
register_lazy :BabelTemplate, 'tilt/babel', 'es6', 'babel', 'jsx'
register_lazy :BuilderTemplate, 'tilt/builder', 'builder'
register_lazy :CSVTemplate, 'tilt/csv', 'rcsv'
register_lazy :CoffeeScriptTemplate, 'tilt/coffee', 'coffee'
register_lazy :CoffeeScriptLiterateTemplate, 'tilt/coffee', 'litcoffee'
register_lazy :CreoleTemplate, 'tilt/creole', 'wiki', 'creole'
register_lazy :EtanniTemplate, 'tilt/etanni', 'etn', 'etanni'
register_lazy :HamlTemplate, 'tilt/haml', 'haml'
register_lazy :LessTemplate, 'tilt/less', 'less'
register_lazy :LiquidTemplate, 'tilt/liquid', 'liquid'
register_lazy :LiveScriptTemplate, 'tilt/livescript','ls', 'livescript'
register_lazy :MarkabyTemplate, 'tilt/markaby', 'mab'
register_lazy :NokogiriTemplate, 'tilt/nokogiri', 'nokogiri'
register_lazy :PlainTemplate, 'tilt/plain', 'html'
register_lazy :PrawnTemplate, 'tilt/prawn', 'prawn'
register_lazy :RDocTemplate, 'tilt/rdoc', 'rdoc'
register_lazy :RadiusTemplate, 'tilt/radius', 'radius'
register_lazy :RedClothTemplate, 'tilt/redcloth', 'textile'
register_lazy :RstPandocTemplate, 'tilt/rst-pandoc', 'rst'
register_lazy :SassTemplate, 'tilt/sass', 'sass'
register_lazy :ScssTemplate, 'tilt/sass', 'scss'
register_lazy :SigilTemplate, 'tilt/sigil', 'sigil'
register_lazy :StringTemplate, 'tilt/string', 'str'
register_lazy :TypeScriptTemplate, 'tilt/typescript', 'ts', 'tsx'
register_lazy :WikiClothTemplate, 'tilt/wikicloth', 'wiki', 'mediawiki', 'mw'
register_lazy :YajlTemplate, 'tilt/yajl', 'yajl'
# External template engines
register_lazy 'Slim::Template', 'slim', 'slim'
register_lazy 'Tilt::HandlebarsTemplate', 'tilt/handlebars', 'handlebars', 'hbs'
register_lazy 'Tilt::OrgTemplate', 'org-ruby', 'org'
register_lazy 'Tilt::EmacsOrgTemplate', 'tilt/emacs_org', 'org'
register_lazy 'Tilt::JbuilderTemplate', 'tilt/jbuilder', 'jbuilder'
end