def html_tag(sym, *args, &block)
      if @auto_validation && @tagset.self_closing.include?(sym) && block
        raise InvalidXhtmlError, "the `#{sym}' element is self-closing, please remove the block"
      elsif args.empty? && !block
        CssProxy.new(self, @streams.last, sym)
      else
        tag!(sym, *args, &block)
      end
    end
def html_tag(sym, *args, &block)
      if @auto_validation && @tagset.self_closing.include?(sym) && block
        raise InvalidXhtmlError, "the `#{sym}' element is self-closing, please remove the block"
      elsif args.empty? && !block
        CssProxy.new(self, @streams.last, sym)
      else
        tag!(sym, *args, &block)
      end
    end
Every HTML tag method goes through an html_tag call.  So, calling <tt>div</tt> is equivalent
 to calling <tt>html_tag(:div)</tt>.  All HTML tags in Markaby's list are given generated wrappers
 for this method.

 If the @auto_validation setting is on, this method will check for many common mistakes which
 could lead to invalid XHTML.