【问题标题】:Customizing PyQt Qscintilla CPP lexer自定义 PyQt Qscintilla CPP 词法分析器
【发布时间】:2014-05-23 13:41:54
【问题描述】:

我正在为个人项目编写 RSL 编辑器,我想自定义 QScintilla 中可用的 CPP 词法分析器,因为我只需要一些额外的关键字来突出显示,但我真的不知道如何添加它们。

有什么帮助吗? 干杯

edit - 我一直在玩 sn-ps,我发现并且我设法通过子类化 CPP 词法分析器并创建一个键集来使新关键字起作用,但它只有在覆盖索引 1 上的现有键集时才有效

从 PyQt4 导入 Qsci

class RSLLexer(Qsci.QsciLexerCPP): 
    def __init__(self, parent): 
        super(RSLLexer, self).__init__()

def keywords(self, keyset):
    if keyset == 1:
        return b'surface'
    return Qsci.QsciLexerCPP.keywords(self, keyset)

【问题讨论】:

标签: python pyqt keyword lexer qscintilla


【解决方案1】:

创建QsciLexerCPP 的子类并重新实现keywords 方法:

class RSLLexer(Qsci.QsciLexerCPP):
    def keywords(self, index):
        keywords = Qsci.QsciLexerCPP.keywords(self, index) or ''
        # primary keywords
        if index == 1:
            return 'foo ' + keywords
        # secondary keywords
        if index == 2:
            return 'bar ' + keywords
        # doc comment keywords
        if index == 3:
            return keywords
        # global classes
        if index == 4:
            return keywords
        return keywords

每个关键字集都有与之关联的不同样式,因此可以以不同方式突出显示它们。请参阅 style enumeration 以了解要使用的那些。

【讨论】:

  • 当我尝试您的解决方案时,除非我删除 return mykeywords1 + 关键字并将其替换为仅 return mykeywords1,否则我仍然没有获得额外的关键字来 reigtser。这仍然有点工作,因为我可以打印出原始值并重新添加它们
  • @SketchyManDan。我弄错了索引:它们从一开始,而不是零!另外,我忘了提防返回None 的基类调用。这两件事现在已在我的回答中得到解决,并且我已经确认它们有效。最后一点:mykeywords 应该以空格结尾。
猜你喜欢
  • 2015-04-24
  • 2014-04-10
  • 2019-12-29
  • 2017-10-13
  • 1970-01-01
  • 1970-01-01
  • 2021-09-21
  • 2016-12-30
  • 2020-08-18
相关资源
最近更新 更多