# File lib/ansi/string.rb, line 98
  def slice(*args)
    if args.size == 2
      index, len = *args
      endex  = index+len
      new_text  = text[index, len]
      new_marks = []
      marks.each do |(i, v)|
        new_marks << [i, v] if i >= index && i < endex
      end
      self.class.new(new_text, new_marks)
    elsif args.size == 1
      rng = args.first
      case rng
      when Range
        index, endex = rng.begin, rng.end
        new_text  = text[rng]
        new_marks = []
        marks.each do |(i, v)|
          new_marks << [i, v] if i >= index && i < endex
        end
        self.class.new(new_text, new_marks)
      else
        nm = marks.select do |(i, v)|
          #marks[0] == rng or ( marks[0] == rng + 1 && [:clear, :reset].include?(marks[1]) )
          i == rng or ( i == rng + 1 && [:clear, :reset].include?(v) )
        end
        self.class.new(text[rng,1], nm)
      end
    else
      raise ArgumentError
    end
  end