0
A
回答
0
如果其他文件由EMF資源備份,那麼您可以使用Xtext對它們編制索引,特別是索引EMF對象,這些對象唯一標識資源,然後在文法中添加對它們的引用。
作爲替代方案,您可以按照基督徒的建議自定義HyperlinkHelper
。問題是你必須定製所有的UI組件,這些參考的概念應該存在,例如找到參考。正如我上面提到的,如果您明確地建模引用,則不存在此問題。
+0
我知道HyperlinkHelper自定義,但想要得到它的例子。或者,也許是教程 –
0
我有答案。 要做到這一點,我們只需要重寫方法
def Class<? extends DefaultHyperlinkDetector> bindDefaultHyperlinkDetector()
類的
AbstractMyDslUiModule
會做它在以下方式
/*
* generated by Xtext 2.9.2
*/
package org.xtext.example.mydsl.ui
import org.eclipse.xtend.lib.annotations.FinalFieldsConstructor
import org.eclipse.xtext.ui.editor.hyperlinking.DefaultHyperlinkDetector
/**
* Use this class to register components to be used within the Eclipse IDE.
*/
@FinalFieldsConstructor
class MyDslUiModule extends AbstractMyDslUiModule {
def Class<? extends DefaultHyperlinkDetector> bindDefaultHyperlinkDetector() {
return MyHyperlinkDetector;
}
}
比我更需要重寫類DefaultHyperlinkDetector
package org.xtext.example.mydsl.ui;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.IRegion;
import org.eclipse.jface.text.ITextViewer;
import org.eclipse.jface.text.Region;
import org.eclipse.jface.text.hyperlink.IHyperlink;
import org.eclipse.xtext.ui.editor.hyperlinking.DefaultHyperlinkDetector;
import org.eclipse.xtext.ui.editor.hyperlinking.IHyperlinkHelper;
public class MyHyperlinkDetector extends DefaultHyperlinkDetector{
private static final String PREFERENCES = "Hello";
@Override
public IHyperlink[] detectHyperlinks(ITextViewer textViewer, IRegion region, boolean canShowMultipleHyperlinks) {
IDocument document = textViewer.getDocument();
int offset = region.getOffset();
// extract relevant characters
IRegion lineRegion;
String candidate;
try {
lineRegion = document.getLineInformationOfOffset(offset);
candidate = document.get(lineRegion.getOffset(), lineRegion.getLength());
} catch (BadLocationException ex) {
return null;
}
// look for keyword
int index = candidate.indexOf(PREFERENCES);
if (index != -1) {
// detect region containing keyword
IRegion targetRegion = new Region(lineRegion.getOffset() + index, PREFERENCES.length());
if ((targetRegion.getOffset() <= offset) && ((targetRegion.getOffset() + targetRegion.getLength()) > offset))
// create link
return new IHyperlink[] { new PreferencesHyperlink(targetRegion) };
}
return null;
}
}
而且接下來我們需要實現IHyperlink接口IHyperlink
package org.xtext.example.mydsl.ui;
import org.eclipse.jface.text.IRegion;
import org.eclipse.jface.text.hyperlink.IHyperlink;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.dialogs.PreferencesUtil;
public class PreferencesHyperlink implements IHyperlink {
private final IRegion fUrlRegion;
public PreferencesHyperlink(IRegion urlRegion) {
fUrlRegion = urlRegion;
}
@Override
public IRegion getHyperlinkRegion() {
return fUrlRegion;
}
@Override
public String getTypeLabel() {
return null;
}
@Override
public String getHyperlinkText() {
return null;
}
@Override
public void open() {
PreferencesUtil.createPreferenceDialogOn(Display.getDefault().getActiveShell(), null, null, null).open();
}
}
這樣,當我們點擊「你好」字符串,頁面會被打開
相關問題
- 1. 如何防止鏈接超鏈接
- 2. 如何超級鏈接
- 3. 如何超鏈接圖像
- 4. 如何更新超鏈接?
- 5. 如何在超鏈接中超鏈接條形圖
- 6. asp:超鏈接顯示無超鏈接
- 7. 與超鏈接
- 8. GWT:超鏈接
- 9. D3plus超鏈接
- 10. 從超鏈接
- 11. easeljs超鏈接
- 12. XLConnect超鏈接
- 13. 超鏈接
- 14. System.out超鏈接?
- 15. Excel超鏈接
- 16. 超鏈接
- 17. 超鏈接
- 18. 超鏈接truncatechars
- 19. 的超鏈接
- 20. jquery:div超鏈接
- 21. 超級鏈接
- 22. iPhone超鏈接
- 23. RichTextBox超鏈接
- 24. 超鏈接
- 25. Jade模板:如何在UL中創建超鏈接並描述超鏈接
- 26. 如何將純文本超鏈接轉換爲java中的超鏈接?
- 27. 如何更換鏈接RichTextBox中(Windows phone)系統,以超鏈接
- 28. DataGridView中的超鏈接 - 如何獲得文本和鏈接?
- 29. 如何定義所選超鏈接的鏈接顏色?
- 30. 如何超鏈接到標籤頁而不是主頁鏈接
問題,要求我們推薦或「首選項」找到一本書,工具,軟件庫,教程或其他非現場資源是堆棧溢出的話題,因爲它們傾向於吸引自以爲是的答案和垃圾郵件。相反,請描述問題以及到目前爲止解決問題所做的工作。 –
你可以更具體地說明你想應用什麼樣的超鏈接自定義。 HyperlinkHelper的代碼不是那麼複雜的自定義。但沒有任何要求,很難指向方向 –
我會像下面這樣做:我的語法是一組其他文件上的鏈接。我想添加按Ctrl +點擊功能。即當我按Ctrl +單擊(或按f3)鏈接編輯器將打開鏈接的文件。 問候,弗拉基米爾 –