0

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

4

1 回答 1

3

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

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

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

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

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

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

在不相关的说明中,我认为调用 toSetWordChars是不必要的。根据文档,那是按单词而不是关键字搜索。

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

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

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

对应于词法​​分析器状态wxSTC_C_WORD, wxSTC_C_WORD2,wxSTC_C_COMMENTDOCKEYWORD等。

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

于 2019-05-10T13:31:37.877 回答