package net.sourceforge.tagsea.mylyn.task; import java.util.regex.Matcher; import java.util.regex.Pattern; import net.sourceforge.tagsea.mylyn.core.HyperLinkDetector; import org.eclipse.core.resources.IMarker; import org.eclipse.jface.text.IRegion; import org.eclipse.jface.text.ITextViewer; import org.eclipse.jface.text.Region; import org.eclipse.jface.text.hyperlink.IHyperlink; public class TaskHyperlinkDetector extends HyperLinkDetector { private static final String regexp = TaskHyperlink.LINK_TAG + "\\s?((.|\\s)+)\\n?"; private static final Pattern PATTERN = Pattern.compile(regexp, Pattern.CASE_INSENSITIVE); protected IHyperlink extractHyperlink(ITextViewer viewer, int regionOffset, Matcher m) { IRegion sregion = getRegion(m, regionOffset, TaskHyperlink.LINK_TAG); IMarker todo = TaskUtils.markerFromText(m.group(1)); if (todo == null) { this.strikeoutText(viewer, sregion); return null; } else { return new TaskHyperlink(sregion, todo); } } @Override protected Pattern getPattern() { return PATTERN; } protected IRegion getRegion(Matcher m, int regionOffset, String linkTag) { int start = m.start(); int end = m.end(); start += (regionOffset + linkTag.length()+1); end += regionOffset - (linkTag.length() + 1); return new Region(start, end - start); } }