Note that there are some explanatory texts on larger screens.

plurals
  1. POQScintilla: how to create a new lexer or modify an existing one?
    text
    copied!<p>I find the default lexer for C++ highlighting not very specific enough.</p> <p>I want to at least be able to specify a different color for:</p> <p>type keyword (void, int, float etc) instruction keyword (if while do return for etc) class-related keyword (template class virtual friend) type modifiers keywords (static const extern unsigned etc)</p> <p>I found this in the LexerCPP source:</p> <pre><code>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 $ @ \\ &amp; &lt; &gt; # { }"; </code></pre> <p>etc</p> <p>I tried this - Copy/paste the qscilexercpp.cpp to a new file name qscilexercxx.cpp - replace the code above by a switch with an appropriate switch:</p> <pre><code>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"; } </code></pre> <p>After creating the appropriate enum:</p> <pre><code> Oper = 20, BaseType = 21, ClassRelated = 22, Misc = 23, Modifiers = 24, Instruct = 25 </code></pre> <p>At the end of the existing ones.</p> <p>Now most of my text is black, and I'm pretty sure I missed something about the link between the enum and the char array of keywords returned...</p> <p>Can somebody direct me to something or help me ?</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload