久しぶりに Eclipse のプラグイン開発の話を。
テキストエディタ内にハイパーリンクを作ったときのスタイルを指定する。
ハイパーリンクにカーソルをあわせたとき、「青字、下線付き」になることを期待しますよね。
ところがハイパーリンクは動くものの、「青字、下線付き」にならないという現象に遭遇。そして原因がわからずはまったのでメモ。
まず、「青字、下線付き」となることを期待する根拠は SourceViewerConfiguration の実装です。
- public IHyperlinkPresenter getHyperlinkPresenter(ISourceViewer sourceViewer) {
- return new DefaultHyperlinkPresenter(new RGB(0, 0, 255));
- }
このようになっています。そのため、特別 Override しない限り、プレゼンテーションにはこの DefaultHyperlinkPresenter を使うことになります。
この DefaultHyperlinkPresenter には以下のコメントがあります。
The default hyperlink presenter underlines the link and colors the line and the text with the given color.
つまり、「青字、下線付き」ですよね。
それなのに、どうにも反応がありませんでした。
それでどうしたかというと、DefaultHyperlinkPresenter#applyTextPresentation 辺りにブレークポイントを設定してフィールド等を調べてみました。
結果わかったことは、範囲(Region)がうまく設定されてないってことです。
IHyperlink の実装クラスで Region を返すのですが、この Region が正しい範囲を指定していなかったのです。
- public IHyperlink[] detectHyperlinks(ITextViewer textViewer, IRegion region, boolean canShowMultipleHyperlinks) {
- // (略)
- // !! パラメータの region をそのまま渡しちゃってる !!
- // これはリンクを検出する前の範囲!
- hyperLink = new HogeHyperLink(region);
- // (略)
- }
IHyperlink の実装クラス(ここでは HogeHyperLink)に渡す範囲は検出時に計算したものじゃないとダメ(当たり前)。
- public IHyperlink[] detectHyperlinks(ITextViewer textViewer, IRegion region, boolean canShowMultipleHyperlinks) {
- // (略)
- // 検出結果のリンク文字列に対応した範囲を渡す!
- hyperLink = new HogeHyperLink(new Region(linkOffset, linkOffsetLength));
- // (略)
- }
あとは HogeHyperLink#getHyperlinkRegion で渡されてきた Region をそのまま返せば OK です。
単純なミスなのですけど、はまったので残しておきます。
げふ。
- Newer: さっそくコミックス買ってきた
- Older: PDT2.0を使ってみた
Comments:0
Trackbacks:0
- Trackback URL for this entry
- http://blog.magellanic.net/archives/238/trackback
- Listed below are links to weblogs that reference
- Eclipseプラグイン開発:ハイパーリンクのスタイル指定 from Olen Onnellinen 2



