blob: 24e12884b1de2906d32b6ee43d1d7c8ab4cb160b [file] [log] [blame]
package org.unicode.cldr.util;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import com.ibm.icu.util.ICUUncheckedIOException;
public class FileProcessor {
private int lineCount;
protected boolean doHash = true;
protected void handleStart() {
}
/**
* Return false to abort
*
* @param lineCount
* @param line
* @return
*/
protected boolean handleLine(int lineCount, String line) {
return true;
}
protected void handleEnd() {
}
public int getLineCount() {
return lineCount;
}
public void handleComment(String line, int commentCharPosition) {
}
public FileProcessor process(Class<?> classLocation, String fileName) {
try {
BufferedReader in = FileReaders.openFile(classLocation, fileName);
return process(in, fileName);
} catch (Exception e) {
throw (RuntimeException) new IllegalArgumentException(lineCount + ":\t" + 0).initCause(e);
}
}
public FileProcessor process(String fileName) {
try {
FileInputStream fileStream = new FileInputStream(fileName);
InputStreamReader reader = new InputStreamReader(fileStream, CldrUtility.UTF8);
BufferedReader bufferedReader = new BufferedReader(reader, 1024 * 64);
return process(bufferedReader, fileName);
} catch (Exception e) {
throw (RuntimeException) new IllegalArgumentException(lineCount + ":\t" + 0).initCause(e);
}
}
public FileProcessor process(String directory, String fileName) {
try {
FileInputStream fileStream = new FileInputStream(directory + File.separator + fileName);
InputStreamReader reader = new InputStreamReader(fileStream, CldrUtility.UTF8);
BufferedReader bufferedReader = new BufferedReader(reader, 1024 * 64);
return process(bufferedReader, fileName);
} catch (Exception e) {
throw (RuntimeException) new IllegalArgumentException(lineCount + ":\t" + 0).initCause(e);
}
}
public FileProcessor process(BufferedReader in, String fileName) {
handleStart();
String line = null;
lineCount = 1;
try {
for (;; ++lineCount) {
line = in.readLine();
if (line == null) {
break;
}
int comment = line.indexOf("#");
if (comment == 0 || doHash && comment >= 0) {
handleComment(line, comment);
line = line.substring(0, comment);
}
if (line.startsWith("\uFEFF")) {
line = line.substring(1);
}
line = line.trim();
if (line.length() == 0) {
continue;
}
if (!handleLine(lineCount, line)) {
break;
}
}
in.close();
handleEnd();
} catch (IOException e) {
throw new ICUUncheckedIOException(lineCount + ":\t" + line, e);
}
return this;
}
}