Search in sources :

Example 26 with IHyperlink

use of org.eclipse.jface.text.hyperlink.IHyperlink in project linuxtools by eclipse.

the class SpecfileElementHyperlinkDetectorTest method testDetectHyperlinks.

@Test
public void testDetectHyperlinks() throws PartInitException {
    String testText = "%define smth other\nSource0: test.zip\nPatch0: first.patch\n" + "%build\n %{SOURCE0}\n%patch0\n%{smth}\n";
    newFile(testText);
    SpecfileElementHyperlinkDetector elementDetector = new SpecfileElementHyperlinkDetector();
    elementDetector.setSpecfile(specfile);
    IEditorPart openEditor = IDE.openEditor(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(), testFile, "org.eclipse.linuxtools.rpm.ui.editor.SpecfileEditor");
    editor = (SpecfileEditor) openEditor;
    editor.doRevertToSaved();
    // test source element
    IRegion region = new Region(74, 0);
    IHyperlink[] returned = elementDetector.detectHyperlinks(editor.getSpecfileSourceViewer(), region, false);
    SpecfileElementHyperlink element = (SpecfileElementHyperlink) returned[0];
    assertTrue(element.getSource() instanceof SpecfileSource);
    SpecfileSource source = (SpecfileSource) element.getSource();
    assertEquals(source.getSourceType(), SpecfileSource.SourceType.SOURCE);
    assertEquals(source.getFileName(), "test.zip");
    // test patch element
    region = new Region(83, 0);
    returned = elementDetector.detectHyperlinks(editor.getSpecfileSourceViewer(), region, false);
    element = (SpecfileElementHyperlink) returned[0];
    assertTrue(element.getSource() instanceof SpecfileSource);
    source = (SpecfileSource) element.getSource();
    assertEquals(source.getSourceType(), SpecfileSource.SourceType.PATCH);
    assertEquals(source.getFileName(), "first.patch");
    // test define
    region = new Region(89, 0);
    returned = elementDetector.detectHyperlinks(editor.getSpecfileSourceViewer(), region, false);
    element = (SpecfileElementHyperlink) returned[0];
    assertTrue(element.getSource() instanceof SpecfileDefine);
    SpecfileDefine define = (SpecfileDefine) element.getSource();
    assertEquals(define.getName(), "smth");
    assertEquals(define.getStringValue(), "other");
}
Also used : SpecfileElementHyperlink(org.eclipse.linuxtools.internal.rpm.ui.editor.hyperlink.SpecfileElementHyperlink) SpecfileSource(org.eclipse.linuxtools.internal.rpm.ui.editor.parser.SpecfileSource) IHyperlink(org.eclipse.jface.text.hyperlink.IHyperlink) SpecfileDefine(org.eclipse.linuxtools.rpm.ui.editor.parser.SpecfileDefine) Region(org.eclipse.jface.text.Region) IRegion(org.eclipse.jface.text.IRegion) IEditorPart(org.eclipse.ui.IEditorPart) SpecfileElementHyperlinkDetector(org.eclipse.linuxtools.internal.rpm.ui.editor.hyperlink.SpecfileElementHyperlinkDetector) IRegion(org.eclipse.jface.text.IRegion) Test(org.junit.Test)

Example 27 with IHyperlink

use of org.eclipse.jface.text.hyperlink.IHyperlink in project linuxtools by eclipse.

the class GNUHyperlinkDetector method detectHyperlinks.

/**
 * Detector using RuleBasedScanner.
 */
