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
         
     |