Re[3]: Алгоритм подсветки синтаксиса
От: Nikeware http://www.nikeware.com
Дата: 29.01.03 09:52
Оценка:
Здравствуйте, Диагностик, Вы писали:

Д>Как рисовать разноцветный текст — либо как в CrystalEdit с помощью ExtTextOut — вот уж действительно головняк, либо используя стандартный rich edit. Я выбираю второй вариант.

У меня когда-то стоял выбор — rich или Crystal. ИХМО Я выбираю первый. Аргумент — скорость работы.
А почему ExtTextOut — головняк? Редактор достаточно толково построен. Все сводится к ParseLine. И "представление" отделено от самого процесса редактирования. CrystalBuffer занимается редактированием. А CrystalView при рисовке строк запрашивает как их рисовать. Можно усомнится в скорости парсинга. Ведь на первый взгляд кажется, что отрисовка достаточно частая операция и постоянно тратить время на разбор слишком расточительно. Но это если текст разбирать "руками" — массивы ключевых слов, поиск в них, сравнение в выделеным токеном и.т.д. Проходил я это. Потом когда сделал на основе автоматных грамматик (регулярных выражений- кому как нравится). Все стало летать. Причем при росте сложности и объема ключевых слов и лексических конструкций скорость совершенно не падает. Я те парсеры, что идут вместе с CrystalEdit — это не более чем примеры. В реальности делается это по другому. Потому как у многих такие конструкции как #define выглядят совершенно по разному:

#define


#    define


— А ведь должен в обеих ситуациях покрасить в синий

Как ни крути, а "руками" все ситуации не покроешь. Руки устанут, да и голова заболит
Юзать надо однозначно автоматные грамматики. Вначале все это конечно "завести" надо. С этим естественно попарится придется. Но окупится с лихвой. Поверьте.

Да, и чтобы не казаться голословным — www.compare-file.com. Там как раз Crystal'овский движок используется.
Просьба не считать это рекламой .

Николай

"To merge or not to merge?"
www.visual-comparer.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.