Python wx.stc自定义突出显示

时间:2011-10-18 12:33:57

标签: python wxpython syntax-highlighting scintilla

由于在很多场合都缺乏答案,而且我在这里收到了很好的答案,这是我的问题。

我正在编写ABC音乐符号语言的程序(下面给出的示例)。这不是wx.stc中受支持的语言,我还没有找到关于如何:

的良好解释或示例
  1. 添加我自己的lexer / highlighter
  2. 从头开始创建自己的荧光笔并使用RichTextCtrl等。
  3. 欢迎任何方向的任何帮助。

    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||
    

2 个答案:

答案 0 :(得分:3)

要在Python中执行此操作,您需要将词法分析器设置为“container”,然后处理“样式需要”事件:

self.SetLexer(wx.stc.STC_LEX_CONTAINER)
self.SetStyleBits(5)
self.Bind(wx.stc.EVT_STC_STYLENEEDED, self.handleStyleNeeded)

您在处理程序中执行的操作显然取决于您要突出显示的语法的详细信息。

为了获得灵感,我建议您熟悉scintilla documentation on styling,并查看一些更简单的内置词法分析器的source code

有点谷歌搜索也发现this wx.stc example可能会有所帮助。

答案 1 :(得分:0)

根据你所获得的“scintilla”标签,我认为你知道Scintilla是wx.stc.StyledTextCtrl的基础。

我能够找到一个简短的方法来为Scintilla添加一些新的样式:http://sphere.sourceforge.net/flik/docs/scintilla-container_lexer.html

它非常低级,而且不是Python。我希望我能把它作为评论而不是“答案”,但我还没有足够的声誉。