2014-03-07 29 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