全部,
我正在使用 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/