// Copyright 2001, FreeHEP.
package org.freehep.graphicsio.font.truetype;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import org.geogebra.common.util.Charsets;
/**
* Concrete implementation of the TrueType Font, read from a TTF File.
*
* @author Mark Donszelmann
* @version $Id: TTFFile.java,v 1.5 2009-08-17 21:44:45 murkle Exp $
*/
public class TTFFile extends TTFFont {
private static final String mode = "r";
private String fileName;
private RandomAccessFile ttf;
private int sfntMajorVersion;
private int sfntMinorVersion;
private int numberOfTables;
private int searchRange;
private int entrySelector;
private int rangeShift;
public TTFFile(String name) throws FileNotFoundException, IOException {
fileName = name;
ttf = new RandomAccessFile(name, mode);
// read table directory
ttf.seek(0);
sfntMajorVersion = ttf.readUnsignedShort();
sfntMinorVersion = ttf.readUnsignedShort();
numberOfTables = ttf.readUnsignedShort();
searchRange = ttf.readUnsignedShort();
entrySelector = ttf.readUnsignedShort();
rangeShift = ttf.readUnsignedShort();
// read table entries
for (int i = 0; i < numberOfTables; i++) {
ttf.seek(12 + i * 16);
byte b[] = new byte[4];
ttf.readFully(b);
String tag = new String(b, Charsets.UTF_8);
int checksum = ttf.readInt();
int offset = ttf.readInt();
int len = ttf.readInt();
TTFInput input = new TTFFileInput(ttf, offset, len, checksum);
newTable(tag, input);
}
}
@Override
public int getFontVersion() {
return sfntMajorVersion;
}
@Override
public void close() throws IOException {
super.close();
ttf.close();
}
@Override
public void show() {
super.show();
System.out.println("Font: " + fileName);
System.out.println(
" sfnt: " + sfntMajorVersion + "." + sfntMinorVersion);
System.out.println(" numTables: " + numberOfTables);
System.out.println(" searchRange: " + searchRange);
System.out.println(" entrySelector: " + entrySelector);
System.out.println(" rangeShift: " + rangeShift);
}
}