wxStyledTextCtrl如何设置关键字样式

时间:2019-05-10 08:53:31

标签: c++ wxwidgets scintilla wxstyledtextctrl

让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词法分析器

1 个答案:

答案 0 :(得分:3)

对于wxSTC_LEX_HTML html词法分析器或wxSTC_LEX_PHPSCRIPT php词法分析器,您需要指定关键字集4。因此,例如:

x->m_ctlEdit->SetKeyWords(4,"true false");

如果您使用的是html词法分析器,则可以通过调用x->m_ctlEdit->DescribeKeyWordSets();来学习此方法,这将返回以下列表:

  • HTML元素和属性
  • JavaScript关键字
  • VBScript关键字
  • Python关键字
  • PHP关键字
  • SGML和DTD关键字

在这种情况下,PHP关键字的从0开始的索引是4,因此这将是传递给SetKeyWords方法的数字。

但是,使用PHP词法分析器时,这种检查方式失败,因为调用DescribeKeyWordSets仅返回“ PHP关键字”。因此,您认为应该以0调用SetKeyWords,但实际上您仍然需要使用4,因为php脚本词法分析器与html词法分析器相同。看来这只是Scintilla的奇怪之处。

不相关的是,我认为不需要致电SetWordChars。根据文档,这是按单词而不是关键字进行搜索。

  

作为第二个问题,如何为不同的单词列表分隔颜色?

这取决于词法分析器。例如,C词法分析器提供以下关键字集

  • 主要关键字和标识符
  • 次要关键字和标识符
  • 文档注释关键字
  • 全局类和typedefs
  • 预处理器定义

与词法分析器状态wxSTC_C_WORDwxSTC_C_WORD2wxSTC_C_COMMENTDOCKEYWORD等相对应。

不幸的是,如上所述,html lexer仅为PHP提供1个关键字集。