wxStyledTextCtrl 如何设置关键字样式

wxStyledTextCtrl how to style keywords

本文关键字:关键字 样式 设置 何设置 wxStyledTextCtrl      更新时间:2023-10-16

在让wxStyledTextCtrl为我的单词列表着色时遇到一些麻烦。

x->m_ctlEdit->SetKeyWords(0,"true false");
x->SetWordChars(wxT("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMONPQRSTUVWXYZ._") );
x->StyleSetForeground(wxSTC_HPHP_WORD, wxColour(0x67,0xa6,0xff));

真和假不会以这种方式获得着色,我已经在许多其他定义中使用了 StyleSetForeground,并且一切正常,只是单词列表有问题。

作为第二个问题,如何为不同的单词列表分离颜色?我知道我可以使用数字标识符设置不同的关键字列表,但是由于该函数不接受标识符,我如何应用每个关键字列表的样式?

注意: 使用 HTML/PHP 词法分析器作为默认选项与 wxStyledTextCtrl 一起使用

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

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

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

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

在本例中,PHP 关键字的从 0 开始的索引为 4,因此这将是传入SetKeyWords方法的数字。

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

在一个不相关的方面,我认为呼吁SetWordChars是不必要的。根据文档,这是用于按单词而不是关键字搜索。

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

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

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

对应于词法分析器的状态wxSTC_C_WORDwxSTC_C_WORD2wxSTC_C_COMMENTDOCKEYWORD等。

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