package org.jbehave.eclipse.editor;
import org.eclipse.core.resources.IProject;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.ITextViewer;
import org.eclipse.jface.text.ITypedRegion;
import org.jbehave.eclipse.Activator;
import org.jbehave.eclipse.editor.text.ProjectAwareFastPartitioner;
public class EditorUtils {
public static IProject findProject(ITextViewer viewer) {
ProjectAwareFastPartitioner partitioner = (ProjectAwareFastPartitioner) viewer.getDocument().getDocumentPartitioner();
return partitioner.getProject();
}
public static Integer getCharEnd(IDocument document, int lineNumber, int columnNumber) {
try {
return new Integer(document.getLineOffset(lineNumber - 1) + columnNumber);
} catch (BadLocationException e) {
Activator.logError("Unable to calculate charEnd at " + lineNumber +", " + columnNumber, e);
return null;
}
}
public static Integer getCharStart(IDocument document, int lineNumber, int columnNumber) {
try {
int lineStartChar = document.getLineOffset(lineNumber - 1);
Integer charEnd = getCharEnd(document, lineNumber, columnNumber);
if (charEnd != null) {
ITypedRegion typedRegion = document.getPartition(charEnd.intValue() - 2);
return new Integer(typedRegion.getOffset());
} else {
return new Integer(lineStartChar);
}
} catch (BadLocationException e) {
Activator.logError("Unable to calculate charStart at " + lineNumber +", " + columnNumber, e);
return null;
}
}
}