Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > SynUniHighlighter и SynEdit > Свежие баги и пожелания


Автор: CyberManiac 24.10.2005, 19:16
С ходу нашел в альфе 2.0 следующее:

1. С трудом собирается с SynEdit 2.02b с офсайта - пришлось руками вырезать IFDEF'нутые блоки, отвечающие за схлопывание блоков. Если где-то в недрах есть соответствующий DEFINE, то есть смысл вынести его в свойства проекта - его оттуда удалить будет проще. Модифицированный компонент ставить не тянет, т.к. он не поддерживается разработчиками SynEdit со всеми вытекающими, а схлопывание блоков мне ни к чему. Если есть более прямой способ сборки, хорошо бы положить в комплект Readme.txt, как это сделать. И заодно туда же прописать, что для сборки нужны инет-компоненты.
2. Тулза для редактирования описаний синтаксиса злобно глючит: вываливает 2-3 access violation по адресу 00000000 при запуске и еще по столько же при каждом переключении на другую задачу и обратно по Alt-Tab. Скорее всего, какая-то муть затесалась в OnShow.
3. Та же тулза при попытке удалить Range сообщает об исключении, при попытке закрыть окно с исключением выдает следующее такое же и так до тех пор, пока не будет убит процесс. Последние два глюка совершенно не зависят от того, каким способом собирался редактор подсветок: вручную или запущен заранее скомпилированный из архива.
4. А нужен ли вообще VirtualTreeView? Возни с его установкой много, а пользы в сравнении со стандартным - мало.
5. Однако, примеров надо. Без них половину возможностей компонента можно вооще не увидеть и не понять. И желательно примеры в виде практических шаблонов: как подсвечивать обычные числа, как - шестнадцатиричные, как - строки ну и т.д.

Автор: Vitalik 25.10.2005, 00:34
Цитата(CyberManiac @ 24.10.2005, 19:16)
1. С трудом собирается с SynEdit 2.02b с офсайта - пришлось руками вырезать IFDEF'нутые блоки, отвечающие за схлопывание блоков.

Ответ http://www.unihighlighter.com/index.php?showpage=install&lang=ru:
Цитата(http)
Если вы не используете SynEdit из MyStix (который с поддержкой CodeFolding), то нужно закоментировать директиву {$DEFINE CODEFOLDING} в файле SynUniHighlighter.inc


Цитата(CyberManiac @ 24.10.2005, 19:16)
Если где-то в недрах есть соответствующий DEFINE, то есть смысл вынести его в свойства проекта - его оттуда удалить будет проще.

Подробнее, пожалуйста smile

Цитата(CyberManiac @ 24.10.2005, 19:16)
Модифицированный компонент ставить не тянет, т.к. он не поддерживается разработчиками SynEdit со всеми вытекающими

Ну это не совсем так smile
Разработчик CodeFolding'а (свёртывания кода) - один из разработчиков SynEdit'а. А сам CodeFolding появится в основных версиях SynEdit'а, когда станет безглючно работать smile

Цитата(CyberManiac @ 24.10.2005, 19:16)
Если есть более прямой способ сборки, хорошо бы положить в комплект Readme.txt, как это сделать.

Согласен. Тут осечка вышла...
Но особенности инсталляции я описал на сайте компонента: http://www.unihighlighter.com/index.php?showpage=install&lang=ru
В следующей версии обязательно включим это readme.txt smile

Цитата(CyberManiac @ 24.10.2005, 19:16)
И заодно туда же прописать, что для сборки нужны инет-компоненты.

Только VirtualTreeView для дизайнера smile

Цитата(CyberManiac @ 24.10.2005, 19:16)
2. Тулза для редактирования описаний синтаксиса злобно глючит: вываливает 2-3 access violation по адресу 00000000 при запуске и еще по столько же при каждом переключении на другую задачу и обратно по Alt-Tab. Скорее всего, какая-то муть затесалась в OnShow.
3. Та же тулза при попытке удалить Range сообщает об исключении, при попытке закрыть окно с исключением выдает следующее такое же и так до тех пор, пока не будет убит процесс. Последние два глюка совершенно не зависят от того, каким способом собирался редактор подсветок: вручную или запущен заранее скомпилированный из архива.

