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)链接编辑器将打开链接的文件。 问候,弗拉基米尔 –