2014-03-07 23 views
3

所有自定义词法,QScintilla自动完成对蟒蛇

我使用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

这并没有回答这个问题,但我已经在QScintilla中为自定义词法分析器实现了自动完成功能,但是我还必须创建一个自定义分析器来查找代码中的类和函数定义。使用SendScintilla(),您可以通过QScintilla轻松使用低级Scintilla api调用来显示自动填充框,但是填充它需要定制解析器。 – code9999

+0

这也可以帮助:http://qscintilla.com/ –

回答

2

目前的QScintilla APIs没有办法做到这一点

主要的障碍是你需要在QsciLexerCustom子类中重新实现的许多虚拟方法都不是公有的,这就是你的例子中的代码不工作的原因 - 你的autoCompletionWordSeparators方法在le时被忽略XER被设置,并且从QsciLexer基类方法代替称为(它返回一个空的列表)。

你也可能会认为你可以使用QsciScintilla.setAutoCompletionWordSeparators来解决这个问题,但很可惜,如果没有词法分析器已设置这仅适用!

来解决这个问题的唯一办法是,要么实现自动完成自己(这是可行的,但一个很多工作),或使上Qscintilla mailing list功能请求获得加入必要的虚方法公共API为QsciLexerCustom

所讨论的方法是listed here(名称以粗体显示黑色,而不是作为一个链接)。

+0

非常感谢您的回答! – user3393374