# File raggle, line 913
      def render
        @lines = []
        @context = []
        
        Parser::each_token(@source) do |token, data, attributes|
        #puts "C: #{@context[-1]} T: #{token} D: <#{data}> L: #{@lines.inspect}"
        case token
        when :TEXT
          if @context[-1] == :in_pre
            tmp = data.split("\n", -1)
            if @lines[-1]
              @lines[-1] << tmp.shift
            end
            @lines += tmp
          else
            reflow_text(data)
          end
        when :START_TAG
          @current_attributes = attributes
          tag = TAG_SET[data]
          next unless tag
          context_enter(@context, tag)
          call_actions(tag, :start)
        when :END_TAG
          tag = TAG_SET[data]
          next unless tag
          context_exit(@context, tag)
          call_actions(tag, :end)
        end
        end

        # trim trailine new lines
        until @lines[-1] != ''
          @lines.delete_at(@lines.size - 1)
        end

        # If there are links, insert them here
        unless @links.empty?
          @lines << ''
          @lines << $config['msg_links']
          padding = @links.size / 10 + 1
          @links.each_with_index do |link, index|
            @lines << "%#{padding}d. %s" % [index + 1, link]
          end
        end

        # If there are images, insert references
        unless @images.empty?
          @lines << ''
          @lines << $config['msg_images']
          padding = @images.size / 10 + 1
          @images.each_with_index do |image,index|
            @lines << "%#{padding}d. %s" % [index + 1,image]
          end
        end

        rendered_text = @lines.join("\n") + "\n"
        $config['unescape_html'] ? rendered_text.unescape_html : rendered_text
      end