/* * $Id: NameWriter.java,v 1.9 2004/06/16 07:02:52 eed3si9n Exp $ * * $Copyright: copyright (c) 2003, e.e d3si9n $ * $License: * This source code is part of DoubleType. * DoubleType is a graphical typeface designer. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This Program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * In addition, as a special exception, e.e d3si9n gives permission to * link the code of this program with any Java Platform that is available * to public with free of charge, including but not limited to * Sun Microsystem's JAVA(TM) 2 RUNTIME ENVIRONMENT (J2RE), * and distribute linked combinations including the two. * You must obey the GNU General Public License in all respects for all * of the code used other than Java Platform. If you modify this file, * you may extend this exception to your version of the file, but you are not * obligated to do so. If you do not wish to do so, delete this exception * statement from your version. * $ */ package org.doubletype.ossa.truetype; import java.io.IOException; import java.util.ArrayList; /** * @author e.e */ public class NameWriter extends FontFormatWriter { public static final String k_regular = "Regular"; private static final String k_utf16be = "UTF-16BE"; private static final String k_iso8859_1 = "ISO-8859-1"; String m_copyright = "\u00A9 Copyright"; String m_familyName = "Temp"; String m_subFamilyName = k_regular; String m_unique = "eed3si9n: Temp Regular: 2003"; String m_fullFontName = "Temp"; String m_version = "0.00"; String m_psName = "Temp"; String m_tradeMark = ""; String m_manufacturer = "eed3si9n"; String m_year = "2004"; String m_sample = "The quick brown fox jumps over the lazy dog."; private ArrayList<TTName> m_names = new ArrayList<>(); public NameWriter() { super(); } private void prepare() { m_copyright = "\u00A9 Copyright " + m_year + ", " + m_manufacturer + "."; m_unique = "dtype: " + m_manufacturer + ": " + m_familyName + " " + m_subFamilyName + ": " + "Version " + m_version + ": " + m_year; m_fullFontName = m_familyName; m_psName = m_fullFontName; if (m_tradeMark.length() == 0) { m_tradeMark = "n/a"; } m_names.clear(); addNames(); } private void addNames() { addMacintoshRomanEnglish(0, m_copyright); addMacintoshRomanEnglish(1, m_familyName); addMacintoshRomanEnglish(2, m_subFamilyName); addMacintoshRomanEnglish(3, m_unique); addMacintoshRomanEnglish(4, m_fullFontName); addMacintoshRomanEnglish(5, "Version " + m_version); addMacintoshRomanEnglish(6, m_psName); addMacintoshRomanEnglish(7, m_tradeMark); addMacintoshRomanEnglish(8, m_manufacturer); addMicrosoftUnicodeEnglish(0, m_copyright); addMicrosoftUnicodeEnglish(1, m_familyName); addMicrosoftUnicodeEnglish(2, m_subFamilyName); addMicrosoftUnicodeEnglish(3, m_unique); addMicrosoftUnicodeEnglish(4, m_fullFontName); addMicrosoftUnicodeEnglish(5, "Version " + m_version); addMicrosoftUnicodeEnglish(6, m_psName); addMicrosoftUnicodeEnglish(7, m_tradeMark); addMicrosoftUnicodeEnglish(8, m_manufacturer); // addMicrosoftUnicodeEnglish(19, m_sample); } private void addMacintoshRomanEnglish(int a_nameId, String a_value) { try { add(TTName.k_macintosh, TTName.k_macRomanEncode, TTName.k_macEnglishLang, a_nameId, a_value.getBytes(k_iso8859_1)); } catch (IOException e) { e.printStackTrace(); } } private void addMicrosoftUnicodeEnglish(int a_nameId, String a_value) { try { add(TTName.k_microsoft, TTName.k_winUnicodeEncode, TTName.k_winEnglishLang, a_nameId, a_value.getBytes(k_utf16be)); } catch (IOException e) { e.printStackTrace(); } } private void add(int a_platformId, int a_encodingId, int a_languageId, int a_nameId, byte a_bytes[]) { TTName name = new TTName(a_platformId, a_encodingId, a_languageId, a_nameId, a_bytes); m_names.add(name); } public void write() throws IOException { prepare(); // table version number writeUInt16(0); // number of name records writeUInt16(m_names.size()); // Offset to start of string storage (from start of table). writeUInt16(12 * m_names.size() + 6); int offset = 0; for (TTName name : m_names) { writeUInt16(name.getPlatformId()); writeUInt16(name.getEncodingId()); writeUInt16(name.getLanguageId()); writeUInt16(name.getNameId()); writeUInt16(name.getStringLength()); writeUInt16(offset); offset += name.getStringLength(); } for (TTName name : m_names) { m_buffer.write(name.getBytes()); } pad(); } protected String getTag() { return "name"; } }