Не нужно кидать код на Си, хотелось бы видеть ответ на человеческом языке.
Я предполагаю, что редактор создает массив для хранения символов $chrs[10000][1000], где 10000 кол-во возможных строк, а 1000 символов в строке (например). Затем создает N кол-во label, для отображения видимой части текста. При перемещении курсора, в label'ы записываются соответствующие значения из $chrs[][] массива.
Подсветка в таком случае может реализовываться элементарно, получится функция похожая на поиск пикселя, только это будет поиск определенных совпадений по label'ам, при нахождении определенных совпадений, подсветить эти label'ы красным, например. По такому принципу не придется подсвечивать весь многотонный текст, будет подсвечиваться только видимая часть. Я правильно рассуждаю или нет? Может быть разработчик Scintilla использовал какие-то готовые элементы?
А может быть существует какой-то базовый элемент типа SuperRichEdit или MegaCoolMemo, который умеет адекватно работать с текстом, без постоянной нужды выделять текст и применять к нему свойства?
P.S. RichEdit - это недоэлемент, что я легко могу доказать, я знаю почти все его функции еще с Delphi.
Я предполагаю, что редактор создает массив для хранения символов $chrs[10000][1000], где 10000 кол-во возможных строк, а 1000 символов в строке (например). Затем создает N кол-во label, для отображения видимой части текста. При перемещении курсора, в label'ы записываются соответствующие значения из $chrs[][] массива.
Подсветка в таком случае может реализовываться элементарно, получится функция похожая на поиск пикселя, только это будет поиск определенных совпадений по label'ам, при нахождении определенных совпадений, подсветить эти label'ы красным, например. По такому принципу не придется подсвечивать весь многотонный текст, будет подсвечиваться только видимая часть. Я правильно рассуждаю или нет? Может быть разработчик Scintilla использовал какие-то готовые элементы?
А может быть существует какой-то базовый элемент типа SuperRichEdit или MegaCoolMemo, который умеет адекватно работать с текстом, без постоянной нужды выделять текст и применять к нему свойства?
P.S. RichEdit - это недоэлемент, что я легко могу доказать, я знаю почти все его функции еще с Delphi.