4

全て、

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 ['.']
4

1 に答える 1

2

現在の QScintilla API には、これを行う方法がありません。

QsciLexerCustom主な障害は、サブクラスで再実装する必要がある仮想メソッドの多くが公開されていないことです。これが、例のコードが機能しない理由です。autoCompletionWordSeparatorsレクサーが設定されている場合、メソッドは無視され、代わりに from の基本クラス メソッドQsciLexerが呼び出されます (空のリストを返します)。

QsciScintilla.setAutoCompletionWordSeparatorsを使用してこれを回避できると思うかもしれませんが、残念ながら、これはレクサーが設定されていない場合にのみ機能します。

この問題を解決する唯一の方法は、オートコンプリートを自分で実装するか (これは実行可能ですが、多くの作業が必要です)、 Qscintilla メーリング リストで機能リクエストを作成して、必要な仮想メソッドを のパブリック API に追加することですQsciLexerCustom

問題のメソッドはここにリストされています(名前はリンクとしてではなく、太字の黒で示されています)。

于 2014-03-07T20:59:40.950 に答える