class Temple::HTML::Pretty

@api public

def call(exp)

def call(exp)
  @pretty ? [:multi, preamble, compile(exp)] : super
end

def indent

Return indentation if not in pre tag
def indent
  "\n" + (options[:indent] || '') * @indent
end

def initialize(opts = {})

def initialize(opts = {})
  super
  @last = :noindent
  @indent = 0
  @pretty = options[:pretty]
  @pre_tags = Regexp.new(options[:pre_tags].map {|t| "<#{t}" }.join('|'))
end

def on_dynamic(code)

def on_dynamic(code)
  if @pretty
    @last = :noindent
    tmp = unique_name
    gsub_code = if ''.respond_to?(:html_safe?)
                  "#{tmp} = #{tmp}.html_safe? ? #{tmp}.gsub(\"\\n\", #{indent.inspect}).html_safe : #{tmp}.gsub(\"\\n\", #{indent.inspect})"
                else
                  "#{tmp} = #{tmp}.gsub(\"\\n\", #{indent.inspect})"
                end
    [:multi,
     [:code, "#{tmp} = (#{code}).to_s"],
     [:code, "if #{@pre_tags_name} !~ #{tmp}; #{gsub_code}; end"],
     [:dynamic, tmp]]
  else
    [:dynamic, code]
  end
end

def on_html_comment(content)

def on_html_comment(content)
  return super unless @pretty
  result = [:multi, [:static, tag_indent(nil)], super]
  @last = nil
  result
end

def on_html_doctype(type)

def on_html_doctype(type)
  @last = nil
  super
end

def on_html_tag(name, attrs, content = nil)

def on_html_tag(name, attrs, content = nil)
  return super unless @pretty
  name = name.to_s
  closed = !content || (empty_exp?(content) && options[:autoclose].include?(name))
  @pretty = false
  result = [:multi, [:static, "#{tag_indent(name)}<#{name}"], compile(attrs)]
  result << [:static, (closed && xhtml? ? ' /' : '') + '>']
  @pretty = !options[:pre_tags].include?(name)
  if content
    @indent += 1
    result << compile(content)
    @indent -= 1
  end
  result << [:static, "#{content && !empty_exp?(content) ? tag_indent(name) : ''}</#{name}>"] unless closed
  @pretty = true
  result
end

def on_static(content)

def on_static(content)
  if @pretty
    content = content.gsub("\n", indent) if @pre_tags !~ content
    @last = content.sub!(/\r?\n\s*$/, ' ') ? nil : :noindent
  end
  [:static, content]
end

def preamble

def preamble
  @pre_tags_name = unique_name
  [:code, "#{@pre_tags_name} = /#{@pre_tags.source}/"]
end

def tag_indent(name)

Return indentation before tag
def tag_indent(name)
  result = @last != :noindent && (options[:indent_tags].include?(@last) || options[:indent_tags].include?(name)) ? indent : ''
  @last = name
  result
end