to_html

in config/initializers/wikicloth_redos_patch.rb [182:223]


    def to_html
      if NO_NEED_TO_CLOSE.include?(self.element_name)
        return "<#{self.element_name} />" if SHORT_TAGS.include?(self.element_name)
        return "</#{self.element_name}><#{self.element_name}>" if @tag_check == self.element_name
      end

      if ESCAPED_TAGS.include?(self.element_name)
        
        self.element_content = $1 if self.element_content =~ /^\s*\n(.*)$/m
        
        self.element_content = self.element_content.gsub('<','&lt;').gsub('>','&gt;')
        
        self.element_content = self.element_content.gsub(/&lt;[\/]*\s*nowiki\s*&gt;/,'')
      end

      case self.element_name
      when "template"
        @options[:link_handler].cache({ :name => self.element_attributes["__name"], :content => self.element_content, :sha256 => self.element_attributes["__hash"] })
        return self.element_content
      when "noinclude"
        return self.in_template? ? "" : self.element_content
      when "includeonly"
        return self.in_template? ? self.element_content : ""
      when "nowiki"
        return self.element_content
      when "a"
        if /:\/\//.match?(self.element_attributes['href'])
          return @options[:link_handler].external_link(self.element_attributes['href'], self.element_content)
        elsif self.element_attributes['href'].nil? || self.element_attributes['href'] =~ /^\s*([\?\/])/
          
          return elem.tag!(self.element_name, self.element_attributes) { |x| x << self.element_content }
        end
      else
        if Extension.element_exists?(self.element_name)
          return Extension.html_elements[self.element_name][:klass].new(@options).instance_exec( self, &Extension.html_elements[self.element_name][:block] ).to_s
        end
      end

      tmp = elem.tag!(self.element_name, self.element_attributes) { |x| x << self.element_content }
      unless ALLOWED_ELEMENTS.include?(self.element_name)
        tmp.gsub!(/[\-!\|&