/** * writes table directory. * * @throws IOException */ private void writeTableDirectory() throws IOException { int headerLength = m_tables.size() * 16 + 16; int tableOffset = headerLength; for (FontFormatWriter table : m_tables) { table.setOffset(tableOffset); tableOffset += table.size(); } // for table ArrayList<FontFormatWriter> tables = (ArrayList<FontFormatWriter>) m_tables.clone(); Collections.sort( tables, new Comparator<FontFormatWriter>() { public int compare(FontFormatWriter a_lhs, FontFormatWriter a_rhs) { return a_lhs.getTag().compareTo(a_rhs.getTag()); } public boolean equals(Object a_value) { return false; } }); writeFixed32(1.0); int numOfTables = tables.size(); writeUInt16(numOfTables); int searchRange = getSearchRange(numOfTables); writeUInt16(searchRange); int entrySelector = getEntrySelector(numOfTables); writeUInt16(entrySelector); writeUInt16(numOfTables * 16 - searchRange); for (FontFormatWriter table : tables) { writeTag(table.getTag()); writeUInt32(table.getCheckSum()); writeUInt32(table.getOffset()); writeUInt32(table.size()); } // for // padding is always 4 zeros for (int i = 0; i < 4; i++) { writeUInt8(0); } // for i }