package net.sourceforge.tagsea.mylyn.waypoints; import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import net.sourceforge.tagsea.core.ui.TagSEAView; import net.sourceforge.tagsea.mylyn.core.HyperLinkDetector; 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 TagHyperlinkDetector extends HyperLinkDetector { private static final String regexp = WaypointsUtils.TAG_MARKER + "\\s?([\\w|\\.]+)"; public static final Pattern PATTERN = Pattern.compile(regexp, Pattern.CASE_INSENSITIVE); protected IHyperlink extractHyperlink(ITextViewer viewer, int regionOffset, Matcher m) { IRegion sregion = getRegion(m, regionOffset, WaypointsUtils.TAG_MARKER); String tag = m.group(); if (tag == null) { // Not sure that this will ever be called. this.strikeoutText(viewer, sregion); return null; } else { TagSEAView view = WaypointsUtils.getTagSEAView(); return new TagsHyperlink(view, tag, sregion); } } protected Pattern getPattern() { return PATTERN; } public String[] getTagInfo(Matcher m) { List<String> tags = new ArrayList<String>(); m.reset(); while (m.find()) { String tagStr = m.group(); tagStr = tagStr.replace(WaypointsUtils.TAG_MARKER, ""); tags.add(tagStr.trim()); } return tags.toArray(new String[0]); } protected IRegion getRegion(Matcher m, int regionOffset, String linkTag) { int start = m.start(1); int end = m.end(1); int length = end-start; start += regionOffset; return new Region(start, length); } }