-
Notifications
You must be signed in to change notification settings - Fork 227
/
tilt.rb
137 lines (115 loc) · 4.48 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
require 'tilt/mapping'
require 'tilt/template'
# Namespace for Tilt. This module is not intended to be included anywhere.
module Tilt
# Current version.
VERSION = '2.0.1'
@default_mapping = Mapping.new
# @return [Tilt::Mapping] the main mapping object
def self.default_mapping
@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
# @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.
class Cache
def initialize
@cache = {}
end
# @see Cache
def fetch(*key)
@cache[key] ||= yield
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'
# 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'
# Rest (sorted by name)
register_lazy :AsciidoctorTemplate, 'tilt/asciidoc', 'ad', 'adoc', 'asciidoc'
register_lazy :BuilderTemplate, 'tilt/builder', 'builder'
register_lazy :CSVTemplate, 'tilt/csv', 'rcsv'
register_lazy :CoffeeScriptTemplate, 'tilt/coffee', 'coffee'
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 :MarkabyTemplate, 'tilt/markaby', 'mab'
register_lazy :NokogiriTemplate, 'tilt/nokogiri', 'nokogiri'
register_lazy :PlainTemplate, 'tilt/plain', 'html'
register_lazy :RDocTemplate, 'tilt/rdoc', 'rdoc'
register_lazy :RadiusTemplate, 'tilt/radius', 'radius'
register_lazy :RedClothTemplate, 'tilt/redcloth', 'textile'
register_lazy :SassTemplate, 'tilt/sass', 'sass'
register_lazy :ScssTemplate, 'tilt/sass', 'scss'
register_lazy :StringTemplate, 'tilt/string', 'str'
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'
end