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));
真和假不会以这种方式获得着色,我已经在许多其他定义中使用了 StyleSetForeground,并且一切正常,只是单词列表有问题。
作为第二个问题,如何为不同的单词列表分离颜色?我知道我可以使用数字标识符设置不同的关键字列表,但是由于该函数不接受标识符,我如何应用每个关键字列表的样式?
注意: 使用 HTML/PHP 词法分析器作为默认选项与 wxStyledTextCtrl 一起使用
对于wxSTC_LEX_HTML
html 词法分析器或wxSTC_LEX_PHPSCRIPT
php 词法分析器,您需要指定关键字集 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_WORD
、wxSTC_C_WORD2
、wxSTC_C_COMMENTDOCKEYWORD
等。
不幸的是,如上所述,html 词法分析器只为 PHP 提供了 1 个关键字集。