/* * Copyright (c) 1998-2011 Caucho Technology -- all rights reserved * * This file is part of Resin(R) Open Source * * Each copy or derived work must preserve the copyright notice and this * notice unmodified. * * Resin Open Source 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. * * Resin Open Source 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, or any warranty * of NON-INFRINGEMENT. See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License * along with Resin Open Source; if not, write to the * * Free Software Foundation, Inc. * 59 Temple Place, Suite 330 * Boston, MA 02111-1307 USA * * @author Scott Ferguson */ package com.caucho.quercus.lib.pdf; /** * font */ public class Font { private String _fontName; private String _weight; private double _llxBBox; private double _llyBBox; private double _urxBBox; private double _uryBBox; private double _capHeight; private double _xHeight; private double _ascender; private double _descender; private double _underlinePosition; private double _underlineThickness; private double _italicAngle; private FontChar []_chars = new FontChar[256]; public String getFontName() { return _fontName; } void setFontName(String name) { _fontName = name; } public String getWeight() { return _weight; } void setWeight(String weight) { _weight = weight; } void setBBox(double llx, double lly, double urx, double ury) { _llxBBox = llx; _llyBBox = lly; _urxBBox = urx; _uryBBox = ury; } public double getCapHeight() { return _capHeight; } void setCapHeight(double height) { _capHeight = height; } public double getXHeight() { return _xHeight; } void setXHeight(double height) { _xHeight = height; } public double getAscender() { return _ascender; } void setAscender(double ascender) { _ascender = ascender; } public double getDescender() { return _descender; } void setDescender(double descender) { _descender = descender; } public double getUnderlinePosition() { return _underlinePosition; } void setUnderlinePosition(double underlinePosition) { _underlinePosition = underlinePosition; } public double getUnderlineThickness() { return _underlineThickness; } void setUnderlineThickness(double underlineThickness) { _underlineThickness = underlineThickness; } public double getItalicAngle() { return _italicAngle; } void setItalicAngle(double italicAngle) { _italicAngle = italicAngle; } void addChar(FontChar fontChar) { int code = fontChar.getCode(); if (code >= 0 && code < _chars.length) _chars[code] = fontChar; } public double stringWidth(String text) { double width = 0; int len = text.length(); char prevChar = 0; for (int i = 0; i < len; i++) { char ch = text.charAt(i); if (ch >= 256) continue; FontChar fontChar = _chars[ch]; if (fontChar == null) continue; width += fontChar.getWidth(); // XXX: kerning prevChar = ch; } return width; } }