I've just glanced over the patch, but it definitely looks like you're on 
the right track.

Thanks for giving this a go.

- Nathan

Wincent Colaiuta wrote:
> This is just a preview of what seems to be the minimal changes to suppress
> indentation with an :ugly option to Haml::Engine. This is completely untested,
> unchecked, and is basically just intended to give an idea of what might kind
> of change I'm contemplating.
>
> Not sure whether Google will mangle the patch as it's the first time I'm
> sending a patch Google Groups using "git send-email".
>
> ---
>  lib/haml/buffer.rb      |   20 +++++++++++++-------
>  lib/haml/engine.rb      |    8 ++++++--
>  lib/haml/precompiler.rb |   14 ++++++++++----
>  3 files changed, 29 insertions(+), 13 deletions(-)
>
> diff --git a/lib/haml/buffer.rb b/lib/haml/buffer.rb
> index 4bdac1d..c2763e7 100644
> --- a/lib/haml/buffer.rb
> +++ b/lib/haml/buffer.rb
> @@ -32,7 +32,8 @@ module Haml
>      # Creates a new buffer.
>      def initialize(options = {})
>        @options = {
> -        :attr_wrapper => "'"
> +        :attr_wrapper => "'",
> +        :ugly => false
>        }.merge options
>        @buffer = ""
>        @tabulation = 0
> @@ -45,7 +46,7 @@ module Haml
>      # Renders +text+ with the proper tabulation. This also deals with
>      # making a possible one-line tag one line or not.
>      def push_text(text, tab_change = 0)
> -      if(@tabulation > 0)
> +      if(@tabulation > 0 && [EMAIL PROTECTED]:ugly])
>          # Have to push every line in by the extra user set tabulation
>          text.gsub!(/^/m, '  ' * @tabulation)
>        end
> @@ -78,11 +79,11 @@ module Haml
>            @buffer << "\n"
>          end
>          
> -        result = result.gsub(/^/m, tabs(tabulation))
> +        result = result.gsub(/^/m, tabs(tabulation)) unless @options[:ugly]
>          @buffer << "#{result}\n"
>          
>          if close_tag
> -          @buffer << "#{tabs(tabulation-1)}</#{close_tag}>\n"
> +          @buffer << @options[:ugly] ? "</#{close_tag}>\n" : 
> "#{tabs(tabulation-1)}</#{close_tag}>\n"
>            @real_tabs -= 1
>          end
>        end
> @@ -108,10 +109,16 @@ module Haml
>        else
>          str = ">\n"
>        end
> -      @buffer << 
> "#{tabs(tabulation)}<#{name}#{Precompiler.build_attributes(@options[:attr_wrapper],
>  attributes)}#{str}"
> +      if @options[:ugly]
> +        @buffer << 
> "#{tabs(tabulation)}<#{name}#{Precompiler.build_attributes(@options[:attr_wrapper],
>  attributes)}#{str}"
> +      else
> +        @buffer << 
> "<#{name}#{Precompiler.build_attributes(@options[:attr_wrapper], 
> attributes)}#{str}"
> +      end
>        if content
>          if Buffer.one_liner?(content)
>            @buffer << "#{content}</#{name}>\n"
> +        elsif @options[:ugly]
> +          @buffer << "\n#{content}\n</#{name}>\n"
>          else
>            @buffer << 
> "\n#{tabs(@real_tabs+1)}#{content}\n#{tabs(@real_tabs)}</#{name}>\n"
>          end
> @@ -152,8 +159,7 @@ module Haml
>      # Gets <tt>count</tt> tabs. Mostly for internal use.
>      def tabs(count)
>        tabs = count + @tabulation
> -      '  ' * tabs
> -      @@tab_cache[tabs] ||= '  ' * tabs
> +      @@tab_cache[tabs] ||= (@options[:ugly] ? '' : '  ' * tabs)
>      end
>  
>      # Takes an array of objects and uses the class and id of the first
> diff --git a/lib/haml/engine.rb b/lib/haml/engine.rb
> index b54fc38..97d0740 100644
> --- a/lib/haml/engine.rb
> +++ b/lib/haml/engine.rb
> @@ -45,7 +45,8 @@ module Haml
>            'redcloth' => Haml::Filters::RedCloth,
>            'textile' => Haml::Filters::Textile,
>            'markdown' => Haml::Filters::Markdown },
> -        :filename => '(haml)'
> +        :filename => '(haml)',
> +        :ugly => false
>        }
>        @options.rec_merge! options
>  
> @@ -232,7 +233,10 @@ END
>      # Returns a hash of options that Haml::Buffer cares about.
>      # This should remain loadable form #inspect.
>      def options_for_buffer
> -      {:attr_wrapper => @options[:attr_wrapper]}
> +      {
> +        :attr_wrapper => @options[:attr_wrapper],
> +        :ugly => @options[:ugly]
> +      }
>      end
>    end
>  end
> diff --git a/lib/haml/precompiler.rb b/lib/haml/precompiler.rb
> index 3625356..667adb2 100644
> --- a/lib/haml/precompiler.rb
> +++ b/lib/haml/precompiler.rb
> @@ -270,7 +270,7 @@ END
>      # Adds <tt>text</tt> to <tt>@buffer</tt> with appropriate tabulation
>      # without parsing it.
>      def push_merged_text(text, tab_change = 0, try_one_liner = false)
> -      @merged_text  << "#{'  ' * @output_tabs}#{text}"
> +      @merged_text  << @options[:ugly] ? text : "#{'  ' * 
> @output_tabs}#{text}"
>        @tab_change   += tab_change
>        @try_one_liner = try_one_liner
>      end
> @@ -299,9 +299,13 @@ END
>  
>      # Adds +text+ to <tt>@buffer</tt> while flattening text.
>      def push_flat(line)
> -      tabulation = line.spaces - @flat_spaces
> -      tabulation = tabulation > -1 ? tabulation : 0
> -      @filter_buffer << "#{' ' * tabulation}#{line.unstripped}\n"
> +      unless @options[:ugly]
> +        tabulation = line.spaces - @flat_spaces
> +        tabulation = tabulation > -1 ? tabulation : 0
> +        @filter_buffer << "#{' ' * tabulation}#{line.unstripped}\n"
> +      else
> +        @filter_buffer << "#{line.unstripped}\n"
> +      end
>      end
>  
>      # Causes <tt>text</tt> to be evaluated in the context of
> @@ -388,6 +392,8 @@ END
>  
>        if filter == Haml::Filters::Preserve
>          push_silent("_hamlout.buffer << #{filtered.dump} << \"\\n\";")
> +      elsif @options[:ugly]
> +        push_text(filtered.rstrip)
>        else
>          push_text(filtered.rstrip.gsub("\n", "\n#{'  ' * @output_tabs}"))
>        end
>   


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Haml" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at http://groups.google.com/group/haml?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to