Эта тема посвящена теории разработки текстового редактора с подсветкой синтаксиса.
Дабы не велосипедить, я вначале хочу обсудить как правильно его реализовать.
Основные вещи, которые вызовут трудности. Интересует ваше мнение. Я буду писать как я это вижу.
1. как хранить текст документа.
При открытиии все строки разбиваем на массив данных: id (unic, enum), line_number, string_data
Пример:
Code: Select all
Примет мир
Я вторая строка.
1, 1, "Я вторая строка"
Для текста используется один буффер, в котором хранятся строки. Если строка именяется, она переносится в конец буфера. При этом старая строка больше не будет использоваться в программе.
"Привет мир\0Я вторая строка\0" > "Привет мир\0Я вторая строка\0\Привет мир измененная"
При сохранении документа можно проводить дефрагментацию.
2. поиск лексем для применения стилей
Стили могут применятся или к словам или к блокам.
Слова: int, void, else, #define
Блоки: после //, между /* */, между ""
Как правильно реализовать такой поиск и как хранить стили?
Каждую подстроку разбивать еще на массив строк-стилей? Звучит сложно...
3. как выводить текст
Надо решить или в буфер или рисовать фоновый прямоугольник, а наверх текст - не знаю.