package com.chookapp.org.bracketeer.core;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.IRegion;
import org.eclipse.jface.text.ITextViewerExtension5;
import org.eclipse.jface.text.Region;
import org.eclipse.jface.text.source.ISourceViewer;
public class TextUtils
{
public static IRegion getWidgetRange(ISourceViewer sv, int offset, int length)
{
if (sv instanceof ITextViewerExtension5) {
ITextViewerExtension5 extension= (ITextViewerExtension5) sv;
IRegion widgetRange= extension.modelRange2WidgetRange(new Region(offset, length));
if (widgetRange == null)
return null;
try {
// don't draw if the pair position is really hidden and widgetRange just
// marks the coverage around it.
IDocument doc= sv.getDocument();
int startLine= doc.getLineOfOffset(offset);
int endLine= doc.getLineOfOffset(offset + length);
if (extension.modelLine2WidgetLine(startLine) == -1 || extension.modelLine2WidgetLine(endLine) == -1)
return null;
} catch (BadLocationException e) {
return null;
}
return widgetRange;
} else {
IRegion region= sv.getVisibleRegion();
if (region.getOffset() > offset || region.getOffset() + region.getLength() < offset + length)
return null;
offset -= region.getOffset();
return new Region(offset, length);
}
}
}