Зависит от синтаксиса. В основном реализуется на токенах. Потом в зависимости от токенов конкретного языка при парсинге определяются параметры. После чего производится отрисовка, собственно после этого уже ценляются эвенты (выделение текста, навигация, хот кеи). Вопрос довольно сложный и разветвленный в реализации. Функциональность.
- Сворачивание разворачивание блоков
- Сама подсветка ключевых слов, типов, классов, вставок кода ...
- Навигация по бук маркам
- Отступы
- Поддержка не моноширных шрифтов
...
Подводные камни.
- Не моноширность шрифтов.
- Отслеживание состояний.
- Скорость парсинга.
- Высокая динамичноть.
- Отличие синтаксисов (например расширяемость фортрана в процессе разработки)
...
Халява:
- SynEdit (кроссплатформенный набор компонентов для подсветки различных языков [Delphi/Lazarus])
- CodeBlocks - фрии ИДЕ для разработки под С++ (можно посмотреть реализацию под плюсы)
- Можешь меня найти на джабер канале портала (реализовывал самолично подсветку для своего синтаксиса - не моноширные шрифты, сворачивание блоков, подсветка, отступы и тд...)