Re[2]: Алгоритм подсветки синтаксиса
От: Диагностик Россия  
Дата: 29.01.03 01:07
Оценка:
Здравствуйте, comer, Вы писали:

C>Тут были отзывы по поводу разбора только одной строки, по моему, это не верно. Можно так: первый раз Вы полностью разпознаете текст. и у Вас есть информация, с какого по какой символ текста какой токен. Например:


C>int main

C>^ ^^
C>| |keyword
C>| white space
C>keyword

C>Потом, что такое процесс, редактирования? Минимальная операция: замена одного куска текста на другой (не строки и ничего такого подобного, и именно тескта, ведь я могу просто вставить текст, или пометив, удалить его).


C>Обычно лексические анализаторы распознают токены в порядке следования их в тексте. После одной минимальной операции редактирования можно запустить парсер от первого токена который был изменен, и до, тех пор пока парсер либо не выйдем на токен который не менялся либо не достигнем конца файла (если кому то хочеться привязываться к экрану, то можно до конца экрана, а при прокрутке вниз, считать добавлением текста). Понятно, что дальше текст распознавать не имеет смысла. Легко видеть, что при элементарных операциях редактирования, распознаваться будут обычно 1-2 токена. При многострочном комментировании/раскомментировании парсер будет работать чуть дольше (тут никуда не денешься).


В теории это красиво, но немного о возможной реализации:
Как рисовать разноцветный текст — либо как в CrystalEdit с помощью ExtTextOut — вот уж действительно головняк, либо используя стандартный rich edit. Я выбираю второй вариант.
Тогда при первом разборе блокам текста устанавливается определенный цвет и в дальнейшем rich edit им и рисует. При редактировании наша задача определить границы операции изменения и разобрать/раскрасить текст в этих границах (иногда и вне их).
Не могу решить как определить эти самые границы хотя бы с точностью до строки при стандарнтных операциях rich edit вставить/вырезать и особенно анду/реду. Есть ли варианты как узнать какие строки изменились после этих операций?
Я понимаю что это оффтопик для "Алгоритмов", но хотелось бы решить вопрос не отходя от кассы
На самом деле, люди не читают газеты, они принимают их каждое утро, так же как ванну. ©Маршалл Мак-Льюэн
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.