Займемся ее реализацией.
void LexerZ::styleText(int start, int end)
{
//editor() - функция из родительского класса.
//Возвращает указатель на QsciScintilla
if (!editor())
return;
//получить исходник
//выделим кусок памяти
// +1 - под \0
char * chars = new char[end - start + 1];
//заполним кусок обратившись сцинтилле
editor()->SendScintilla(QsciScintilla::SCI_GETTEXTRANGE,
start, end, chars);
//преобразуем в строку
QString source(chars);
delete [] chars;
//Оптимизация - кэшируем уже ранее отрисованную строку
if (source == cache)
return;
else
cache = source;
//Не работаем с пустой строкой
if (source.isEmpty())
return;
//вызываем функцию отрисовки комментария
//передаем исходную строку, начало и конец
commentStyling(source, start, end);
}
* This source code was highlighted with Source Code Highlighter.В комментариях описано, что мы делаем в этой функции. Здесь мы получаем строку, которую требуется отрисовать (это может быть не только текущая строка, а в том числе и соседние строки, сцинтилла в этом плане довольно умна).
Дальше вызываем функцию commentStyling(source, start, end);
Ее реализация приведена ниже: