让wxStyledTextCtrl为我的单词表加色时会遇到麻烦。
x->m_ctlEdit->SetKeyWords(0,"true false");
x->SetWordChars(wxT("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMONPQRSTUVWXYZ._") );
x->StyleSetForeground(wxSTC_HPHP_WORD, wxColour(0x67,0xa6,0xff));
true和false不会以这种方式着色,我在其他许多定义上都使用了StyleSetForeground,并且一切正常,只是单词列表遇到了麻烦。
作为第二个问题,我该如何区分不同单词表的颜色?我知道我可以使用数字标识符设置不同的关键字列表,但是由于该函数不使用标识符,因此如何应用每个关键字列表的样式?
注意: 使用wxStyledTextCtrl的默认选项HTML / PHP词法分析器
答案 0 :(得分:3)
对于wxSTC_LEX_HTML
html词法分析器或wxSTC_LEX_PHPSCRIPT
php词法分析器,您需要指定关键字集4。因此,例如:
x->m_ctlEdit->SetKeyWords(4,"true false");
如果您使用的是html词法分析器,则可以通过调用x->m_ctlEdit->DescribeKeyWordSets();
来学习此方法,这将返回以下列表:
在这种情况下,PHP关键字的从0开始的索引是4,因此这将是传递给SetKeyWords
方法的数字。
但是,使用PHP词法分析器时,这种检查方式失败,因为调用DescribeKeyWordSets
仅返回“ PHP关键字”。因此,您认为应该以0调用SetKeyWords
,但实际上您仍然需要使用4,因为php脚本词法分析器与html词法分析器相同。看来这只是Scintilla的奇怪之处。
不相关的是,我认为不需要致电SetWordChars
。根据文档,这是按单词而不是关键字进行搜索。
作为第二个问题,如何为不同的单词列表分隔颜色?
这取决于词法分析器。例如,C词法分析器提供以下关键字集
与词法分析器状态wxSTC_C_WORD
,wxSTC_C_WORD2
,wxSTC_C_COMMENTDOCKEYWORD
等相对应。
不幸的是,如上所述,html lexer仅为PHP提供1个关键字集。