Гм... Будем разбираться...
На каких подсветках проявлялся такой глюк?..

Цитата(CyberManiac @ 24.10.2005, 19:16)
4. А нужен ли вообще VirtualTreeView? Возни с его установкой много, а пользы в сравнении со стандартным - мало.

Тут я с тобой согласен smile
У нас с Quadr0 возникло небольшое разногласие по поводу использования этого компонента в дизайнере...
С одной стороны, компонент очень мощный, обеспечивает дополнительные возможности, с ним легче и удобнее работать.
С другой стороны, он всё-таки нестандартный, большинство его возможностей не используется и размер exe зря увеличивается.
И действительно самым большим минусов является то, что с ним приходится дополнительно возиться...
Как вариант мирного решения данного разногласия - фреймовая структура дизайнера с возможностью быстрой замены небольшой составляющей дизайнера - фрейма (например, панели с TreeView на VirtualTreeView) с сохранением всей логической структуры и реализации дизайнера smile Но об этом нужно поговорить отдельно...

Цитата(CyberManiac @ 24.10.2005, 19:16)
5. Однако, примеров надо. Без них половину возможностей компонента можно вооще не увидеть и не понять. И желательно примеры в виде практических шаблонов: как подсвечивать обычные числа, как - шестнадцатиричные, как - строки ну и т.д.

Основные возможности можно почитать на сайте компонента, здесь: http://www.unihighlighter.com/index.php?showpage=synrools&lang=ru
Пример подсветки включающей все описанные возможности можно найти там же или скачать напрямую: http://www.unihighlighter.com/files/highlighters/Readme.hgl
И описание, и подсветка приведены для версии 1.8, но с успехом могут использоваться и для версии 2.0a. В последней разве что добавлены мультитеги.

CyberManiac, большое спасибо за первый отзыв о нашей альфе! smile

Автор: Paul S. 25.10.2005, 18:08
Здравствуйте. Заметил интересный глюк с обычным TSynEdit и UniHighlighter 2.0a. Имеем на форме - синэдит, хайлайтер, SynEdit.Highlighter = UniHighlighter. WordWrap = True. Жмем F9, вставляем в синэдит по ctrl+v текст (желательно войну мир или иже с ними - где куча переносов строк), или загружаем - видим глючной вордврап (переносы посреди слов и тд). Копаемся в исходниках синэдита, видим такой интересный код:

Код
procedure TCustomSynEdit.Resize;
begin
  inherited Resize;
  SizeOrFontChanged(FALSE);
end;


В проекте делаем все тоже самое - ресайзим форму (ака синэдит) - ворд врап в норме. Убираем у синэдита хайлайтер - запускаем, опять же проделываем все тоже самое (вставка, загрузка текста) - все ок. Вывод - глючит хайлайтер.

P.S: Извиняюсь что не пошел далее, времени нету отлавливать.
P.S: Сори, мой идиотский стиль транслитерации.

Автор: Vitalik 25.10.2005, 23:20
Paul S., в чём именно проявляются глюки WordWrap?
Какая версия SynEdit используется, какие подсветки загружаются в UniHighlighter?

У меня всё работает как часы...
Если не сложно выложи где-нибудь или прикрепи здесь скриншот с глюком http://forum.sources.ru/smiles/Main/wink.gif

Спасибо! smile

Автор: Paul S. 26.10.2005, 00:55
Мое почтение smile

Файлы доступны до 2 ноября. При загрузке текста, окно не трогаем - http://webfile.ru/594813. После ресайза окна - http://webfile.ru/594815. Вроде глюк налицо, особенно бросается перенос слова "кораблях" smile . Версия SynEdit - 2.02b. Никакие подсветки не загружаются.

