# File lib/ansi/string.rb, line 139
  def sub!(pattern, replacement=nil, &block)
    mark_changes = []
    text = @text.sub(pattern) do |s|
      index  = $~.begin(0)
      replacement = block.call(s) if block_given?
      delta  = (replacement.size - s.size)
      mark_changes << [index, delta]
      replacement
    end
    marks = @marks
    mark_changes.each do |index, delta|
      marks = shift_marks(index, delta, marks)
    end
    @text  = text
    @marks = marks
    self
  end