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");
}
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;
}
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;
}
}
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;
}
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()]);
}
Aggregations