Utils.java
package edu.odu.cs.cowem.documents;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.StringReader;
/**
* Miscellaneous utility routines.
*
* @author zeil
*
*/
public final class Utils {
/**
* Given a message consisting of several lines, displays a selected line
* in context, highlighting an indicated column position.
*
* @param message a message of one or more lines
* @param lineNumber a line number containing a column of interest
* @param column a column number, or -1 if the column is irrelevant
* @return a display consisting of 2 lines before the indicated
* line, the indicated line (highlighted) split at the indicated
* column, and two lines after the indicated line.
*/
public static String extractContext (
final String message,
final int lineNumber,
final int column) {
StringBuilder result = new StringBuilder();
BufferedReader rdr = new BufferedReader(new StringReader(message));
final int contextWidth = 2;
int lineNum = 0;
while (lineNum < lineNumber + contextWidth + 1) {
String line;
try {
line = rdr.readLine();
} catch (IOException e) {
line = null;
}
if (line == null) {
break;
}
if (lineNum == lineNumber) {
result.append("*** ");
result.append(line);
result.append("\n");
if (column >= 0 && column < line.length()) {
result.append("*** ");
for (int i = 0; i < column; ++i) {
result.append(' ');
}
result.append("^\n");
}
} else if ((lineNum >= lineNumber - contextWidth)
&& (lineNum <= lineNumber + contextWidth)) {
result.append(" ");
result.append(line);
result.append("\n");
}
++lineNum;
}
return result.toString();
}
/**
* Uncallable constructor.
*/
private Utils() {
}
}