Python 在现有闪烁lexer上创建和着色新结构
全部, 我正在使用QSCINTILA语法突出显示我的领域特定语言(DSL) 因为我的DSL是基于python的,所以我使用现有的用于QSCINTILA的python Lexer。 我设法创建新的关键字,如下所示:Python 在现有闪烁lexer上创建和着色新结构,python,qt,scintilla,qscintilla,Python,Qt,Scintilla,Qscintilla,全部, 我正在使用QSCINTILA语法突出显示我的领域特定语言(DSL) 因为我的DSL是基于python的,所以我使用现有的用于QSCINTILA的python Lexer。 我设法创建新的关键字,如下所示: self.text = Qscintilla(self) pythonLexer = QsciLexerPython(self.text) self.text.setLexer(pythonLexer) self.text.SendScintilla(QsciScintilla.SCI
self.text = Qscintilla(self)
pythonLexer = QsciLexerPython(self.text)
self.text.setLexer(pythonLexer)
self.text.SendScintilla(QsciScintilla.SCI_SETKEYWORDS,1,bytes('WARNING', 'utf-8'))
现在,如何选择颜色来突出显示新创建的关键字
非常感谢 Python在突出显示一组关键字时非常有限,因为它只提供两个关键字供您使用。这个限制是由底层的
scatinlla
库中的Python Lexer类强加的,因此对此没有什么可以做的(除非您想要创建补丁)
但是,如果您只需要突出显示一组额外的关键字,那么您可以将qscilepython
子类化并重新实现其方法:
在适当的情况下,您可以为样式执行以下操作:
pythonLexer = CustomLexer(self.text)
pythonLexer.setColor(
QColor('purple'), QsciLexerPython.HighlightedIdentifier)
...
(PS:注意关键字在0~255范围内仅包含单字节字符)
,以获得更大的灵活性,可以考虑建立自己的自定义词表,而不是从现有的<代码> QSLILLYPYPOTHON</代码>中派生出来的。小心,这将是更多的工作 QSCINTILA为此目的提供了QSCIlCustom
类。您必须将其子类化,如下所示:
class MyLexer(QsciLexerCustom):
def __init__(self, parent):
super(MyLexer, self).__init__(parent)
[...]
''''''
def language(self):
[...]
''''''
def description(self, style):
[...]
''''''
def styleText(self, start, end):
# Called everytime the editors text has changed
[...]
''''''
'''--- end class ---'''
请注意以下部分:
:构造函数通常是创建样式对象的地方\uuuuu init\uuuuuuu(self,parent)
:此方法必须返回语言的名称。你必须实现它,但我不清楚它的实际用途语言(self)
:返回给定样式的描述性名称description(self,style\u nr)
:每次更改文本时都会调用。在这里,您可以实现语法高亮显示样式文本(self、start、end)
有关更多详细信息,您可以访问以下网站:请注意,我从给定网站上随意复制了一些文本。我可以这样做,因为我自己建立了那个网站;-)
class MyLexer(QsciLexerCustom):
def __init__(self, parent):
super(MyLexer, self).__init__(parent)
[...]
''''''
def language(self):
[...]
''''''
def description(self, style):
[...]
''''''
def styleText(self, start, end):
# Called everytime the editors text has changed
[...]
''''''
'''--- end class ---'''