Автор: CyberManiac 26.10.2005, 08:45
Цитата(Vitalik @ 25.10.2005, 00:34)
Подробнее, пожалуйста

Project|Options...|Directories/Conditionals, в поле "Conditional defines" можно вписать все нужные DEFINE, причем они будут видимы глобально в рамках всего проекта - так ими удобней манипулировать, чем в исходных текстах. Эта же вкладка открывается кнопкой Options после открытия .dpk-файлов при сборке компонента на основе dpk.

Цитата(Vitalik @ 25.10.2005, 00:34)
Гм... Будем разбираться...
На каких подсветках проявлялся такой глюк?..

Он не на подсветках проявляется, он проявляется в дизайнере сразу же при запуске, когда ни одной подсветки даже не загружено. То же самое и с удалением Range'й - какую бы подсветку я ни создал, при удалении из нее хоть одного Range вываливается исключение.

Автор: Vitalik 26.10.2005, 17:16
Цитата(CyberManiac @ 26.10.2005, 08:45)
Project|Options...|Directories/Conditionals, в поле "Conditional defines" можно вписать все нужные DEFINE, причем они будут видимы глобально в рамках всего проекта - так ими удобней манипулировать, чем в исходных текстах. Эта же вкладка открывается кнопкой Options после открытия .dpk-файлов при сборке компонента на основе dpk.

Прикольная вещь! Не знал smile
Но, наверное, в данном случае немного не подходит... Ведь добавив таким образом DEFINE в dpk-пакет мы заданим его только при установке. Т.о. если нужно будет поменять значение этой опции, то нужно будет рекомпилить пакет...
Так же небольшим неудобством является то, что оно пихает эту директиву в dof-файл...
Ну и, наконец, на самом деле эта опция должна юзаться и во всех демках, чтобы демки могли компилиться на разных вариантах сборки SynEdit+SynUni.
В этом смысле использование одного файла с предопределёнными Define'ами получается очень удобным ;)

Цитата(CyberManiac @ 26.10.2005, 08:45)
То же самое и с удалением Range'й - какую бы подсветку я ни создал, при удалении из нее хоть одного Range вываливается исключение.

И действительно... Когда же этот баг успел появиться... smile


Автор: CyberManiac 26.10.2005, 19:00
История с Access violation получила продолжение: попробовал запустить дизайнер на домашней машине с WinXP - все работало корректно. Более того, с удивлением обнаружил, что при запуске по умолчанию создается пустая подсвется с двумя элементами в TreeView (на 2000 при запуске TreeView был абсолютно пуст). Не поленился перегрузиться в Win98 - оба глюка вернулись, в TreeView - пустота, кроме того, изменился внешний вид дизайнера: исчезла градиентная закраска (в Win2000 ее тоже не было). В общем, советую протестировать дизайнер в Win2000 или 98 - все, о чем я пишу, сразу и вылезет.

Автор: Quadr0 30.10.2005, 12:39
...

Автор: Paul S. 30.10.2005, 13:55
А как же я? smile

Автор: Quadr0 30.10.2005, 16:45
...

Автор: Paul S. 30.10.2005, 23:31
Цитата(Quadr0 @ 30.10.2005, 16:45)
Paul S., а как это может быть из-за нашего компонента? SynUni - наследник TCustomHighlighter и не более. Раз уж на то пошло, то глючить должны все подсветки, а не наша одна. Проверь на других плиз. smile
P.s.
Это ты в Пиратов Карибского моря играешь? Молодца, хорошая гама smile

Здравствуйте smile

Уже думал об этом, что по идее должны все подсветки глючить. Ок. Взял подсветку html, присвоил - глюка не обнаружено. Придется копнуть еще глубже, по мере возможности постараюсь сообщать о результатах раскопок.

С уважением smile

Автор: markowww 12.11.2005, 14:21
Я не обнаружил во второй альфе возможность подсветки ключевых слов с учетом регистра.
Помнится в 1.8 такая возможность была.

