Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.vogella.ide.editor.asciidoc;

public class AsciiDocConstants {
public static final String IMAGESDIR = "imagesdir";
public static final String IMG_DIRECTORY = "img";
}
Original file line number Diff line number Diff line change
@@ -1,26 +1,22 @@
package com.vogella.ide.editor.asciidoc;

import java.io.File;

import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IPath;
import org.eclipse.e4.core.contexts.IEclipseContext;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.IRegion;
import org.eclipse.jface.text.ITextHover;
import org.eclipse.jface.text.ITextViewer;
import org.eclipse.jface.text.Region;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.PlatformUI;

import java.io.File;
import com.vogella.ide.editor.asciidoc.util.AsciiDocResourceUtil;

public class ImageHover implements ITextHover {

private static final String IMAGE_PREFIX = "image::";
private static final String IMAGE_DIRECTORY = "img"; // Directory for images

@Override
public String getHoverInfo(ITextViewer textViewer, IRegion hoverRegion) {
Expand All @@ -42,15 +38,22 @@ public String getHoverInfo(ITextViewer textViewer, IRegion hoverRegion) {
String imageName = lineContent.substring(startIndex, endIndex).trim();


IContainer parent = getParentFolder();
IContainer imgFolder = parent.getFolder(IPath.fromOSString("img"));
IContainer parent = AsciiDocResourceUtil.getParentFolder();
if (parent == null || !parent.isAccessible()) {
return "";
}

IContainer imgFolder = parent.getFolder(IPath.fromOSString(AsciiDocConstants.IMG_DIRECTORY));
if (!imgFolder.isAccessible()) {
return "Image folder '" + AsciiDocConstants.IMG_DIRECTORY + "' not found";
}


IFile imageFile = imgFolder.getFile(IPath.fromOSString(imageName)); // Replace "filename.ext" with your actual file name

IFile imageFile = imgFolder.getFile(IPath.fromOSString(imageName));

// Check if image file exists
if (imageFile.exists()) {

// Check if image file exists - use isAccessible to avoid rule conflicts
if (imageFile.isAccessible()) {
// Load and display the image in the hover (assuming HTML rendering is supported)
return "<img src=\"" + imageFile.getFullPath()+ "\" alt=\"" + imageName + "\">";
} else {
Expand All @@ -73,19 +76,4 @@ public String getHoverInfo(ITextViewer textViewer, IRegion hoverRegion) {
public IRegion getHoverRegion(ITextViewer textViewer, int offset) {
return new Region(offset, 0);
}


private IContainer getParentFolder() {
IEclipseContext context = PlatformUI.getWorkbench().getService(IEclipseContext.class);
Object object = context.get("activeEditor");

if (object instanceof IEditorPart activeEditor) {

IEditorInput editorInput = activeEditor.getEditorInput();
IResource adapter = editorInput.getAdapter(IResource.class);
IContainer parent = adapter.getParent();
return parent;
}
return null;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;

import com.vogella.ide.editor.asciidoc.util.AsciiDocResourceUtil;

public class ImageHyperlinkDetector extends AbstractHyperlinkDetector {

private static final String IMAGE_PROPERTY = "image::";
Expand All @@ -45,8 +47,15 @@ public IHyperlink[] detectHyperlinks(ITextViewer textViewer, IRegion region, boo
Region targetRegion = new Region(lineInformationOfOffset.getOffset() + IMAGE_PROPERTY.length(),
lineInformationOfOffset.getLength() - IMAGE_PROPERTY.length());

IContainer parent = getParentFolder();
IContainer imgFolder = parent.getFolder(IPath.fromOSString("img"));
IContainer parent = AsciiDocResourceUtil.getParentFolder();
if (parent == null || !parent.isAccessible()) {
return null;
}

IContainer imgFolder = parent.getFolder(IPath.fromOSString(AsciiDocConstants.IMG_DIRECTORY));
if (!imgFolder.isAccessible()) {
return null;
}

// Only take resources, which have the "png" file extension
IHyperlink[] result = Arrays.stream(imgFolder.members())
Expand All @@ -67,20 +76,6 @@ public IHyperlink[] detectHyperlinks(ITextViewer textViewer, IRegion region, boo
return null;

}

private IContainer getParentFolder() {
IEclipseContext context = PlatformUI.getWorkbench().getService(IEclipseContext.class);
Object object = context.get("activeEditor");

if (object instanceof IEditorPart activeEditor) {

IEditorInput editorInput = activeEditor.getEditorInput();
IResource adapter = editorInput.getAdapter(IResource.class);
IContainer parent = adapter.getParent();
return parent;
}
return null;
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.PlatformUI;

import com.vogella.ide.editor.asciidoc.util.AsciiDocResourceUtil;

public class IncludeHyperlinkDetector extends AbstractHyperlinkDetector {

private static final String HYPERLINK_PROPERTY = "include::";
Expand All @@ -27,7 +29,7 @@ public class IncludeHyperlinkDetector extends AbstractHyperlinkDetector {
public IHyperlink[] detectHyperlinks(ITextViewer textViewer, IRegion region, boolean canShowMultipleHyperlinks) {

IDocument document = textViewer.getDocument();
IContainer parent = getParentFolder();
IContainer parent = AsciiDocResourceUtil.getParentFolder();

try {
int offset = region.getOffset();
Expand Down Expand Up @@ -72,7 +74,8 @@ public IHyperlink[] detectHyperlinks(ITextViewer textViewer, IRegion region, boo
parent = subfolder;
}

if (!parent.exists()) {
// Check if parent is accessible - avoid potential rule conflicts during builds
if (parent == null || !parent.isAccessible()) {
return null;
}

Expand Down Expand Up @@ -102,18 +105,4 @@ public static boolean containsSubfolder(String relativePath) {
return lastIndexOfParent != -1 && normalizedPath.indexOf("/", lastIndexOfParent + 3) != -1;
}

private IContainer getParentFolder() {
IEclipseContext context = PlatformUI.getWorkbench().getService(IEclipseContext.class);
Object object = context.get("activeEditor");

if (object instanceof IEditorPart activeEditor) {

IEditorInput editorInput = activeEditor.getEditorInput();
IResource adapter = editorInput.getAdapter(IResource.class);
IContainer parent = adapter.getParent();
return parent;
}
return null;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import org.eclipse.jface.text.hyperlink.AbstractHyperlinkDetector;
import org.eclipse.jface.text.hyperlink.IHyperlink;
import org.eclipse.swt.program.Program;
import com.vogella.ide.editor.asciidoc.util.AsciiDocResourceUtil;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.PlatformUI;
Expand All @@ -28,7 +29,7 @@ public class LinkHyperlinkDetector extends AbstractHyperlinkDetector {
public IHyperlink[] detectHyperlinks(ITextViewer textViewer, IRegion region, boolean canShowMultipleHyperlinks) {

IDocument document = textViewer.getDocument();
IContainer parent = getParentFolder();
IContainer parent = AsciiDocResourceUtil.getParentFolder();

try {
int offset = region.getOffset();
Expand Down Expand Up @@ -74,9 +75,10 @@ public void open() {
};
} else if (target.startsWith("./") || target.startsWith("../")) {
// Internal file link → open in Eclipse editor
if (parent != null && parent.exists()) {
// Use isAccessible to avoid rule conflicts during builds
if (parent != null && parent.isAccessible()) {
IResource resource = parent.findMember(new Path(target));
if (resource instanceof IFile file) {
if (resource instanceof IFile file && file.isAccessible()) {
return new IHyperlink[] {
new ResourceHyperlink(targetRegion, resource.getName(), file)
};
Expand All @@ -90,18 +92,4 @@ public void open() {

return null;
}

private IContainer getParentFolder() {
IEclipseContext context = PlatformUI.getWorkbench().getService(IEclipseContext.class);
Object object = context.get("activeEditor");

if (object instanceof IEditorPart activeEditor) {
IEditorInput editorInput = activeEditor.getEditorInput();
IResource adapter = editorInput.getAdapter(IResource.class);
if (adapter != null) {
return adapter.getParent();
}
}
return null;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package com.vogella.ide.editor.asciidoc.util;

import java.util.concurrent.atomic.AtomicReference;

import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IResource;
import org.eclipse.e4.core.contexts.IEclipseContext;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.PlatformUI;

public class AsciiDocResourceUtil {

public static IContainer getParentFolder() {
// Use AtomicReference to hold the result from the UI thread
final AtomicReference<IContainer> containerRef = new AtomicReference<>();

// Ensure UI-related code runs on the UI thread
Display.getDefault().syncExec(() -> {
IEclipseContext context = PlatformUI.getWorkbench().getService(IEclipseContext.class);
Object object = context.get("activeEditor");

if (object instanceof IEditorPart activeEditor) {
IEditorInput editorInput = activeEditor.getEditorInput();
IResource adapter = editorInput.getAdapter(IResource.class);
if (adapter != null) {
containerRef.set(adapter.getParent());
}
}
});

return containerRef.get();
}
}