WYSIWYG редактор
Модератор: Модераторы
WYSIWYG редактор
Для большого проекта на Lazarus потребоовался визуальный редактор документов (текст и таблицы).
Ничего не нашел!?
Писать сам даже не решаюсь - пугает отрисовка таблиц (с объединенными ячейками!).
В конечном счете остановился на доработке (THTMLViewer) функцией редактирования. turbopower_ipro из стандартной палитры не подошел потому, что, по-моему, не поддерживает выравнивания по ширине.
В этой работе и прошу помощи.
Может, кто-нибудь это уже делал? Или даже сделал?
Плюс пара вопросов:
1. Будет ли HTMLViewer работать под linux?
2. Где списать готовые функции работы со стороками (посимвольный просмотр вперед-назад, проверка найденного текста на соответствие шаблону и т.п.)?
Ничего не нашел!?
Писать сам даже не решаюсь - пугает отрисовка таблиц (с объединенными ячейками!).
В конечном счете остановился на доработке (THTMLViewer) функцией редактирования. turbopower_ipro из стандартной палитры не подошел потому, что, по-моему, не поддерживает выравнивания по ширине.
В этой работе и прошу помощи.
Может, кто-нибудь это уже делал? Или даже сделал?
Плюс пара вопросов:
1. Будет ли HTMLViewer работать под linux?
2. Где списать готовые функции работы со стороками (посимвольный просмотр вперед-назад, проверка найденного текста на соответствие шаблону и т.п.)?
THTMLViever весьма сырой. Его еще пилить и пилить. 
Использую его для отображения сформированного программой отчета.
Из замеченого:
- стили очень много где вообще не замечает;
- тег <p></p> похоже, совсем не знает;
- тег <br> то не видит вообще, то рядом с другими тегами что-то свое придумывает.
- <td align="center"> </td> ячейку таблицы может отцентровать, а может и нет. Кстати, align=center ; colspan=2 ; width=120 (без ковычек) не понимает почти никогда.
- картинки PNG отображает без черного цвета.
....
уйма всего.
Документ проходит валидацию, в браузерах отображается нормально, в THTMLViever вкривь-вкось.
Если возьметесь и допилите до приемлемого вида, будет здорово.
Использую его для отображения сформированного программой отчета.
Из замеченого:
- стили очень много где вообще не замечает;
- тег <p></p> похоже, совсем не знает;
- тег <br> то не видит вообще, то рядом с другими тегами что-то свое придумывает.
- <td align="center"> </td> ячейку таблицы может отцентровать, а может и нет. Кстати, align=center ; colspan=2 ; width=120 (без ковычек) не понимает почти никогда.
- картинки PNG отображает без черного цвета.
....
уйма всего.
Документ проходит валидацию, в браузерах отображается нормально, в THTMLViever вкривь-вкось.
Если возьметесь и допилите до приемлемого вида, будет здорово.
vada писал(а): Из замеченого:
- стили очень много где вообще не замечает;
- тег <p></p> похоже, совсем не знает;
- тег <br> то не видит вообще, то рядом с другими тегами что-то свое придумывает.
- <td align="center"> </td> ячейку таблицы может отцентровать, а может и нет. Кстати, align=center ; colspan=2 ; width=120 (без ковычек) не понимает почти никогда.
Я этих недостатков (версия THtmlPort_20110108) не заметил. Или это он в linux так работает?
Допиливать планирую только в части добавления возможностей редактора с форматированием, тегами (ссылки, закладки) и таблицами.
Можете посмотреть мой древний, древний проект времён второго Kylixа. Не помню, по-моему до таблиц я там не добрался, рисунки точно были. Забросил ввиду тогдашней глючности lazarus'овской реализации шрифтов; в kylixе он мне не пригодился. Конечно, монстр, т.к. на каждый символ создаётся объект.
http://sourceforge.net/projects/lincmd/ ... z/download
http://sourceforge.net/projects/lincmd/ ... z/download
daesher писал(а):Можете посмотреть мой древний, древний проект
Посмотрел. Как бы спасибо, конечно, но я ограничен во времени разработки (осталось чуть больше 2 месяцев), поэтому предпочту допилить решение с уже готовой отрисовкой (htmlport), добавив к нему функции редактирования.
Тем временем возник новый вопрос, вернее даже не вопрос - просто не могу определиться. Внимательно отнесусь к предложениям (советам).
Дело в следующем.
При удалении текста (backspace или delete) рано или поздно курсор (каретка) подходит к концу (или началу абзаца).
В такой ситуации мой редактор поступает следующим образом:
backspace (каретка подошла к началу абзаца): удаляется тег начала текущего абзаца и завершающий тег предыдущего абзаца, оба абзаца объединяются.
delete (каретка подошла к закрывающему тегу абзаца): удаляется завершающий тег текущего абзаца и начальный тег следующего. Абзацы тоже объединяются.
Здесь все ясно - описание дал для общего понимания ситуации.
Но в какой-то момент случается, что каретка подошла не к тегу абзаца, а, например, к <div> или <span> или еще к какому-нибудь... Например:
Код: Выделить всё
<p>Текст абзаца 1</p><div>Текст div</div> <p>[здесь находится каретка] текст абзаца 2</p>Как, вы считаете, должен повести себя редактор в такой ситуации при нажатии backspace?
- объединить текст абзаца 2 с текстом в div и поместить объединенный текст в div?
Код: Выделить всё
<p>Текст абзаца 1</p><div>Текст div[здесь находится каретка] текст абзаца 2</div> - то же самое, но включить объединенный текст в абзац 2 (div удалить)?
Код: Выделить всё
<p>Текст абзаца 1</p><p>Текст div[здесь находится каретка]текст абзаца 2</p>- оставить блоки как есть и удалить последний символ в div?
Код: Выделить всё
<p>Текст абзаца 1</p><div>Текст di[здесь находится каретка]</div> <p> текст абзаца 2</p>- объединить абзац 1 и абзац 2 в абзац 1, а div оставить внутри абзаца 1?
Код: Выделить всё
<p>Текст абзаца 1 [здесь находится каретка]<div>Текст div </div> текст абзаца 2</p>Второй день не могу разобраться, какой вариант предпочтительный (правильный).
Как вообще должен себя вести редактор при нажатии backspace или delete на границе разных тегов html?
Добавлено спустя 19 минут 24 секунды:
P.S. Примеры.
Что должен сделать редактор при нажатии backspace в следующих ситуациях (полодение каретки отмечено ▌)
Код: Выделить всё
<span name="s1">
<p name="p1">абзац 1</p>
</span>
<span name="s1">
<p name="p2">▌Абзац 2</p>
</span>Код: Выделить всё
<span name="s1">
<p name="p1">абзац 1</p>
</span>
<p name="p2"><span name="s1">Текст</span>▌Абзац 2</p>
Код: Выделить всё
<div name="s1">
<p name="p1">абзац 1</p>
</div>
<div name="s1">
<p name="p2">▌Абзац 2</p>
</div>Код: Выделить всё
<p name="p1">абзац 1</p>
<div name="s1">Текст</div>
<div name="s1">
<p name="p2">▌Абзац 2</p>
</div>Может, есть какие-то правила на такой случай?
Заранее спасибо.
Я бы предложил поэкспериментировать с другими редакторами, например:
1) OpenOffice.org/LibreOffice Writer
2) SeaMonkey Composer
и на основе их поведения попытаться выявить закономерность.
1) OpenOffice.org/LibreOffice Writer
2) SeaMonkey Composer
и на основе их поведения попытаться выявить закономерность.
Сделал первый тест WYSIWYG редактора на основе HTMLPort (версия вроде бы 9.45).
Занимаюсь им в свободное от основной работы время, поэтому прогресс очень медленный.
Реализовано:
- набор текста (почти все клавиши)
- обработка некоторых управляющих клавиш (стрелки, backspace, delete, enter, shift+enter)
- форматирование - в зачатке (в примере только для ctrl+i)
Для моего проекта посимвольное форматирование не критично, поэтому оно пока предполагается и частично реализовано лишь для блоков (<div>, <span>, <p>) с использованием css в заголовке html (как, кстати, в oowriter).
По ссылке скомпилированный пример и исходник основного модуля. Что смог прокомментировал. Код мне самому не очень нравится, т.к. выглядит немного неоптимальным.
Я как бы намекаю, что неплохо было бы присоединиться к разработке.
Занимаюсь им в свободное от основной работы время, поэтому прогресс очень медленный.
Реализовано:
- набор текста (почти все клавиши)
- обработка некоторых управляющих клавиш (стрелки, backspace, delete, enter, shift+enter)
- форматирование - в зачатке (в примере только для ctrl+i)
Для моего проекта посимвольное форматирование не критично, поэтому оно пока предполагается и частично реализовано лишь для блоков (<div>, <span>, <p>) с использованием css в заголовке html (как, кстати, в oowriter).
По ссылке скомпилированный пример и исходник основного модуля. Что смог прокомментировал. Код мне самому не очень нравится, т.к. выглядит немного неоптимальным.
Я как бы намекаю, что неплохо было бы присоединиться к разработке.
