haml-edge 2.1.21 → 2.1.22
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.
- data/EDGE_GEM_VERSION +1 -1
- data/FAQ.md +142 -0
- data/{README.rdoc → README.md} +141 -141
- data/Rakefile +29 -17
- data/VERSION +1 -1
- data/lib/haml/buffer.rb +63 -27
- data/lib/haml/engine.rb +103 -80
- data/lib/haml/error.rb +7 -7
- data/lib/haml/exec.rb +80 -26
- data/lib/haml/filters.rb +106 -40
- data/lib/haml/helpers/action_view_extensions.rb +34 -39
- data/lib/haml/helpers/action_view_mods.rb +132 -139
- data/lib/haml/helpers.rb +207 -153
- data/lib/haml/html.rb +40 -21
- data/lib/haml/precompiler.rb +2 -0
- data/lib/haml/shared.rb +34 -3
- data/lib/haml/template/patch.rb +1 -1
- data/lib/haml/template/plugin.rb +0 -2
- data/lib/haml/template.rb +5 -0
- data/lib/haml/util.rb +136 -1
- data/lib/haml/version.rb +16 -4
- data/lib/haml.rb +502 -481
- data/lib/sass/css.rb +106 -68
- data/lib/sass/engine.rb +55 -22
- data/lib/sass/environment.rb +52 -21
- data/lib/sass/error.rb +23 -12
- data/lib/sass/files.rb +27 -0
- data/lib/sass/plugin/merb.rb +2 -2
- data/lib/sass/plugin/rails.rb +0 -2
- data/lib/sass/plugin.rb +32 -23
- data/lib/sass/repl.rb +7 -0
- data/lib/sass/script/bool.rb +9 -5
- data/lib/sass/script/color.rb +87 -1
- data/lib/sass/script/funcall.rb +23 -2
- data/lib/sass/script/functions.rb +93 -44
- data/lib/sass/script/lexer.rb +33 -3
- data/lib/sass/script/literal.rb +93 -1
- data/lib/sass/script/node.rb +14 -0
- data/lib/sass/script/number.rb +128 -4
- data/lib/sass/script/operation.rb +16 -1
- data/lib/sass/script/parser.rb +51 -21
- data/lib/sass/script/string.rb +7 -4
- data/lib/sass/script/unary_operation.rb +14 -1
- data/lib/sass/script/variable.rb +12 -1
- data/lib/sass/script.rb +26 -5
- data/lib/sass/tree/attr_node.rb +46 -9
- data/lib/sass/tree/comment_node.rb +41 -1
- data/lib/sass/tree/debug_node.rb +8 -0
- data/lib/sass/tree/directive_node.rb +20 -0
- data/lib/sass/tree/file_node.rb +12 -0
- data/lib/sass/tree/for_node.rb +15 -0
- data/lib/sass/tree/if_node.rb +22 -0
- data/lib/sass/tree/mixin_def_node.rb +12 -1
- data/lib/sass/tree/mixin_node.rb +13 -0
- data/lib/sass/tree/node.rb +136 -6
- data/lib/sass/tree/rule_node.rb +66 -7
- data/lib/sass/tree/variable_node.rb +10 -0
- data/lib/sass/tree/while_node.rb +11 -1
- data/lib/sass.rb +544 -534
- metadata +7 -6
- data/FAQ +0 -138
data/lib/haml/exec.rb
CHANGED
@@ -2,19 +2,18 @@ require 'optparse'
|
|
2
2
|
require 'fileutils'
|
3
3
|
|
4
4
|
module Haml
|
5
|
-
# This module
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
# A class that encapsulates the executable code
|
11
|
-
# for all three executables.
|
12
|
-
class Generic # :nodoc:
|
5
|
+
# This module handles the various Haml executables (`haml`, `sass`, `css2sass`, etc).
|
6
|
+
module Exec
|
7
|
+
# An abstract class that encapsulates the executable code for all three executables.
|
8
|
+
class Generic
|
9
|
+
# @param args [Array<String>] The command-line arguments
|
13
10
|
def initialize(args)
|
14
11
|
@args = args
|
15
12
|
@options = {}
|
16
13
|
end
|
17
14
|
|
15
|
+
# Parses the command-line arguments and runs the executable.
|
16
|
+
# Calls `Kernel#exit` at the end, so it never returns.
|
18
17
|
def parse!
|
19
18
|
begin
|
20
19
|
@opts = OptionParser.new(&method(:set_opts))
|
@@ -32,12 +31,18 @@ module Haml
|
|
32
31
|
exit 0
|
33
32
|
end
|
34
33
|
|
34
|
+
# @return [String] A description of the executable
|
35
35
|
def to_s
|
36
36
|
@opts.to_s
|
37
37
|
end
|
38
38
|
|
39
39
|
protected
|
40
40
|
|
41
|
+
# Finds the line of the source template
|
42
|
+
# on which an exception was raised.
|
43
|
+
#
|
44
|
+
# @param exception [Exception] The exception
|
45
|
+
# @return [String] The line number
|
41
46
|
def get_line(exception)
|
42
47
|
# SyntaxErrors have weird line reporting
|
43
48
|
# when there's trailing whitespace,
|
@@ -46,8 +51,13 @@ module Haml
|
|
46
51
|
exception.backtrace[0].scan(/:(\d+)/).first.first
|
47
52
|
end
|
48
53
|
|
49
|
-
|
50
|
-
|
54
|
+
# Tells optparse how to parse the arguments
|
55
|
+
# available for all executables.
|
56
|
+
#
|
57
|
+
# This is meant to be overridden by subclasses
|
58
|
+
# so they can add their own options.
|
59
|
+
#
|
60
|
+
# @param opts [OptionParser]
|
51
61
|
def set_opts(opts)
|
52
62
|
opts.on('-s', '--stdin', :NONE, 'Read input from standard input instead of an input file') do
|
53
63
|
@options[:input] = $stdin
|
@@ -68,6 +78,12 @@ module Haml
|
|
68
78
|
end
|
69
79
|
end
|
70
80
|
|
81
|
+
# Processes the options set by the command-line arguments.
|
82
|
+
# In particular, sets `@options[:input]` and `@options[:output]`
|
83
|
+
# to appropriate IO streams.
|
84
|
+
#
|
85
|
+
# This is meant to be overridden by subclasses
|
86
|
+
# so they can run their respective programs.
|
71
87
|
def process_result
|
72
88
|
input, output = @options[:input], @options[:output]
|
73
89
|
input_file, output_file = if input
|
@@ -85,22 +101,32 @@ module Haml
|
|
85
101
|
@options[:input], @options[:output] = input, output
|
86
102
|
end
|
87
103
|
|
104
|
+
private
|
105
|
+
|
88
106
|
def open_file(filename, flag = 'r')
|
89
107
|
return if filename.nil?
|
90
108
|
File.open(filename, flag)
|
91
109
|
end
|
92
110
|
end
|
93
111
|
|
94
|
-
#
|
95
|
-
# specific to
|
96
|
-
class HamlSass < Generic
|
112
|
+
# An abstrac class that encapsulates the code
|
113
|
+
# specific to the `haml` and `sass` executables.
|
114
|
+
class HamlSass < Generic
|
115
|
+
# @param args [Array<String>] The command-line arguments
|
97
116
|
def initialize(args)
|
98
117
|
super
|
99
118
|
@options[:for_engine] = {}
|
100
119
|
end
|
101
120
|
|
102
|
-
|
121
|
+
protected
|
103
122
|
|
123
|
+
# Tells optparse how to parse the arguments
|
124
|
+
# available for the `haml` and `sass` executables.
|
125
|
+
#
|
126
|
+
# This is meant to be overridden by subclasses
|
127
|
+
# so they can add their own options.
|
128
|
+
#
|
129
|
+
# @param opts [OptionParser]
|
104
130
|
def set_opts(opts)
|
105
131
|
opts.banner = <<END
|
106
132
|
Usage: #{@name.downcase} [options] [INPUT] [OUTPUT]
|
@@ -155,6 +181,12 @@ END
|
|
155
181
|
super
|
156
182
|
end
|
157
183
|
|
184
|
+
# Processes the options set by the command-line arguments.
|
185
|
+
# In particular, sets `@options[:for_engine][:filename]` to the input filename
|
186
|
+
# and requires the appropriate file.
|
187
|
+
#
|
188
|
+
# This is meant to be overridden by subclasses
|
189
|
+
# so they can run their respective programs.
|
158
190
|
def process_result
|
159
191
|
super
|
160
192
|
@options[:for_engine][:filename] = @options[:filename] if @options[:filename]
|
@@ -162,15 +194,20 @@ END
|
|
162
194
|
end
|
163
195
|
end
|
164
196
|
|
165
|
-
#
|
166
|
-
|
167
|
-
|
197
|
+
# The `sass` executable.
|
198
|
+
class Sass < HamlSass
|
199
|
+
# @param args [Array<String>] The command-line arguments
|
168
200
|
def initialize(args)
|
169
201
|
super
|
170
202
|
@name = "Sass"
|
171
203
|
@options[:for_engine][:load_paths] = ['.'] + (ENV['SASSPATH'] || '').split(File::PATH_SEPARATOR)
|
172
204
|
end
|
173
205
|
|
206
|
+
protected
|
207
|
+
|
208
|
+
# Tells optparse how to parse the arguments.
|
209
|
+
#
|
210
|
+
# @param opts [OptionParser]
|
174
211
|
def set_opts(opts)
|
175
212
|
super
|
176
213
|
|
@@ -197,6 +234,8 @@ END
|
|
197
234
|
end
|
198
235
|
end
|
199
236
|
|
237
|
+
# Processes the options set by the command-line arguments,
|
238
|
+
# and runs the Sass compiler appropriately.
|
200
239
|
def process_result
|
201
240
|
if @options[:interactive]
|
202
241
|
require 'sass'
|
@@ -229,9 +268,9 @@ END
|
|
229
268
|
end
|
230
269
|
end
|
231
270
|
|
232
|
-
#
|
233
|
-
|
234
|
-
|
271
|
+
# The `haml` executable.
|
272
|
+
class Haml < HamlSass
|
273
|
+
# @param args [Array<String>] The command-line arguments
|
235
274
|
def initialize(args)
|
236
275
|
super
|
237
276
|
@name = "Haml"
|
@@ -239,6 +278,9 @@ END
|
|
239
278
|
@options[:load_paths] = []
|
240
279
|
end
|
241
280
|
|
281
|
+
# Tells optparse how to parse the arguments.
|
282
|
+
#
|
283
|
+
# @param opts [OptionParser]
|
242
284
|
def set_opts(opts)
|
243
285
|
super
|
244
286
|
|
@@ -270,6 +312,8 @@ END
|
|
270
312
|
end
|
271
313
|
end
|
272
314
|
|
315
|
+
# Processes the options set by the command-line arguments,
|
316
|
+
# and runs the Haml compiler appropriately.
|
273
317
|
def process_result
|
274
318
|
super
|
275
319
|
input = @options[:input]
|
@@ -309,9 +353,9 @@ END
|
|
309
353
|
end
|
310
354
|
end
|
311
355
|
|
312
|
-
#
|
313
|
-
|
314
|
-
|
356
|
+
# The `html2haml` executable.
|
357
|
+
class HTML2Haml < Generic
|
358
|
+
# @param args [Array<String>] The command-line arguments
|
315
359
|
def initialize(args)
|
316
360
|
super
|
317
361
|
|
@@ -326,6 +370,9 @@ END
|
|
326
370
|
end
|
327
371
|
end
|
328
372
|
|
373
|
+
# Tells optparse how to parse the arguments.
|
374
|
+
#
|
375
|
+
# @param opts [OptionParser]
|
329
376
|
def set_opts(opts)
|
330
377
|
opts.banner = <<END
|
331
378
|
Usage: html2haml [options] [INPUT] [OUTPUT]
|
@@ -350,6 +397,8 @@ END
|
|
350
397
|
super
|
351
398
|
end
|
352
399
|
|
400
|
+
# Processes the options set by the command-line arguments,
|
401
|
+
# and runs the HTML compiler appropriately.
|
353
402
|
def process_result
|
354
403
|
super
|
355
404
|
|
@@ -363,9 +412,9 @@ END
|
|
363
412
|
end
|
364
413
|
end
|
365
414
|
|
366
|
-
#
|
367
|
-
|
368
|
-
|
415
|
+
# The `css2sass` executable.
|
416
|
+
class CSS2Sass < Generic
|
417
|
+
# @param args [Array<String>] The command-line arguments
|
369
418
|
def initialize(args)
|
370
419
|
super
|
371
420
|
|
@@ -374,6 +423,9 @@ END
|
|
374
423
|
require 'sass/css'
|
375
424
|
end
|
376
425
|
|
426
|
+
# Tells optparse how to parse the arguments.
|
427
|
+
#
|
428
|
+
# @param opts [OptionParser]
|
377
429
|
def set_opts(opts)
|
378
430
|
opts.banner = <<END
|
379
431
|
Usage: css2sass [options] [INPUT] [OUTPUT]
|
@@ -390,6 +442,8 @@ END
|
|
390
442
|
super
|
391
443
|
end
|
392
444
|
|
445
|
+
# Processes the options set by the command-line arguments,
|
446
|
+
# and runs the CSS compiler appropriately.
|
393
447
|
def process_result
|
394
448
|
super
|
395
449
|
|
data/lib/haml/filters.rb
CHANGED
@@ -1,71 +1,98 @@
|
|
1
1
|
module Haml
|
2
|
-
# The module containing the default filters,
|
3
|
-
# as well as the base module,
|
4
|
-
#
|
2
|
+
# The module containing the default Haml filters,
|
3
|
+
# as well as the base module, {Haml::Filters::Base}.
|
4
|
+
#
|
5
|
+
# @see Haml::Filters::Base
|
5
6
|
module Filters
|
6
|
-
#
|
7
|
+
# @return [Hash<String, Haml::Filters::Base>] a hash of filter names to classes
|
7
8
|
def self.defined
|
8
9
|
@defined ||= {}
|
9
10
|
end
|
10
11
|
|
11
12
|
# The base module for Haml filters.
|
12
13
|
# User-defined filters should be modules including this module.
|
14
|
+
# The name of the filter is taken by downcasing the module name.
|
15
|
+
# For instance, if the module is named `FooBar`, the filter will be `:foobar`.
|
13
16
|
#
|
14
|
-
# A user-defined filter should override either
|
15
|
-
#
|
17
|
+
# A user-defined filter should override either \{#render} or {\#compile}.
|
18
|
+
# \{#render} is the most common.
|
16
19
|
# It takes a string, the filter source,
|
17
|
-
# and returns another string,
|
18
|
-
# the
|
19
|
-
# For example:
|
20
|
+
# and returns another string, the result of the filter.
|
21
|
+
# For example, the following will define a filter named `:sass`:
|
20
22
|
#
|
21
|
-
#
|
22
|
-
#
|
23
|
+
# module Haml::Filters::Sass
|
24
|
+
# include Haml::Filters::Base
|
23
25
|
#
|
24
|
-
#
|
25
|
-
#
|
26
|
+
# def render(text)
|
27
|
+
# ::Sass::Engine.new(text).render
|
28
|
+
# end
|
26
29
|
# end
|
27
|
-
# end
|
28
30
|
#
|
29
|
-
# For details on overriding #compile, see its documentation.
|
31
|
+
# For details on overriding \{#compile}, see its documentation.
|
30
32
|
#
|
33
|
+
# Note that filters overriding \{#render} automatically support `#{}`
|
34
|
+
# for interpolating Ruby code.
|
35
|
+
# Those overriding \{#compile} will need to add such support manually
|
36
|
+
# if it's desired.
|
31
37
|
module Base
|
32
|
-
|
38
|
+
# This method is automatically called when {Base} is included in a module.
|
39
|
+
# It automatically defines a filter
|
40
|
+
# with the downcased name of that module.
|
41
|
+
# For example, if the module is named `FooBar`, the filter will be `:foobar`.
|
42
|
+
#
|
43
|
+
# @param base [Module, Class] The module that this is included in
|
44
|
+
def self.included(base)
|
33
45
|
Filters.defined[base.name.split("::").last.downcase] = base
|
34
46
|
base.extend(base)
|
35
47
|
end
|
36
48
|
|
37
|
-
# Takes
|
38
|
-
# and returns the
|
49
|
+
# Takes the source text that should be passed to the filter
|
50
|
+
# and returns the result of running the filter on that string.
|
39
51
|
#
|
40
52
|
# This should be overridden in most individual filter modules
|
41
53
|
# to render text with the given filter.
|
42
|
-
# If compile is overridden, however, render doesn't need to be.
|
54
|
+
# If \{#compile} is overridden, however, \{#render} doesn't need to be.
|
55
|
+
#
|
56
|
+
# @param text [String] The source text for the filter to process
|
57
|
+
# @return [String] The filtered result
|
58
|
+
# @raise [Haml::Error] if it's not overridden
|
43
59
|
def render(text)
|
44
60
|
raise Error.new("#{self.inspect}#render not defined!")
|
45
61
|
end
|
46
62
|
|
47
|
-
# Same as render, but takes
|
48
|
-
# It's only safe to rely on options made available in Haml::Engine#
|
63
|
+
# Same as \{#render}, but takes a {Haml::Engine} options hash as well.
|
64
|
+
# It's only safe to rely on options made available in {Haml::Engine#options\_for\_buffer}.
|
65
|
+
#
|
66
|
+
# @see #render
|
67
|
+
# @param text [String] The source text for the filter to process
|
68
|
+
# @return [String] The filtered result
|
69
|
+
# @raise [Haml::Error] if it or \{#render} isn't overridden
|
49
70
|
def render_with_options(text, options)
|
50
71
|
render(text)
|
51
72
|
end
|
52
73
|
|
53
|
-
|
74
|
+
# Same as \{#compile}, but requires the necessary files first.
|
75
|
+
# *This is used by {Haml::Engine} and is not intended to be overridden or used elsewhere.*
|
76
|
+
#
|
77
|
+
# @see #compile
|
78
|
+
def internal_compile(*args)
|
54
79
|
resolve_lazy_requires
|
55
80
|
compile(*args)
|
56
81
|
end
|
57
82
|
|
58
|
-
#
|
59
|
-
# to the Haml evaluation context.
|
83
|
+
# This should be overridden when a filter needs to have access to the Haml evaluation context.
|
60
84
|
# Rather than applying a filter to a string at compile-time,
|
61
|
-
# compile uses the Haml::Precompiler instance to compile the string to Ruby code
|
85
|
+
# \{#compile} uses the {Haml::Precompiler} instance to compile the string to Ruby code
|
62
86
|
# that will be executed in the context of the active Haml template.
|
63
87
|
#
|
64
|
-
# Warning: the Haml::Precompiler interface is neither well-documented
|
88
|
+
# Warning: the {Haml::Precompiler} interface is neither well-documented
|
65
89
|
# nor guaranteed to be stable.
|
66
|
-
# If you want to make use of it,
|
67
|
-
# you'll probably need to look at the source code
|
90
|
+
# If you want to make use of it, you'll probably need to look at the source code
|
68
91
|
# and should test your filter when upgrading to new Haml versions.
|
92
|
+
#
|
93
|
+
# @param precompiler [Haml::Precompiler] The precompiler instance
|
94
|
+
# @param text [String] The text of the filter
|
95
|
+
# @raise [Haml::Error] if none of \{#compile}, \{#render}, and \{#render_with_options} are overridden
|
69
96
|
def compile(precompiler, text)
|
70
97
|
resolve_lazy_requires
|
71
98
|
filter = self
|
@@ -89,22 +116,22 @@ RUBY
|
|
89
116
|
end
|
90
117
|
end
|
91
118
|
|
92
|
-
# This becomes a class method of modules that include Base.
|
119
|
+
# This becomes a class method of modules that include {Base}.
|
93
120
|
# It allows the module to specify one or more Ruby files
|
94
121
|
# that Haml should try to require when compiling the filter.
|
95
122
|
#
|
96
|
-
# The first file specified is tried first,
|
97
|
-
# then the second, etc.
|
123
|
+
# The first file specified is tried first, then the second, etc.
|
98
124
|
# If none are found, the compilation throws an exception.
|
99
125
|
#
|
100
126
|
# For example:
|
101
127
|
#
|
102
|
-
#
|
103
|
-
#
|
128
|
+
# module Haml::Filters::Markdown
|
129
|
+
# lazy_require 'rdiscount', 'peg_markdown', 'maruku', 'bluecloth'
|
104
130
|
#
|
105
|
-
#
|
106
|
-
#
|
131
|
+
# ...
|
132
|
+
# end
|
107
133
|
#
|
134
|
+
# @param reqs [Array<String>] The requires to run
|
108
135
|
def lazy_require(*reqs)
|
109
136
|
@lazy_requires = reqs
|
110
137
|
end
|
@@ -139,23 +166,29 @@ RUBY
|
|
139
166
|
end
|
140
167
|
end
|
141
168
|
|
142
|
-
# :stopdoc:
|
143
|
-
|
144
169
|
begin
|
145
170
|
require 'rubygems'
|
146
171
|
rescue LoadError; end
|
147
172
|
|
148
173
|
module Haml
|
149
174
|
module Filters
|
175
|
+
# Does not parse the filtered text.
|
176
|
+
# This is useful for large blocks of text without HTML tags,
|
177
|
+
# when you don't want lines starting with `.` or `-`
|
178
|
+
# to be parsed.
|
150
179
|
module Plain
|
151
180
|
include Base
|
152
181
|
|
182
|
+
# @see Base#render
|
153
183
|
def render(text); text; end
|
154
184
|
end
|
155
185
|
|
186
|
+
# Surrounds the filtered text with `<script>` and CDATA tags.
|
187
|
+
# Useful for including inline Javascript.
|
156
188
|
module Javascript
|
157
189
|
include Base
|
158
190
|
|
191
|
+
# @see Base#render_with_options
|
159
192
|
def render_with_options(text, options)
|
160
193
|
<<END
|
161
194
|
<script type=#{options[:attr_wrapper]}text/javascript#{options[:attr_wrapper]}>
|
@@ -167,26 +200,37 @@ END
|
|
167
200
|
end
|
168
201
|
end
|
169
202
|
|
203
|
+
# Surrounds the filtered text with CDATA tags.
|
170
204
|
module Cdata
|
171
205
|
include Base
|
172
206
|
|
207
|
+
# @see Base#render
|
173
208
|
def render(text)
|
174
209
|
"<![CDATA[#{("\n" + text).rstrip.gsub("\n", "\n ")}\n]]>"
|
175
210
|
end
|
176
211
|
end
|
177
212
|
|
213
|
+
# Works the same as {Plain}, but HTML-escapes the text
|
214
|
+
# before placing it in the document.
|
178
215
|
module Escaped
|
179
216
|
include Base
|
180
217
|
|
218
|
+
# @see Base#render
|
181
219
|
def render(text)
|
182
220
|
Haml::Helpers.html_escape text
|
183
221
|
end
|
184
222
|
end
|
185
223
|
|
224
|
+
# Parses the filtered text with the normal Ruby interpreter.
|
225
|
+
# All output sent to `$stdout`, such as with `puts`,
|
226
|
+
# is output into the Haml document.
|
227
|
+
# Not available if the [`:suppress_eval`](../Haml.html#suppress-eval-option) option is set to true.
|
228
|
+
# The Ruby code is evaluated in the same context as the Haml template.
|
186
229
|
module Ruby
|
187
230
|
include Base
|
188
231
|
lazy_require 'stringio'
|
189
232
|
|
233
|
+
# @see Base#compile
|
190
234
|
def compile(precompiler, text)
|
191
235
|
return if precompiler.options[:suppress_eval]
|
192
236
|
precompiler.instance_eval do
|
@@ -201,27 +245,40 @@ END
|
|
201
245
|
end
|
202
246
|
end
|
203
247
|
|
248
|
+
# Inserts the filtered text into the template with whitespace preserved.
|
249
|
+
# `preserve`d blocks of text aren't indented,
|
250
|
+
# and newlines are replaced with the HTML escape code for newlines,
|
251
|
+
# to preserve nice-looking output.
|
252
|
+
#
|
253
|
+
# @see Haml::Helpers#preserve
|
204
254
|
module Preserve
|
205
255
|
include Base
|
206
256
|
|
257
|
+
# @see Base#render
|
207
258
|
def render(text)
|
208
259
|
Haml::Helpers.preserve text
|
209
260
|
end
|
210
261
|
end
|
211
262
|
|
263
|
+
# Parses the filtered text with {Sass} to produce CSS output.
|
212
264
|
module Sass
|
213
265
|
include Base
|
214
266
|
lazy_require 'sass/plugin'
|
215
267
|
|
268
|
+
# @see Base#render
|
216
269
|
def render(text)
|
217
270
|
::Sass::Engine.new(text, ::Sass::Plugin.engine_options).render
|
218
271
|
end
|
219
272
|
end
|
220
273
|
|
274
|
+
# Parses the filtered text with ERB, like an RHTML template.
|
275
|
+
# Not available if the [`:suppress_eval`](../Haml.html#suppress-eval-option) option is set to true.
|
276
|
+
# Embedded Ruby code is evaluated in the same context as the Haml template.
|
221
277
|
module ERB
|
222
278
|
include Base
|
223
279
|
lazy_require 'erb'
|
224
280
|
|
281
|
+
# @see Base#compile
|
225
282
|
def compile(precompiler, text)
|
226
283
|
return if precompiler.options[:suppress_eval]
|
227
284
|
src = ::ERB.new(text).src.sub(/^#coding:.*?\n/, '').
|
@@ -230,10 +287,13 @@ END
|
|
230
287
|
end
|
231
288
|
end
|
232
289
|
|
290
|
+
# Parses the filtered text with [Textile](http://www.textism.com/tools/textile).
|
291
|
+
# Only works if [RedCloth](http://redcloth.org) is installed.
|
233
292
|
module Textile
|
234
293
|
include Base
|
235
294
|
lazy_require 'redcloth'
|
236
295
|
|
296
|
+
# @see Base#render
|
237
297
|
def render(text)
|
238
298
|
::RedCloth.new(text).to_html(:textile)
|
239
299
|
end
|
@@ -241,11 +301,16 @@ END
|
|
241
301
|
RedCloth = Textile
|
242
302
|
Filters.defined['redcloth'] = RedCloth
|
243
303
|
|
244
|
-
#
|
304
|
+
# Parses the filtered text with [Markdown](http://daringfireball.net/projects/markdown).
|
305
|
+
# Only works if [RDiscount](http://github.com/rtomayko/rdiscount),
|
306
|
+
# [RPeg-Markdown](http://github.com/rtomayko/rpeg-markdown),
|
307
|
+
# [Maruku](http://maruku.rubyforge.org),
|
308
|
+
# or [BlueCloth](www.deveiate.org/projects/BlueCloth) are installed.
|
245
309
|
module Markdown
|
246
310
|
include Base
|
247
311
|
lazy_require 'rdiscount', 'peg_markdown', 'maruku', 'bluecloth'
|
248
312
|
|
313
|
+
# @see Base#render
|
249
314
|
def render(text)
|
250
315
|
engine = case @required
|
251
316
|
when 'rdiscount'
|
@@ -261,15 +326,16 @@ END
|
|
261
326
|
end
|
262
327
|
end
|
263
328
|
|
329
|
+
# Parses the filtered text with [Maruku](http://maruku.rubyforge.org),
|
330
|
+
# which has some non-standard extensions to Markdown.
|
264
331
|
module Maruku
|
265
332
|
include Base
|
266
333
|
lazy_require 'maruku'
|
267
334
|
|
335
|
+
# @see Base#render
|
268
336
|
def render(text)
|
269
337
|
::Maruku.new(text).to_html
|
270
338
|
end
|
271
339
|
end
|
272
340
|
end
|
273
341
|
end
|
274
|
-
|
275
|
-
# :startdoc:
|
@@ -1,45 +1,40 @@
|
|
1
1
|
require 'haml/helpers/action_view_mods'
|
2
2
|
|
3
|
-
|
4
|
-
module
|
5
|
-
module
|
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
|
-
controller.controller_name + " " + controller.action_name
|
37
|
-
end
|
38
|
-
|
39
|
-
# :stopdoc:
|
40
|
-
alias_method :generate_content_class_names, :page_class
|
41
|
-
# :startdoc:
|
3
|
+
module Haml
|
4
|
+
module Helpers
|
5
|
+
# This module contains various useful helper methods
|
6
|
+
# that either tie into ActionView or the rest of the ActionPack stack,
|
7
|
+
# or are only useful in that context.
|
8
|
+
# Thus, the methods defined here are only available
|
9
|
+
# if ActionView is installed.
|
10
|
+
module ActionViewExtensions
|
11
|
+
# Returns a value for the "class" attribute
|
12
|
+
# unique to this controller/action pair.
|
13
|
+
# This can be used to target styles specifically at this action or controller.
|
14
|
+
# For example, if the current action were `EntryController#show`,
|
15
|
+
#
|
16
|
+
# %div{:class => page_class} My Div
|
17
|
+
#
|
18
|
+
# would become
|
19
|
+
#
|
20
|
+
# <div class="entry show">My Div</div>
|
21
|
+
#
|
22
|
+
# Then, in a stylesheet (shown here as {Sass}),
|
23
|
+
# you could refer to this specific action:
|
24
|
+
#
|
25
|
+
# .entry.show
|
26
|
+
# :font-weight bold
|
27
|
+
#
|
28
|
+
# or to all actions in the entry controller:
|
29
|
+
#
|
30
|
+
# .entry
|
31
|
+
# :color #00f
|
32
|
+
#
|
33
|
+
# @return [String] The class name for the current page
|
34
|
+
def page_class
|
35
|
+
controller.controller_name + " " + controller.action_name
|
42
36
|
end
|
37
|
+
alias_method :generate_content_class_names, :page_class
|
43
38
|
end
|
44
39
|
end
|
45
40
|
end
|