public FileVersion newSourceFile(String path) {
		try {
			linePos = new int[1024];
			columnPos = new int[1024];
			int pos = 0;
			BufferedReader inp = new BufferedReader(new FileReader(path));
			linePos[pos] = columnPos[pos] = 1;
			pos++;
			while (true) {
				String line = inp.readLine();
				if (line == null) {
					break;
				}
				for (int i = 0; i <= line.length(); i++) {
					if (pos >= linePos.length) {
						int[] copy = new int[linePos.length << 1];
						System.arraycopy(linePos, 0, copy, 0, linePos.length);
						linePos = copy;
						copy = new int[columnPos.length << 1];
						System.arraycopy(columnPos, 0, copy, 0, columnPos.length);
						columnPos = copy;
					}
					if (i < line.length()) {
						linePos[pos] = linePos[pos - 1];
						columnPos[pos] = columnPos[pos - 1] + (i > 0 && line.charAt(i - 1) == '\t' ? TAB_WIDTH : 1);
					} else {
						linePos[pos] = linePos[pos - 1] + 1;
						columnPos[pos] = 1;
					}
					pos++;
				}
			}
			inp.close();
		} catch (IOException ex) {
			throw new RuntimeException(ex);
		}

		return newFile(path);
	}