Задача «Строчный редактор (команда)»

Справка:

Паттерн “Команда”

Задача

Реализовать примитивный текстовый редактор, способный производить ряд операций над одной строкой, с использование шаблона проектирования “Команда”

Тесктовый редактор работает с двумя текстовыми файлами. В первом находится строка, над которой он проводит все операции. Во втором - пследовательность комманд, которые нужно выполнить. Необходимо реализовать поддержку следующих комманд:

  1. copy idx1 idx2 - скопировать в буффер обмена символы с позиции idx1 до позиции idx2
  2. paste idx - вставить содержимое буффера обмена в позицию idx
  3. insert “string” idx - вставить строку “string” в позицию idx
  4. delete idx1 idx2 - удалить все символы с позиции idx1 до позиции idx2
  5. undo - отменить предыдущую команду
  6. redo - выполнить отмененную команду заново

Пример тесктового файла комманд:

copy 1, 3
insert "hello", 1
paste 6
undo
redo
delete 2, 7
undo
undo
redo
redo

Необходимо:

  1. Реализовать систему классов, необходимую для патерна “Команда”: общий интерфейс комманд + классы для каждой из комманд
  2. Реализовать класс текстового процессора, хранящий строку и способный выполнять все необходимые операции над ней
  3. Реализовать класс-парсер, считывающий последовательность комманд из файла и интерпретирующий их
  4. Реализовать класс, выполняющий последовательность комманд (полученных от парсера) и реализующий механизм undo/redo