/* * $Id: Engine.java,v 1.84 2004/12/27 04:56:03 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; import java.io.File; import java.io.FileNotFoundException; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import java.util.logging.Level; import java.util.logging.Logger; import org.doubletype.ossa.module.GlyphFile; import org.doubletype.ossa.module.TypefaceFile; import org.doubletype.ossa.truetype.TTCodePage; import org.doubletype.ossa.truetype.TTUnicodeRange; /** * @author e.e */ public class Engine { private TypefaceFile m_typeface; private GlyphFile m_root; // -------------------------------------------------------------- public Engine() { } public void setAdvanceWidth(int a_value) { if (m_root == null) { return; } m_root.setAdvanceWidth(a_value); } public void buildNewTypeface(String a_name, File a_dir) throws FileNotFoundException { if (a_name == null || a_name.equals("")) { return; } TypefaceFile typeface = new TypefaceFile(a_name, a_dir); typeface.setAuthor("no body"); DateFormat format = new SimpleDateFormat("yyyy"); typeface.setCopyrightYear(format.format(new Date())); typeface.setFontFamilyName(a_name); typeface.addCodePage(TTCodePage.US_ASCII.toString()); typeface.addCodePage(TTCodePage.Latin_1.toString()); setTypeface(typeface); } public void addDefaultGlyphs() { m_typeface.addRequiredGlyphs(); m_typeface.addBasicLatinGlyphs(); } public void setTypeface(TypefaceFile a_typeface) { m_typeface = a_typeface; } /** * Create glyph out of given unicode, and add it to the typeface. * * @param a_unicode */ public GlyphFile addNewGlyph(long a_unicode) { GlyphFile retval; retval = m_typeface.createGlyph(a_unicode); addGlyphToTypeface(retval); return retval; } public void checkUnicodeBlock(long a_unicode) { TTUnicodeRange range = TTUnicodeRange.of(a_unicode); if (range == null) { return; } if (m_typeface.containsUnicodeRange(range.toString())) { return; } m_typeface.addUnicodeRange(range.toString()); } private void addGlyphToTypeface(GlyphFile a_file) { m_typeface.addGlyph(a_file); setRoot(a_file); } public void buildTrueType() { if (m_typeface == null) { return; } try { m_typeface.buildTTF(); m_typeface.getFont(); } catch (Exception e) { Logger.getLogger(Engine.class.getName()).log(Level.SEVERE, null, e); } return; } public TypefaceFile getTypeface() { return m_typeface; } public File getGlyphPath() { return m_typeface.getGlyphPath(); } public GlyphFile getRoot() { return m_root; } public void setRoot(GlyphFile a_file) { m_root = a_file; } public void addCodePage(String a_codePage) { if (m_typeface == null) { return; } m_typeface.addCodePage(a_codePage); } public void removeCodePage(String a_codePage) { if (m_typeface == null) { return; } m_typeface.removeCodePage(a_codePage); } public void setAuthor(String a_value) { if (m_typeface == null) { return; } m_typeface.setAuthor(a_value); } public void setCopyrightYear(String a_value) { if (m_typeface == null) { return; } m_typeface.setCopyrightYear(a_value); } public void setCreationDate(Date a_value) { if (m_typeface == null) { return; } m_typeface.setCreationDate(a_value); } public void setModificationDate(Date a_value) { if (m_typeface == null) { return; } m_typeface.setModificationDate(a_value); } public void setFontFamilyName(String a_value) { if (m_typeface == null) { return; } m_typeface.setFontFamilyName(a_value); } public void setTypefaceLicense(String a_value) { if (m_typeface == null) { return; } m_typeface.setLicense(a_value); } public void setBaseline(double a_value) { if (m_typeface == null) { return; } double min = m_typeface.getBottomSideBearing(); double max = m_typeface.getMeanline(); if (a_value < min) { a_value = min; } if (a_value > max) { a_value = max; } try { m_typeface.setDescender(a_value - min); m_typeface.setAscender(m_typeface.getEm() - m_typeface.getTopSideBearing() - a_value); m_typeface.setXHeight(max - a_value); } catch (OutOfRangeException e) { e.printStackTrace(); } } public void setMeanline(double a_value) { if (m_typeface == null) { return; } double min = m_typeface.getBaseline(); double max = m_typeface.getEm() - m_typeface.getTopSideBearing(); if (a_value < min) { a_value = min; } if (a_value > max) { a_value = max; } try { m_typeface.setXHeight(a_value - min); } catch (OutOfRangeException e) { e.printStackTrace(); } } }