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
-~----------~----~----~----~------~----~------~--~---