Ядро WYSIWYG редактора
От: x-code  
Дата: 25.03.15 12:53
Оценка:
Вопрос про WYSIWYG редакторы с открытыми исходниками.

На самом деле их много, но все они так или иначе опираются на одно из трех "ядер"
— компонент windows rtf (не кроссплатформенный!)
— компонент internet explorer editing mode (тоже не кроссплатформенный)
— qt webkit editing mode (кроссплатформенный)

Но недостаток всех трех — в том, что у них там внутренняя закрытая структура объектной модели документа и слишком много возможностей.
и, как следствие — многие простые вещи приходится делать сложными путями, и во избежание неправильной работы закрывать многие возможности (например обычный copy-paste с web-страницы может вставить в документ что-то такое, что недопустимо по логике приложения, использующего компонент).

А нужно бы что-то совсем простое и не связанное с существующими форматами rtf и html. То есть некое минималистичное WYSIWYG-ядро, написанное с нуля и НЕ ИСПОЛЬЗУЮЩЕЕ никаких готовых решений, кроме функций GDI (идеально чтобы это было на Qt или другой кроссплатформенной библиотеке)

Вот как я это вижу.
У компонента есть понятие "стили", и только за счет этих стилей достигается "визуальность". Перед началом работы я создаю объекты "стили" и загружаю их в компонент. далее любому фрагменту текста можно назначить любой из стилей. То есть даже никаких встроенных bold/italic, только через стили. "Стиль" — это структура, имеющая имя и набор атрибутов, определяющих, как именно будет отрисовываться та или иная нода (условно — фрагмент текста внутри абзаца, абзац в целом, ячейка таблицы и т.д.). Там задается (или не задается — тогда используется атрибут верхнего уровня) шрифт, цвет текста и фона, размер, bold/italic/underline и т.д. Когда ни одного стиля нет — это работает как обычный текстовый редактор notepad.

То есть компонент должен быть более низкоуровенвый, чем rtf или html редактор (которые ориентированы на конкретные языки разметки, а не просто на абстрактное редактирование WYSIWYG-текста, созданного программно через соответствующее api).

Формат хранения на диске тоже необязателен (хотя если будет какой-нибудь markdown или bbcode — ну и пусть будет, главное чтобы была возможность от него отвязаться).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.