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_HTML
html词法分析器或wxSTC_LEX_PHPSCRIPT
php词法分析器,您需要指定关键字集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_WORD
、wxSTC_C_WORD2
、wxSTC_C_COMMENTDOCKEYWORD
等
不幸的是,如上所述,html 词法分析器只为 PHP 提供 1 个关键字集。
让 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_HTML
html词法分析器或wxSTC_LEX_PHPSCRIPT
php词法分析器,您需要指定关键字集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_WORD
、wxSTC_C_WORD2
、wxSTC_C_COMMENTDOCKEYWORD
等
不幸的是,如上所述,html 词法分析器只为 PHP 提供 1 个关键字集。