class Temple::HTML::Fast

def html4?

def html4?
  options[:format] == :html4
end

def html5?

def html5?
  options[:format] == :html5
end

def html?

def html?
  html5? or html4?
end

def initialize(options = {})

def initialize(options = {})
  super
  unless [:xhtml, :html4, :html5].include?(@options[:format])
    raise "Invalid format #{@options[:format].inspect}"
  end
end

def on_html_comment(content)

def on_html_comment(content)
  [:multi,
    [:static, '<!--'],
    compile!(content),
    [:static, '-->']]
end

def on_html_doctype(type)

def on_html_doctype(type)
  trailing_newlines = type[/(\A|[^\r])(\n+)\Z/, 2].to_s
  text = type.downcase.strip
  if text =~ /^xml/
    raise 'Invalid xml directive in html mode' if html?
    wrapper = options[:attr_wrapper]
    str = "<?xml version=#{wrapper}1.0#{wrapper} encoding=#{wrapper}#{text.split(' ')[1] || "utf-8"}#{wrapper} ?>"
  else
    case options[:format]
    when :html5
      str = '<!DOCTYPE html>'
    when :html4
      str = HTML4_DOCTYPES[text] || HTML4_DOCTYPES['transitional']
    when :xhtml
      str = XHTML_DOCTYPES[text] || XHTML_DOCTYPES['transitional']
    end
  end
  str << trailing_newlines
  [:static, str]
end

def on_html_staticattrs(*attrs)

def on_html_staticattrs(*attrs)
  result = {}
  attrs.each do |name, value|
    if result[name] && %w(class id).include?(name)
      raise 'Multiple id attributes specified, but id concatenation disabled' if name == 'id' && !options[:id_delimiter]
      result[name] = [:multi,
                      result[name],
                      [:static, (name == 'class' ? ' ' : options[:id_delimiter])],
                      value]
    else
      result[name] = value
    end
  end
  result.sort.inject([:multi]) do |list, (name, value)|
    list << [:multi,
             [:static, ' '],
             [:static, name],
             [:static, '='],
             [:static, options[:attr_wrapper]],
             value,
             [:static, options[:attr_wrapper]]]
  end
end

def on_html_tag(name, attrs, closed, content)

def on_html_tag(name, attrs, closed, content)
  closed ||= options[:autoclose].include?(name)
  raise "Closed tag #{name} has content" if closed && !empty_exp?(content)
  result = [:multi, [:static, "<#{name}"], compile!(attrs)]
  result << [:static, ' /'] if closed && xhtml?
  result << [:static, '>'] << compile!(content)
  result << [:static, "</#{name}>"] if !closed
  result
end

def xhtml?

def xhtml?
  options[:format] == :xhtml
end