@Override
public IHyperlink[] detectHyperlinks(ITextViewer textViewer, IRegion region, boolean canShowMultipleHyperlinks) {
    if (documentLocation == null) {
        ITextFileBufferManager bufferManager = FileBuffers.getTextFileBufferManager();
        ITextFileBuffer buffer = bufferManager.getTextFileBuffer(textViewer.getDocument());
        if (buffer == null) {
            return null;
        }
        documentLocation = buffer.getLocation().removeLastSegments(1);
    }
    IDocument thisDoc = textViewer.getDocument();
    GNUHyperlinkScanner scanner = new GNUHyperlinkScanner();
    ITypedRegion partitionInfo = null;
    try {
        partitionInfo = thisDoc.getPartition(region.getOffset());
    } catch (org.eclipse.jface.text.BadLocationException e1) {
        e1.printStackTrace();
        return null;
    }
    scanner.setRange(thisDoc, partitionInfo.getOffset(), partitionInfo.getLength());
    Token tmpToken = (Token) scanner.nextToken();
    String tokenStr = (String) tmpToken.getData();
    if (tokenStr == null) {
        return null;
    }
    // null.
    while (region.getOffset() < scanner.getTokenOffset() || region.getOffset() > scanner.getOffset() || tokenStr.equals("_other")) {
        tmpToken = (Token) scanner.nextToken();
        tokenStr = (String) tmpToken.getData();
        if (tokenStr == null)
            return null;
    }
    Region tokenRegion = new Region(scanner.getTokenOffset(), scanner.getTokenLength());
    String line = "";
    try {
        line = thisDoc.get(tokenRegion.getOffset(), tokenRegion.getLength());
    } catch (org.eclipse.jface.text.BadLocationException e1) {
        e1.printStackTrace();
        return null;
    }
    // process file link
    if (tokenStr.equals(GNUHyperlinkScanner.FILE_NAME)) {
        Region pathRegion = null;
        int lineOffset = 0;
        // cut "* " if necessary
        if (line.startsWith("* ")) {
            lineOffset = 2;
            line = line.substring(2);
        }
        pathRegion = new Region(tokenRegion.getOffset() + lineOffset, line.length());
        if (documentLocation == null)
            return null;
        // Replace any escape characters added to name
        line = line.replaceAll("\\\\(.)", "$1");
        IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
        IFile fileLoc = (IFile) root.findMember(documentLocation.append(line));
        if (fileLoc != null && fileLoc.exists()) {
            return new IHyperlink[] { new FileHyperlink(pathRegion, fileLoc) };
        }
    }
    return null;
}
Also used : IFile(org.eclipse.core.resources.IFile) ITextFileBufferManager(org.eclipse.core.filebuffers.ITextFileBufferManager) Token(org.eclipse.jface.text.rules.Token) IWorkspaceRoot(org.eclipse.core.resources.IWorkspaceRoot) IHyperlink(org.eclipse.jface.text.hyperlink.IHyperlink) ITextFileBuffer(org.eclipse.core.filebuffers.ITextFileBuffer) ITypedRegion(org.eclipse.jface.text.ITypedRegion) Region(org.eclipse.jface.text.Region) ITypedRegion(org.eclipse.jface.text.ITypedRegion) IRegion(org.eclipse.jface.text.IRegion) IDocument(org.eclipse.jface.text.IDocument)

Example 28 with IHyperlink

use of org.eclipse.jface.text.hyperlink.IHyperlink in project dbeaver by serge-rider.

the class SQLHyperlinkDetector method detectHyperlinks.

@Nullable
@Override
public synchronized IHyperlink[] detectHyperlinks(ITextViewer textViewer, IRegion region, boolean canShowMultipleHyperlinks) {
    this.contextInformer.searchInformation(region);
    if (!this.contextInformer.hasObjects()) {
        // Long task - just return no links for now
        return null;
    } else {
        // Create hyperlinks based on references
        final SQLIdentifierDetector.WordRegion wordRegion = this.contextInformer.getWordRegion();
        final IRegion hlRegion = new Region(wordRegion.identStart, wordRegion.identEnd - wordRegion.identStart);
        final List<DBSObjectReference> references = this.contextInformer.getObjectReferences();
        IHyperlink[] links = new IHyperlink[references.size()];
        for (int i = 0, objectsSize = references.size(); i < objectsSize; i++) {
            links[i] = new EntityHyperlink(contextInformer.getEditor().getSite(), references.get(i), hlRegion);
        }
        return links;
    }
}
Also used : IHyperlink(org.eclipse.jface.text.hyperlink.IHyperlink) DBSObjectReference(org.jkiss.dbeaver.model.struct.DBSObjectReference) Region(org.eclipse.jface.text.Region) IRegion(org.eclipse.jface.text.IRegion) IRegion(org.eclipse.jface.text.IRegion) EntityHyperlink(org.jkiss.dbeaver.ui.editors.entity.EntityHyperlink) Nullable(org.jkiss.code.Nullable)

Example 29 with IHyperlink

use of org.eclipse.jface.text.hyperlink.IHyperlink in project dbeaver by serge-rider.

the class NavigateObjectHandler method execute.

