Eclipse编辑器中的HTML标记悬停

ecbunoof  于 2023-03-22  发布在  Eclipse
关注(0)|答案(2)|浏览(171)

我在Eclipse中为我自己的语言创建了一个编辑器。在这种语言中,有类似javadoc的文档注解。我使用类ITextHover来显示这个文档,当鼠标光标位于注解函数的名称上方时。
问题是,我的文档包含基本的HTML标记(列表,表格,粗体),但悬停只显示纯文本。例如:

当然,我希望它看起来像这样:

我确信这种悬停时的文本格式可以由eclipse处理,因为例如Java编辑器就可以处理。
不幸的是,到目前为止,我发现的唯一线索是使用类IInformationPresenter,我找不到任何关于这个类做什么或如何使用它的信息。有人能帮忙吗?

wwtsj6pe

wwtsj6pe1#

你的ITextHover类应该实现ITextHoverExtension并返回一个可以处理HTML的IInformationControl。标准的DefaultInformationControl处理简单的HTML。
一个例子是标准文本编辑器中的文本悬停:

class TextHover extends DefaultTextHover implements ITextHoverExtension {
    public TextHover(ISourceViewer sourceViewer) {
        super(sourceViewer);
    }

    ... other stuff ...

    @Override
    public IInformationControlCreator getHoverControlCreator() {
        return new IInformationControlCreator() {
            @Override
            public IInformationControl createInformationControl(Shell parent) {
                return new DefaultInformationControl(parent, EditorsUI.getTooltipAffordanceString());
            }
        };
    }
}
qvsjd97n

qvsjd97n2#

因为我花了很多时间来解决这个问题,所以我把它贴在这里,也许有人会觉得它很有帮助:

public static class DocumentationInformationControl extends AbstractInformationControl implements IInformationControlExtension3,IInformationControlExtension5{

    private Browser fBrowser;
    private String input;

    public DocumentationInformationControl(Shell parent) {
        super(parent,true);
        create();
    }

    @Override
    protected void createContent(Composite parent) {
        fBrowser = new Browser(parent, SWT.NONE);
        fBrowser.setJavascriptEnabled(false);
    }

    @Override
    public void setInformation(String input) {
        super.setInformation(input);
        this.input = input;
        fBrowser.setText(input);

    }

    @Override
    public boolean hasContents() {
        return StringUtils.isNoneBlank(input);
    }
    
    @Override
    public IInformationControlCreator getInformationPresenterControlCreator() {
        return new IInformationControlCreator() {

            @Override
            public IInformationControl createInformationControl(Shell parent) {
                return new DocumentationInformationControl(parent);
            }
        };
    }

    
}

这里的界面和演示者只是告诉底层框架,当鼠标悬停在工具提示/弹出窗口上时,它将保持打开状态(显示),而失去了主要对象本身的鼠标悬停。

相关问题