Автор: Vitalik 14.11.2005, 15:38
markowww, на сколько мне известно, эта возможность осталась.
"Case sensitive" у правила-диапазона (Range) задаёт режим учёта регистра для всех подправил.

Возможно было бы интересно сделать возможность задания "Case sensitive" для каждого списка ключевых слов в отдельности?..
smile

Автор: markowww 15.11.2005, 14:19
Цитата(Vitalik)
markowww, на сколько мне известно, эта возможность осталась.
"Case sensitive" у правила-диапазона (Range) задаёт режим учёта регистра для всех подправил.


Хм. Мне нужно чтобы во всем тексте слово, к примеру, BEGIN подсвечивалось, а begin - нет. С возможностью Case Sensitive для отдельного списка это легко ;) А вот с Range как такое сделать, что-то я не понимаю.

Цитата(Vitalik)
Возможно было бы интересно сделать возможность задания "Case sensitive" для каждого списка ключевых слов в отдельности?..


Я конечно не совсем уверен (а проверять слишком долго smile ), что в 1.8 было что-то такое. По крайней мере, мой старый проект, написанный с использованием, 1.8 справлялся с поставленной задачей только за счет Keyword List.

И извиняюсь, что в одном посте: при использовании Сopy/Paste на узлах дерева в дизайнере возникает Access Violation.

Автор: Vitalik 15.11.2005, 22:32
Цитата(markowww @ 15.11.2005, 14:19)
Хм. Мне нужно чтобы во всем тексте слово, к примеру, BEGIN подсвечивалось, а begin - нет. С возможностью Case Sensitive для отдельного списка это легко ;) А вот с Range как такое сделать, что-то я не понимаю.

Просто у корневого "диапазона" (Root) есть такое же свойство smile
В новой версии это называется 'Syntax Coloring'.
Устанавливаешь у него 'Case sensitive' и всё будет как надо smile

Цитата(markowww @ 15.11.2005, 14:19)
при использовании Сopy/Paste на узлах дерева в дизайнере возникает Access Violation.

Подробнее плиз smile
Какая подсветка, какие узлы копируешь, куда вставляешь?.. smile

Автор: markowww 16.11.2005, 12:10
Цитата(Vitalik)
Просто у корневого "диапазона" (Root) есть такое же свойство
В новой версии это называется 'Syntax Coloring'.
Устанавливаешь у него 'Case sensitive' и всё будет как надо


Мда. Лопух. Не заметил ;) Но все таки, я думаю, логичнее будет сделать это свойство у каждого правила с наледованием от родителя по умолчанию. Мне просто в голову не пришло посмотреть в Syntax Coloring. ;)

Теперь по поводу Copy/Paste:
1. Ошибка при копировании узла дерева, в поддерево, где уже существует узел с таким именем. Вываливается сразу по команде Paste.
2. Если поддерево (Range) не содержало узал с таким же именем или было пусто, то копирование завершается, но при попытке раскрыть (Expand) это поддерево, тоже вываливается Access Violation.

Автор: Paul S. 19.11.2005, 19:23
Глюк вроде прикрыл, пришлось поправить SynEdit:

Код

procedure TCustomSynEdit.LinesChanged(Sender: TObject);
var
  vOldMode: TSynSelectionMode;
begin
  Exclude(fStateFlags, sfLinesChanging);
  if HandleAllocated then
  begin
    UpdateScrollBars;
    vOldMode := fActiveSelectionMode;
    SetBlockBegin(CaretXY);
    fActiveSelectionMode := vOldMode;
    InvalidateRect(fInvalidateRect, False);
    FillChar(fInvalidateRect, SizeOf(TRect), 0);
    if fGutter.ShowLineNumbers and fGutter.AutoSize then
      fGutter.AutoSizeDigitCount(Lines.Count);
    if not (eoScrollPastEof in Options) then
      TopLine := TopLine;
    // Вот эти
    if WordWrap then
      fWordWrapPlugin.Reset;
  end;
end;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)