【问题标题】:Python wx.stc custom highlightingPython wx.stc 自定义高亮
【发布时间】:2011-12-10 01:45:15
【问题描述】:

由于在很多情况下都没有答案,而我在这里收到的很好的答案,这是我的问题。

我正在为 ABC 音乐符号语言编写程序(示例如下)。这不是 wx.stc 中支持的语言,我还没有找到一个很好的解释或示例来说明如何:

  1. 添加我自己的词法分析器/荧光笔
  2. 从头开始创建我自己的荧光笔并使用 RichTextCtrl 或类似工具。

欢迎任何方向的帮助。

ABC 符号示例:

%% 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 wxpython syntax-highlighting scintilla wxstyledtextctrl


    【解决方案1】:

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

    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 可能会有所帮助。

    【讨论】:

      【解决方案2】:

      根据你那里的“scintilla”标签,我想你知道 Scintilla 是 wx.stc.StyledTextCtrl 的基础。

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

      这是相当低级的,它不是 Python。我希望我可以将此作为评论而不是“答案”,但我还没有足够的声誉。

      【讨论】:

        猜你喜欢
        • 2011-10-31
        • 2016-12-30
        • 2011-08-06
        • 2011-09-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-24
        • 1970-01-01
        相关资源
        最近更新 更多