// Copyright 2001, FreeHEP. package org.freehep.graphicsio.font.truetype; import java.io.IOException; import java.util.HashMap; import java.util.Iterator; import java.util.Map; /** * TrueType Font with all its tables. * * @author Simon Fischer * @version $Id: TTFFont.java,v 1.5 2009-08-17 21:44:45 murkle Exp $ */ public abstract class TTFFont { private Map entry = new HashMap(); public abstract int getFontVersion(); void newTable(String tag, TTFInput input) throws IOException { entry.put(tag, initTable(tag, input)); } private Object initTable(String name, TTFInput input) throws IOException { TTFTable table = null; for (int i = 0; i < TTFTable.TT_TAGS.length; i++) { if (name.equals(TTFTable.TT_TAGS[i])) { try { table = (TTFTable) TTFTable.TABLE_CLASSES[i].newInstance(); table.init(this, input); return table; } catch (Exception e) { e.printStackTrace(); return null; } } } System.err.println("Table '" + name + "' ignored."); return null; } public void show() { System.out.println("Tables:"); for (Iterator i = entry.values().iterator(); i.hasNext();) { System.out.println(i.next()); } } /** Returns the table with the given tag and reads it if necessary. */ public TTFTable getTable(String tag) throws IOException { TTFTable table = (TTFTable) entry.get(tag); if (!table.isRead()) { table.read(); } return table; } /** * Reads all tables. This method does not need to be called since the tables * are read on demand (<tt>getTable()</tt>. It might be useful to call it in * order to print out all available information. */ public void readAll() throws IOException { Iterator i = entry.values().iterator(); while (i.hasNext()) { TTFTable table = (TTFTable) i.next(); if ((table != null) && (!table.isRead())) { table.read(); } } } public void close() throws IOException { } }