問題タブ [jsyntaxpane]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
275 参照

java - JFlexで継承は可能ですか?

XPathのレクサーを一緒にハックすることができましたが、私はJFlexとJSyntaxPaneにかなり慣れていません。

私が直面している問題は、いくつかの独自機能を備えたXPathのサブセットをサポートするプロジェクトに取り組んでいることです。厄介な私は知っています。

これが通常のJavaの問題である場合、継承に目を向けますが、1つのレクサーで以前に生成されたレクサーを拡張することによって継承を実現することはできないようです。

例えば

これにより、いくつかのfinalメソッドを拡張できないというエラーが大量に発生するようです。これはJSyntaxpaneのDefaultJFlexLexerに固有の問題ですか、それとも間違っているだけですか?誰かが同様の状況にあり、多数のレクサーである種のアドホック継承を実現する方法を見つけたことがありますか?

0 投票する
1 に答える
1675 参照

java - JFlex で状態を追跡する

JSyntaxpane で使用するレクサーを生成するカスタム フレックス ファイルを作成しています。

lex する必要があるカスタム言語には、一種のスタックで互いに埋め込むことができるさまざまな状態があります。

つまり、一重引用符で囲まれた文字列を含む式を作成し、特別なトークン eval() を使用して文字列内に別の式を埋め込むことができます。ただし、二重引用符で囲まれた文字列内に式を埋め込むこともできます。

例えば:

これは単純化したもので、これよりも多くの状態がありますが、DOUBLE_STRING と SINGLE_STRING に異なる状態が必要であると仮定すると、私の状況を適切に説明しています。

eval式を閉じたときに正しい状態に確実に戻るための最良の方法は何ですか(つまり、二重引用符で囲まれている場合はDOUBLE_STRINGに戻り、単一引用符で囲まれている場合はSINGLE_STRINGに戻ります)

私が思いついた解決策は、yybegin を使用して別の状態を開始する代わりに、スタックといくつかのカスタム メソッドを使用して状態を追跡することです。

これはこれを達成するための最良の方法ですか?活用できる JFlex のより単純な組み込み関数や、知っておくべきベスト プラクティスはありますか?

0 投票する
1 に答える
1214 参照

java - jsyntaxpane を使用した JEditorPane 構文の強調表示

アプリケーションに JEditorPane があり、jsyntaxpane と次のコードを使用して Java ファイルをロードしていましたが、完全に機能していました。

ハイライトする

ファイルをロードする

しかし、ファイルをロードする方法を変更する必要があり、現在ファイルを次のようにロードしていることを知っています

これは私が望む方法でファイルをロードしていますが、Javaファイルのテキストを強調表示していません! これを修正する方法や、別の方法で Java を強調表示する方法を知っている人はいますか?

0 投票する
1 に答える
83 参照

swing - JEdi​​torPane で Python の jysntaxpane サポートを取得できません

Python をサポートする必要がある Swing JEditorPane を埋め込もうとしている SWT コンポジットがあります。これにはjSyntaxPaneを使用しています。完全な .py ファイルを読み取ってエディターに表示できます。ただし、構文/色の強調表示はエディターに表示されません。

以下はコードです:

DefaultSyntaxKit または PythonSyntaxKit を初期化しようとすると、UI に何も表示されません。「editor.setContentType("text/python")」も実行しようとしましたが、うまくいきませんでした。

親切に助けてください。ありがとう。