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('<','<').gsub('>','>')
self.element_content = self.element_content.gsub(/<[\/]*\s*nowiki\s*>/,'')
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!(/[\-!\|&