/******************************************************************************* * Copyright (c) 2007, 2017 Alphonse Van Assche and others. * 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: * Alphonse Van Assche * Andrew Overholt *******************************************************************************/ package org.eclipse.linuxtools.internal.rpm.ui.editor.hyperlink; import org.eclipse.jface.text.IRegion; import org.eclipse.jface.text.ITextViewer; import org.eclipse.jface.text.hyperlink.IHyperlink; import org.eclipse.jface.text.hyperlink.URLHyperlink; import org.eclipse.jface.text.hyperlink.URLHyperlinkDetector; import org.eclipse.linuxtools.internal.rpm.ui.editor.SpecfileEditor; import org.eclipse.linuxtools.internal.rpm.ui.editor.UiUtils; import org.eclipse.linuxtools.rpm.ui.editor.parser.Specfile; /** * URL hyperlink with macro detector. * derived form the JFace URLHyperlinkDetector class * */ public class URLHyperlinkWithMacroDetector extends URLHyperlinkDetector { private Specfile specfile; @Override public IHyperlink[] detectHyperlinks(ITextViewer textViewer, IRegion region, boolean canShowMultipleHyperlinks) { if (specfile == null) { SpecfileEditor a = this.getAdapter(SpecfileEditor.class); if (a != null) { specfile = a.getSpecfile(); } else { return null; } } IHyperlink[] returned = super.detectHyperlinks(textViewer, region, canShowMultipleHyperlinks); if (returned != null && returned.length > 0) { IHyperlink hyperlink = returned[0]; if (hyperlink instanceof URLHyperlink) { URLHyperlink urlHyperlink = (URLHyperlink) hyperlink; String newURLString = UiUtils.resolveDefines(specfile, urlHyperlink.getURLString()); return new IHyperlink[] {new URLHyperlink(urlHyperlink.getHyperlinkRegion(), newURLString)}; } } return returned; } public void setSpecfile(Specfile specfile) { this.specfile = specfile; } }