由于在许多场合缺乏答案,而我在这里收到了很好的答案,以下是我的问题。
我正在为ABC音乐符号语言编写一个程序(示例如下)。这不是wx中支持的语言。stc,我还没有找到一个很好的解释或例子如何:
- 添加我自己的lexer/highlighter
- 从头开始创建我自己的荧光笔,并使用RichTextCtrl或类似的。
欢迎任何方向的帮助。
ABC-notation例子:
%% this is a midi or postscript argument, and should be colored
X: 1 % this is a comment and should be colored differently
T: Speed The Plough % everything followed by a colon, except for |: should be colored
M: 4/4 % a variety of others should be colored
L: 1/8
R: reel
K: Dmaj
d3A BAFB|AF~F2 EFDE|F2AF ~G3B| % the non-alphanumerics should be colored
ABdg fgfe|d3A BAFB|AF~F2 EFDE|
F2AF GABG|1ABdg fedc:|2ABde fdde||
|:f2ab afdf|g2fg ed (3Bcd|a2ab afdB| % | and |: should be colored differently
ABde fe~e2|f2ab afdf|g2fg edBA|
[1F2AF GABG|ABdg fddg:|2F2AF ~G3B|ABdg fgfe||
要在Python中做到这一点,你需要将词法分析器设置为"container",然后处理"style-needed"事件:
self.SetLexer(wx.stc.STC_LEX_CONTAINER)
self.SetStyleBits(5)
self.Bind(wx.stc.EVT_STC_STYLENEEDED, self.handleStyleNeeded)
你在处理程序中做什么显然取决于你想要突出显示的语法细节。
为了获得灵感,我建议您熟悉一下有关样式的scintilla文档,并查看一些更简单的内置词法分析器的源代码。
稍微搜索一下也发现了这个wx。
根据这里的"scintilla"标签,我想你已经意识到scintilla是wx.stc.StyledTextCtrl的基础。
我能够找到一个简短的如何添加一些新的样式到Scintilla: http://sphere.sourceforge.net/flik/docs/scintilla-container_lexer.html
它很低级,而且不是Python。我希望我能做一个评论,而不是一个"答案",但我还没有足够的声誉。