class RDoc::Comment

def == other # :nodoc:

:nodoc:
def == other # :nodoc:
  self.class === other and
    other.text == @text and other.location == @location
end

def empty?

def empty?
  @text.empty?
end

def encode! encoding

def encode! encoding
  # TODO: Remove this condition after Ruby 2.2 EOL
  if RUBY_VERSION < '2.3.0'
    @text = @text.force_encoding encoding
  else
    @text = String.new @text, encoding: encoding
  end
  self
end

def extract_call_seq method

def extract_call_seq method
  # we must handle situations like the above followed by an unindented first
  # comment.  The difficulty is to make sure not to match lines starting
  # with ARGF at the same indent, but that are after the first description
  # paragraph.
  if @text =~ /^\s*:?call-seq:(.*?(?:\S).*?)^\s*$/m then
    all_start, all_stop = $~.offset(0)
    seq_start, seq_stop = $~.offset(1)
    # we get the following lines that start with the leading word at the
    # same indent, even if they have blank lines before
    if $1 =~ /(^\s*\n)+^(\s*\w+)/m then
      leading = $2 # ' *    ARGF' in the example above
      re = %r%
        \A(
           (^\s*\n)+
           (^#{Regexp.escape leading}.*?\n)+
          )+
        ^\s*$
      %xm
      if @text[seq_stop..-1] =~ re then
        all_stop = seq_stop + $~.offset(0).last
        seq_stop = seq_stop + $~.offset(1).last
      end
    end
    seq = @text[seq_start..seq_stop]
    seq.gsub!(/^\s*(\S|\n)/m, '\1')
    @text.slice! all_start...all_stop
    method.call_seq = seq.chomp
  else
    regexp = /^\s*:?call-seq:(.*?)(^\s*$|\z)/m
    if regexp =~ @text then
      @text = @text.sub(regexp, '')
      seq = $1
      seq.gsub!(/^\s*/, '')
      method.call_seq = seq
    end
  end
  method
end

def format= format

def format= format
  @format = format
  @document = nil
end

def initialize text = nil, location = nil

def initialize text = nil, location = nil
  @location = location
  @text     = text.nil? ? nil : text.dup
  @document   = nil
  @format     = 'rdoc'
  @normalized = false
end

def initialize_copy copy # :nodoc:

:nodoc:
def initialize_copy copy # :nodoc:
  @text = copy.text.dup
end

def inspect # :nodoc:

:nodoc:
def inspect # :nodoc:
  location = @location ? @location.relative_name : '(unknown)'
  "#<%s:%x %s %p>" % [self.class, object_id, location, @text]
end

def normalize

def normalize
  return self unless @text
  return self if @normalized # TODO eliminate duplicate normalization
  @text = normalize_comment @text
  @normalized = true
  self
end

def normalized? # :nodoc:

:nodoc:
def normalized? # :nodoc:
  @normalized
end

def parse

def parse
  return @document if @document
  @document = super @text, @format
  @document.file = @location
  @document
end

def remove_private

def remove_private
  # Workaround for gsub encoding for Ruby 1.9.2 and earlier
  empty = ''
  empty = RDoc::Encoding.change_encoding empty, @text.encoding
  @text = @text.gsub(%r%^\s*([#*]?)--.*?^\s*(\1)\+\+\n?%m, empty)
  @text = @text.sub(%r%^\s*[#*]?--.*%m, '')
end

def text= text

def text= text
  raise RDoc::Error, 'replacing document-only comment is not allowed' if
    @text.nil? and @document
  @document = nil
  @text = text.nil? ? nil : text.dup
end

def tomdoc?

def tomdoc?
  @format == 'tomdoc'
end