python - 在现有的 Scintilla 词法分析器上创建和着色新结构

标签 python qt scintilla qscintilla

全部,

我正在使用 QScintilla 来语法高亮我的领域特定语言 (DSL)。

由于我的 DSL 基于 python,所以我使用现有的 Python Lexer for QScintilla。 我设法创建新的关键字如下:

self.text = Qscintilla(self)
pythonLexer = QsciLexerPython(self.text)
self.text.setLexer(pythonLexer)
self.text.SendScintilla(QsciScintilla.SCI_SETKEYWORDS,1,bytes('WARNING', 'utf-8'))

现在,我该如何选择一种颜色来突出显示我新创建的关键字?

非常感谢!

最佳答案

QsciLexerPython 在突出显示关键字集方面非常有限,因为它只给了您两个可以玩的。此限制是由底层 Scintilla 库中的 Python Lexer 类强加的,因此对此无能为力(除非您想创建补丁)。

但是,如果您只需要突出显示一组额外的关键字,那么您可以继承QsciLexerPython 并重新实现它的keywords。方法:

class CustomLexer(QsciLexerPython):
    def keywords(self, keyset):
        if keyset == QsciLexerPython.HighlightedIdentifier:
            return b'WARNING'
        return QsciLexerPython.keywords(self, keyset)

有了它,您就可以 set the color, font, etc对于样式:

    pythonLexer = CustomLexer(self.text)
    pythonLexer.setColor(
        QColor('purple'), QsciLexerPython.HighlightedIdentifier)
    ...

(PS:注意关键字只能包含0-255范围内的单字节字符)

关于python - 在现有的 Scintilla 词法分析器上创建和着色新结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22021294/

相关文章:

java - 如何在基于 Debian Java 的 Docker 镜像中减小 python 的大小?

python - Odoo 服务器错误 : smtplib. SMTPServerDisconnected:请先运行 connect()

python - PyQt 小部件重新加载或刷新

c++ - Qt中除了单选按钮之外是否有类似gui元素的开关

c++ - 文本编辑器 API。用于实验性 IDE 的 Scintilla。你用别的东西吗?

python - 获取 os.walk 命中 abspath

Python pnoise 返回 0 : why so?

c++ - 手工编码 GUI 与 Qt 设计器 GUI

c# - Mono 的语法突出显示控件?

python - 为什么我的 QsciLexerCustom 子类不能使用 QsciScintilla 在 PyQt4 中工作?