WYSIWYG редактор

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

WYSIWYG редактор

Сообщение alxness » 13.04.2011 16:45:52

Для большого проекта на Lazarus потребоовался визуальный редактор документов (текст и таблицы).
Ничего не нашел!?
Писать сам даже не решаюсь - пугает отрисовка таблиц (с объединенными ячейками!).
В конечном счете остановился на доработке (THTMLViewer) функцией редактирования. turbopower_ipro из стандартной палитры не подошел потому, что, по-моему, не поддерживает выравнивания по ширине.
В этой работе и прошу помощи.
Может, кто-нибудь это уже делал? Или даже сделал?

Плюс пара вопросов:
1. Будет ли HTMLViewer работать под linux?
2. Где списать готовые функции работы со стороками (посимвольный просмотр вперед-назад, проверка найденного текста на соответствие шаблону и т.п.)?
alxness
незнакомец
 
Сообщения: 4
Зарегистрирован: 13.04.2011 15:56:22

Re: WYSIWYG редактор

Сообщение vada » 13.04.2011 18:09:04

THTMLViever весьма сырой. Его еще пилить и пилить. :(

Использую его для отображения сформированного программой отчета.
Из замеченого:
- стили очень много где вообще не замечает;
- тег <p></p> похоже, совсем не знает;
- тег <br> то не видит вообще, то рядом с другими тегами что-то свое придумывает.
- <td align="center"> </td> ячейку таблицы может отцентровать, а может и нет. Кстати, align=center ; colspan=2 ; width=120 (без ковычек) не понимает почти никогда.
- картинки PNG отображает без черного цвета.
....
уйма всего.

Документ проходит валидацию, в браузерах отображается нормально, в THTMLViever вкривь-вкось.

Если возьметесь и допилите до приемлемого вида, будет здорово.
Аватара пользователя
vada
энтузиаст
 
Сообщения: 691
Зарегистрирован: 14.02.2006 13:43:17

Re: WYSIWYG редактор

Сообщение alxness » 13.04.2011 19:28:58

vada писал(а): Из замеченого:
- стили очень много где вообще не замечает;
- тег <p></p> похоже, совсем не знает;
- тег <br> то не видит вообще, то рядом с другими тегами что-то свое придумывает.
- <td align="center"> </td> ячейку таблицы может отцентровать, а может и нет. Кстати, align=center ; colspan=2 ; width=120 (без ковычек) не понимает почти никогда.

Я этих недостатков (версия THtmlPort_20110108) не заметил. Или это он в linux так работает?
Допиливать планирую только в части добавления возможностей редактора с форматированием, тегами (ссылки, закладки) и таблицами.
alxness
незнакомец
 
Сообщения: 4
Зарегистрирован: 13.04.2011 15:56:22

Re: WYSIWYG редактор

Сообщение daesher » 16.04.2011 15:31:23

Можете посмотреть мой древний, древний проект времён второго Kylixа. Не помню, по-моему до таблиц я там не добрался, рисунки точно были. Забросил ввиду тогдашней глючности lazarus'овской реализации шрифтов; в kylixе он мне не пригодился. Конечно, монстр, т.к. на каждый символ создаётся объект.
http://sourceforge.net/projects/lincmd/ ... z/download
daesher
постоялец
 
Сообщения: 221
Зарегистрирован: 09.03.2010 22:17:14

Re: WYSIWYG редактор

Сообщение alxness » 17.04.2011 09:55:48

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>


Может, есть какие-то правила на такой случай?
Заранее спасибо.
alxness
незнакомец
 
Сообщения: 4
Зарегистрирован: 13.04.2011 15:56:22

Re: WYSIWYG редактор

Сообщение Odyssey » 17.04.2011 11:35:03

Я бы предложил поэкспериментировать с другими редакторами, например:
1) OpenOffice.org/LibreOffice Writer
2) SeaMonkey Composer
и на основе их поведения попытаться выявить закономерность.
Odyssey
энтузиаст
 
Сообщения: 580
Зарегистрирован: 29.11.2007 17:32:24

Re: WYSIWYG редактор

Сообщение alxness » 28.09.2011 22:00:15

Сделал первый тест WYSIWYG редактора на основе HTMLPort (версия вроде бы 9.45).
Занимаюсь им в свободное от основной работы время, поэтому прогресс очень медленный.
Реализовано:
- набор текста (почти все клавиши)
- обработка некоторых управляющих клавиш (стрелки, backspace, delete, enter, shift+enter)
- форматирование - в зачатке (в примере только для ctrl+i)
Для моего проекта посимвольное форматирование не критично, поэтому оно пока предполагается и частично реализовано лишь для блоков (<div>, <span>, <p>) с использованием css в заголовке html (как, кстати, в oowriter).

По ссылке скомпилированный пример и исходник основного модуля. Что смог прокомментировал. Код мне самому не очень нравится, т.к. выглядит немного неоптимальным.

Я как бы намекаю, что неплохо было бы присоединиться к разработке.
alxness
незнакомец
 
Сообщения: 4
Зарегистрирован: 13.04.2011 15:56:22


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 242

Рейтинг@Mail.ru