wxStyledTextCtrl 如何设置关键字样式

wxStyledTextCtrl how to style keywords

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

对于wxSTC_LEX_HTMLhtml词法分析器或wxSTC_LEX_PHPSCRIPTphp词法分析器,您需要指定关键字集4。例如:

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

如果您正在使用 html 词法分析器,您可以通过调用 x->m_ctlEdit->DescribeKeyWordSets(); 来了解这一点,这将 return 以下列表:

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

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

然而,当使用 PHP 词法分析器时,这种检查方法会失败,因为调用 DescribeKeyWordSets 只会 return "PHP keywords"。所以你会认为你应该用 0 调用 SetKeyWords,但实际上你仍然需要使用 4,因为 php 脚本词法分析器与 html 词法分析器相同。这似乎是 Scintilla 的一个奇怪之处。

顺便说一句,我认为调用 SetWordChars 是不必要的。根据文档,这是按单词搜索而不是关键字搜索。

As a second question, How do I seperate colours for different word listings?

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

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

对应词法分析器状态wxSTC_C_WORDwxSTC_C_WORD2wxSTC_C_COMMENTDOCKEYWORD

不幸的是,如上所述,html 词法分析器只为 PHP 提供 1 个关键字集。