/******************************************************************************* * Copyright (c) 2016 Bruno Medeiros and other Contributors. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Bruno Medeiros - initial API and implementation *******************************************************************************/ package melnorme.lang.ide.ui.text; import org.eclipse.core.resources.IProject; import melnorme.lang.ide.core.LangCore; import melnorme.lang.ide.core.utils.ResourceUtils; import melnorme.lang.ide.ui.editor.hover.AbstractDocDisplayInfoSupplier; import melnorme.lang.tooling.LANG_SPECIFIC; import melnorme.lang.tooling.ast.SourceRange; import melnorme.lang.tooling.common.ISourceBuffer; import melnorme.lang.tooling.common.ops.IOperationMonitor; import melnorme.lang.tooling.toolchain.ops.AbstractToolOperation; import melnorme.lang.tooling.toolchain.ops.OperationSoftFailure; import melnorme.lang.tooling.toolchain.ops.SourceOpContext; import melnorme.utilbox.concurrency.OperationCancellation; import melnorme.utilbox.core.CommonException; import melnorme.utilbox.misc.Location; import mmrnmhrm.core.engine.DeeLanguageEngine; import mmrnmhrm.ui.editor.hover.HoverUtil; @LANG_SPECIFIC public class DocDisplayInfoSupplier extends AbstractDocDisplayInfoSupplier { public DocDisplayInfoSupplier(ISourceBuffer sourceBuffer, int offset) { super(sourceBuffer, offset); } @Override public String doGetDocumentation(IOperationMonitor om) { String info = super.doGetDocumentation(om); if(info != null) { return HoverUtil.getCompleteHoverInfo(info, getCSSStyles()); } return null; } protected String getCSSStyles() { return HoverUtil.getDDocPreparedCSS(); } @Override protected String escapeToHTML(String rawDocumentation) { // don't escape, DDoc has HTML already return rawDocumentation; } @Override protected AbstractToolOperation<String> getFindDocOperation(ISourceBuffer sourceBuffer, int offset) { SourceOpContext opContext = sourceBuffer.getSourceOpContext(new SourceRange(offset, 0)); AbstractToolOperation<String> findDocOp = new AbstractToolOperation<String>() { @Override public String executeToolOperation(IOperationMonitor om) throws CommonException, OperationCancellation, OperationSoftFailure { IProject project = ResourceUtils.getProjectFromMemberLocation(sourceBuffer.getLocation_opt()); String dubPath = LangCore.settings().SDK_LOCATION.getValue(project).toString(); Location fileLocation = opContext.getFileLocation(); int offset = opContext.getOffset(); return DeeLanguageEngine.getDefault(). new FindDDocViewOperation(fileLocation, offset, -1, dubPath).runEngineOperation(om); } }; return findDocOp; } }