Я считаю лексер по умолчанию для выделения C ++ недостаточно конкретным.
Я хочу по крайней мере иметь возможность указать другой цвет для:
введите ключевое слово (void, int, float и т. Д.)
ключевое слово инструкции (если пока возвращаются и т. д.)
связанное с классом ключевое слово (шаблон класса виртуальный друг)
ключевые слова модификаторов типов (статические константы без знака и т. д.)
Я нашел это в источнике LexerCPP:
const char *QsciLexerCPX::keywords(int set) const
{
if (set == 1)
return
"and and_eq asm auto bitand bitor bool break case "
"catch char class compl const const_cast continue "
"default delete do double dynamic_cast else enum "
"explicit export extern false float for friend goto if "
"inline int long mutable namespace new not not_eq "
"operator or or_eq private protected public register "
"reinterpret_cast return short signed sizeof static "
"static_cast struct switch template this throw true "
"try typedef typeid typename union unsigned using "
"virtual void volatile wchar_t while xor xor_eq";
if (set == 3)
return
"a addindex addtogroup anchor arg attention author b "
"brief bug c class code date def defgroup deprecated "
"dontinclude e em endcode endhtmlonly endif "
"endlatexonly endlink endverbatim enum example "
"exception f$ f[ f] file fn hideinitializer "
"htmlinclude htmlonly if image include ingroup "
"internal invariant interface latexonly li line link "
"mainpage name namespace nosubgrouping note overload "
"p page par param post pre ref relates remarks return "
"retval sa section see showinitializer since skip "
"skipline struct subsection test throw todo typedef "
"union until var verbatim verbinclude version warning "
"weakgroup $ @ \\ & < > # { }";
и т.д.
Я пробовал это
- Скопируйте / вставьте qscilexercpp.cpp в новое имя файла qscilexercxx.cpp.
- замените приведенный выше код переключателем на соответствующий переключатель:
switch(set)
{
case Oper:
//operators
return
"and and_eq bitand bitor "
"catch compl const_cast "
"delete dynamic_cast "
"new not not_eq "
"operator or or_eq "
"reinterpret_cast sizeof "
"static_cast throw "
"try typeid typename "
"xor xor_eq";
case BaseType:
// basic types
return
"bool char double enum float int long "
"short struct union void wchar_t";
case ClassRelated:
// class/template-related
return
"class inline friend private protected public "
"template this virtual";
case Misc:
// misc
return
"asm namespace typedef using";
case Modifiers:
// type modifiers
return
"auto const explicit extern mutable register "
"signed static unsigned volatile";
case Instruct:
return
"break case continue default do else "
"for goto if return switch while";
}
После создания соответствующего перечисления:
Oper = 20,
BaseType = 21,
ClassRelated = 22,
Misc = 23,
Modifiers = 24,
Instruct = 25
В конце существующих.
Теперь большая часть моего текста чёрная, и я почти уверен, что что-то упустил из-за связи между enum и возвращенным массивом символов char ...
Может кто-нибудь направить меня к чему-то или помочь мне?