понедельник, 11 октября 2010 г.

QScintilla: раскрашиваем комментарии

Сегодня мы будем раскрашивать комментарии для некого гипотетического языка Z.
Допустим в этом языке комментарии строк принято обозначать символом **, аналогично // в C++. Давайте предположим, что цвет шрифта комментария - синий, цвет фона - светло-зеленый, а сам шрифт - Comic Sans.
Начнем изменения в нашем коде Lexer.cpp и Lexer.h. (Можно переименовать эти файлы в LexerZ.h и LexerZ.cpp).
Первым делом надо определить описание для этого стиля.

 QString LexerZ::description(int style) const
{
  switch (style)
  {
   case Comment:
     return "Comment";
   case Default:
     return "Default";
  }

  return QString(style);
}
* This source code was highlighted with Source Code Highlighter.


Фактически нам это описание не нужно, но QScintilla просит, раз просит - значит нужно.
Дальше определим цвет шрифта для комментария:

QColor LexerZ::defaultColor(int style) const
{
  if (style == Comment)
  {
   return Qt::blue;
  }
  return QsciLexer::defaultColor(style);
}
* This source code was highlighted with Source Code Highlighter.


Теперь - цвет фона:

QColor LexerZ::defaultPaper(int style) const
{
  if (style == Comment)
  {
   return QColor("light-green");
  }
  return QsciLexer::defaultPaper(style);
}

* This source code was highlighted with Source Code Highlighter.


Далее определим шрифт:

QFont LexerZ::defaultFont(int style) const
{
  QFont f; 
  if (style == Comment)
  {
   f.setFamily("Comic Sans");
  }
  else
  {
   f = QsciLexer::defaultFont(style);
  }
  return f;
}

* This source code was highlighted with Source Code Highlighter.

Вот мы и определили цвета для нашего комментария. Этого кода, впрочем, недостаточно для того, чтобы наш комментарий ** начал подсвечиваться. Нужно четко указать Scintille когда у нас начинается комментарий и какой стиль нужно использовать. Для этого нужно написать код в функции void LexerZ::styleText(int start, int end)

Об этом - в следующем выпуске.

Комментариев нет:

Отправить комментарий