Я хотел бы запрограммировать WYSIWYG-редактор для HTML. Я ищу подход высокого уровня, который в конечном итоге я буду реализовывать в C ++.
Мой первоначальный подход заключается в создании иерархии классов, которые расширяют общий базовый класс (узел). Таким образом, объект "тело" будет содержать объект "р", который будет содержать объект "б", который будет содержать некоторый текст.
class node {
node *parent;
vector<node> children;
string name;
map<string,string> attributes;
string text;
virtual void render(const rect &rect, const point &offset) = 0;
virtual void onEvent(const event &e);
}
Основной движок будет вызывать что-то вроде body.render (screen, point (0, 0)), что будет рекурсивно отображать его потомков.
Курсор будет представлен указателем на иерархию объектов, и каждый узел будет иметь свое собственное внутреннее состояние курсора и будет реагировать на события клавиатуры, когда это выбранный узел.
Например, если пользователь нажимает стрелку влево и выбран узел "p", реакция узла "p" на нажатие клавиши может состоять в том, чтобы заменить текущий узел на родителя "p".
Абстрактно, кажется, это может сработать, самое близкое, что я могу найти к тому, что я ищу, это Сигил , который на первый взгляд кажется довольно пугающим для изучения (main.cpp - 70 КБ) .
Прежде чем я пошел по этому пути, мне было интересно, есть ли у кого-то более простой подход, или он может увидеть какие-либо подводные камни с помощью этого метода.