package org.radrails.rails.internal.ui;
import org.eclipse.core.resources.IProject;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.IRegion;
import org.eclipse.ui.console.IHyperlink;
import org.radrails.rails.internal.ui.generators.GeneratorsConsoleLine;
import org.radrails.rails.ui.RailsUILog;
import org.rubypeople.rdt.internal.debug.ui.console.RubyConsoleTracker;
public class RailsConsoleTracker extends RubyConsoleTracker
{
public void lineAppended(IRegion line)
{
try
{
int prefix = 0;
String text = getText(line);
while (GeneratorsConsoleLine.isMatching(text))
{
IProject project = getProject();
if (project == null)
return;
RailsConsoleLine consoleLine = new GeneratorsConsoleLine(text, project);
IHyperlink link = new RailsConsoleHyperlink(fConsole, consoleLine);
fConsole.addLink(link, line.getOffset() + prefix + consoleLine.getOffset(), consoleLine.getLength());
prefix = consoleLine.getOffset() + consoleLine.getLength();
int substring = consoleLine.getOffset() + consoleLine.getLength();
if (substring >= text.length())
{
text = "";
}
else if (substring > 0)
{
text = text.substring(substring);
if (text.startsWith(":in `require':"))
{
text = text.substring(14);
prefix += 14;
}
}
}
}
catch (BadLocationException e)
{
RailsUILog.logError("Error hyperlinking console line", e);
}
}
}