所有
我正在使用QScintilla语法高亮并自动填充我的域特定语言(DSL)。
我通过重新实现(QsciLexerCustom)编写了一个自定义词法分析器,我正在尝试使用自动完成功能。 我的问题是自动完成不能像我想的那样工作。 我希望我的自定义词法分析器像QsciLexerPython一样工作。也就是说,如果我将'toto.titi.tata'添加到api,当我输入'toto'时。在我的qscintilla编辑器中,它建议我'titi.tata'。截至目前,它建议我toto.titi.tata。 :(
我尝试将'autoCompletionWordSeparators'添加到我的词法分析器中,但它无效。 如何使我的自定义词法分析器自动完成工作,如QsciLexerPython? 非常感谢!
Lexer = customlexer(self.text)
api = QsciAPIs(Lexer)
api.add('toto.titi.tata')
api.prepare()
Lexer.setAPIs(api)
self.text.setLexer(Lexer)
class lexer(QsciLexerCustom):
def __init__(self, parent):
QsciLexerCustom.__init__(self, parent)
def autoCompletionWordSeparators(self):
return ['.']
答案 0 :(得分:2)
目前的QScintilla API无法做到这一点。
主要障碍是您需要在QsciLexerCustom
子类中重新实现的许多虚拟方法都不公开。这就是为什么示例中的代码不起作用的原因 - 设置词法分析器时忽略autoCompletionWordSeparators
方法,而调用QsciLexer
的基类方法(返回空列表)
您可能还认为可以使用QsciScintilla.setAutoCompletionWordSeparators解决此问题,但是,这只有在没有设置词法分析器的情况下才有效!
解决此问题的唯一方法是自己实现自动完成(这是可行的,但很多的工作),或者在Qscintilla mailing list上发出功能请求获取必要的虚拟方法添加到QsciLexerCustom
的公共API。
有问题的方法是listed here(名称以粗体黑色显示,而不是作为链接显示。)