/******************************************************************************* * This file is part of the Symfony eclipse plugin. * * (c) Robert Gruendler <r.gruendler@gmail.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. ******************************************************************************/ package com.dubture.symfony.ui.editor.hyperlink; import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.IRegion; import org.eclipse.jface.text.Region; import org.eclipse.php.internal.ui.editor.hyperlink.PHPHyperlinkDetector; /** * * Abstract Baseclass for string hyperlink detectors. * * * @author Robert Gruendler <r.gruendler@gmail.com> * */ @SuppressWarnings("restriction") public abstract class StringHyperlinkDetector extends PHPHyperlinkDetector { public static IRegion findWord(IDocument document, int offset) { int start = -2; int end = -1; try { int pos = offset; char c; char separator = '?'; int length = document.getLength(); // search backwards until a string delimiter // to find the start position while (pos >= 0) { c = document.getChar(pos); if (c == '\'' || c == '"' || c == ' ') { separator = c; break; } --pos; } start = pos; pos++; // search forward until a string delimiter // to find the end position while (pos < length) { c = document.getChar(pos); if (c == separator) { end = pos; break; } ++pos; } if (separator != '?' && start >= 0 && end != 0) { start++; int rlength = end - start; return new Region(start, rlength ); } } catch (BadLocationException x) { } return null; } }