@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
    IEditorPart activeEditor = HandlerUtil.getActiveEditor(event);
    if (activeEditor instanceof SQLEditorBase) {
        SQLEditorBase editor = (SQLEditorBase) activeEditor;
        IHyperlink hyperlink = getCurrentHyperlink(editor);
        if (hyperlink != null) {
            IRegion selRegion2 = hyperlink.getHyperlinkRegion();
            editor.getTextViewer().setSelectedRange(selRegion2.getOffset(), selRegion2.getLength());
            hyperlink.open();
        }
    }
    return null;
}
Also used : SQLEditorBase(org.jkiss.dbeaver.ui.editors.sql.SQLEditorBase) IHyperlink(org.eclipse.jface.text.hyperlink.IHyperlink) IEditorPart(org.eclipse.ui.IEditorPart) IRegion(org.eclipse.jface.text.IRegion)

Example 30 with IHyperlink

use of org.eclipse.jface.text.hyperlink.IHyperlink in project KaiZen-OpenAPI-Editor by RepreZen.

the class PathParamHyperlinkDetector method doDetect.

@Override
protected IHyperlink[] doDetect(JsonDocument doc, ITextViewer viewer, HyperlinkInfo info, JsonPointer pointer) {
    // find selected parameter
    Matcher matcher = PARAMETER_PATTERN.matcher(info.text);
    String parameter = null;
    int start = 0, end = 0;
    while (matcher.find() && parameter == null) {
        if (matcher.start() <= info.column && matcher.end() >= info.column) {
            parameter = matcher.group(1);
            start = matcher.start();
            end = matcher.end();
        }
    }
    // no parameter found
    if (emptyToNull(parameter) == null) {
        return null;
    }
    Iterable<JsonPointer> targetPaths = findParameterPath(doc, pointer, parameter);
    IRegion linkRegion = new Region(info.getOffset() + start, end - start);
    List<IHyperlink> links = new ArrayList<>();
    for (JsonPointer path : targetPaths) {
        IRegion target = doc.getRegion(path);
        if (target != null) {
            links.add(new SwaggerHyperlink(parameter, viewer, linkRegion, target));
        }
    }
    return links.isEmpty() ? null : links.toArray(new IHyperlink[links.size()]);
}
Also used : SwaggerHyperlink(com.reprezen.swagedit.core.hyperlinks.SwaggerHyperlink) Matcher(java.util.regex.Matcher) IHyperlink(org.eclipse.jface.text.hyperlink.IHyperlink) ArrayList(java.util.ArrayList) Region(org.eclipse.jface.text.Region) IRegion(org.eclipse.jface.text.IRegion) JsonPointer(com.fasterxml.jackson.core.JsonPointer) IRegion(org.eclipse.jface.text.IRegion)

Aggregations

IHyperlink (org.eclipse.jface.text.hyperlink.IHyperlink)47 Test (org.junit.Test)35 XtextResource (org.eclipse.xtext.resource.XtextResource)20 IRegion (org.eclipse.jface.text.IRegion)19 Region (org.eclipse.jface.text.Region)19 IEditorPart (org.eclipse.ui.IEditorPart)9 SourcesFileHyperlinkDetector (org.eclipse.linuxtools.internal.rpm.ui.editor.hyperlink.SourcesFileHyperlinkDetector)5 IFile (org.eclipse.core.resources.IFile)4 JdtHyperlink (org.eclipse.xtext.common.types.xtext.ui.JdtHyperlink)4 XtextEditor (org.eclipse.xtext.ui.editor.XtextEditor)4 AbstractEditorTest (org.eclipse.xtext.ui.testing.AbstractEditorTest)4 IDocument (org.eclipse.jface.text.IDocument)3 URLHyperlink (org.eclipse.jface.text.hyperlink.URLHyperlink)3 SpecfileEditor (org.eclipse.linuxtools.internal.rpm.ui.editor.SpecfileEditor)3 XtextHyperlink (org.eclipse.xtext.ui.editor.hyperlinking.XtextHyperlink)3 XbaseImplementatorsHyperlink (org.eclipse.xtext.xbase.ui.navigation.XbaseImplementatorsHyperlink)3 JsonPointer (com.fasterxml.jackson.core.JsonPointer)2 SwaggerHyperlink (com.reprezen.swagedit.core.hyperlinks.SwaggerHyperlink)2 Field (java.lang.reflect.Field)2 ArrayList (java.util.ArrayList)2