home *** CD-ROM | disk | FTP | other *** search
- package netscape.application;
-
- import java.awt.Image;
- import java.awt.image.CropImageFilter;
- import java.awt.image.FilteredImageSource;
- import java.io.InputStream;
- import java.net.URL;
- import netscape.util.ClassInfo;
- import netscape.util.Codable;
- import netscape.util.CodingException;
- import netscape.util.Decoder;
- import netscape.util.Deserializer;
- import netscape.util.Encoder;
- import netscape.util.Hashtable;
- import netscape.util.Vector;
-
- public class Font implements Codable {
- FontMetrics _metrics;
- String _name;
- URL _url;
- Bitmap _glyphsImage;
- Vector _glyphVector;
- Vector _widthsVector;
- Hashtable _description;
- java.awt.Font _awtFont;
- int _type;
- int _widthsArrayBase;
- int[] _widthsArray;
- static final int INVALID = 0;
- static final int AWT = 1;
- static final int DOWNLOADED = 2;
- public static final int PLAIN = 0;
- public static final int BOLD = 1;
- public static final int ITALIC = 2;
- static final String FAMILY = "Family";
- static final String STYLE = "Style";
- static final String SIZE = "Size";
- static final String WIDTHS = "Widths";
- static final String DESCRIPTION = "Description";
- static final String GLYPHS = "glyphs.gif";
- static final String NAME_KEY = "name";
- static final String STYLE_KEY = "style";
- static final String SIZE_KEY = "size";
- private static Class fontClass;
-
- private static Class fontClass() {
- if (fontClass == null) {
- fontClass = (new Font()).getClass();
- }
-
- return fontClass;
- }
-
- public Font() {
- this._type = 0;
- }
-
- public Font(String var1, int var2, int var3) {
- this();
- this._awtFont = new java.awt.Font(var1, var2, var3);
- this._name = var1;
- if (this._awtFont != null) {
- this._type = 1;
- }
-
- }
-
- public static Font defaultFont() {
- return fontNamed("Helvetica", 0, 12);
- }
-
- public static synchronized Font fontNamed(String var0, int var1, int var2) {
- if (var0 != null && var2 != 0) {
- String var4 = var0 + "." + var1 + "." + var2;
- Application var5 = Application.application();
- Font var3 = (Font)var5.fontByName.get(var4);
- if (var3 != null) {
- return var3;
- } else {
- var3 = new Font(var0, var1, var2);
- if (!var3.isValid()) {
- return null;
- } else {
- var5.fontByName.put(var4, var3);
- return var3;
- }
- }
- } else {
- return null;
- }
- }
-
- public static Font fontNamed(String var0) {
- String[] var1 = stringsForString(var0);
- if (var1 != null && var1.length != 0) {
- String var2 = var1[0];
- if (var2.equals("Default")) {
- return defaultFont();
- } else if (var2.length() == 0) {
- return null;
- } else if (var1.length == 1) {
- Application var8 = Application.application();
- URL var7 = var8._appResources.urlForFontNamed(var2);
- return getFontFromURL(var7, var2);
- } else {
- String var3 = var1[1];
- char var4 = var3.charAt(0);
- int var6;
- if (var4 != 'P' && var4 != 'p') {
- if (var4 != 'B' && var4 != 'b') {
- if (var4 != 'I' && var4 != 'i') {
- try {
- var6 = Integer.parseInt(var3);
- } catch (NumberFormatException var9) {
- var6 = 0;
- }
- } else {
- var6 = 2;
- }
- } else {
- var6 = 1;
- }
- } else {
- var6 = 0;
- }
-
- int var5 = parseInt(var1[2]);
- if (var5 < 0) {
- var5 = 0;
- }
-
- return fontNamed(var2, var6, var5);
- }
- } else {
- return null;
- }
- }
-
- private static int parseInt(String var0) {
- try {
- return Integer.parseInt(var0);
- } catch (NumberFormatException var1) {
- return 0;
- }
- }
-
- private static String[] stringsForString(String var0) {
- if (var0 == null) {
- return null;
- } else if (var0.indexOf(58) == -1) {
- String[] var6 = new String[]{var0};
- return var6;
- } else {
- int var5 = var0.length();
- StringBuffer var3 = new StringBuffer();
- Vector var1 = new Vector();
-
- for(int var4 = 0; var4 < var5; ++var4) {
- if (var0.charAt(var4) == ':') {
- var1.addElement(var3.toString());
- var3 = new StringBuffer();
- } else {
- var3.append(var0.charAt(var4));
- }
- }
-
- var1.addElement(var3.toString());
- var5 = var1.count();
- String[] var2 = new String[var5];
-
- for(int var7 = 0; var7 < var5; ++var7) {
- var2[var7] = (String)var1.elementAt(var7);
- }
-
- return var2;
- }
- }
-
- synchronized void nameFont(String var1, Font var2) {
- Application.application().fontByName.put(var1, var2);
- }
-
- static synchronized Font getFontFromURL(URL var0, String var1) {
- Application var3 = Application.application();
- if (var0 == null) {
- return null;
- } else {
- if (var1 != null) {
- Font var2 = (Font)var3.fontByName.get(var1);
- if (var2 != null) {
- return var2;
- }
- }
-
- Font var4 = new Font(var0, var1);
- if (!var4.isValid()) {
- return null;
- } else {
- var3.fontByName.put(var1, var4);
- return var4;
- }
- }
- }
-
- Font(URL var1, String var2) {
- this();
- this._url = var1;
- this._name = var2;
- this._type = 2;
- this._glyphVector = new Vector();
- this._widthsVector = new Vector();
-
- URL var3;
- try {
- var3 = new URL(var1, this._name + ".font/" + "Description");
- } catch (Exception var8) {
- System.err.println("Font.init() - Trouble creating font description URL " + var1 + this._name + ".font/" + "Description" + " : " + var8);
- this._type = 0;
- return;
- }
-
- try {
- InputStream var4 = var3.openStream();
- Deserializer var5 = new Deserializer(var4);
- this._description = (Hashtable)var5.readObject();
- this._loadWidths();
- } catch (Exception var7) {
- System.err.println("Font.init() - Trouble retrieving font description URL " + var3);
- ((Throwable)var7).printStackTrace(System.err);
- this._type = 0;
- return;
- }
-
- this._loadGlyphs(var1);
- }
-
- void _loadWidths() {
- if (this._description != null) {
- Object[] var1 = this._description.get("Widths");
- if (var1 == null) {
- System.err.println("Font._loadWidths() - No widths information for " + this._name);
- } else {
- this._widthsArrayBase = parseInt((String)var1[0]);
- int var3 = var1.length - 1;
- this._widthsArray = new int[this._widthsArrayBase + var3];
-
- for(int var2 = 0; var2 < this._widthsArrayBase; ++var2) {
- this._widthsArray[var2] = 0;
- }
-
- int var5 = 1;
-
- for(int var4 = this._widthsArrayBase; var5 < var3; ++var4) {
- this._widthsArray[var4] = parseInt((String)var1[var5]);
- ++var5;
- }
-
- if (this._widthsArray[32] == 0) {
- this._widthsArray[32] = 5;
- }
-
- }
- }
- }
-
- Image croppedImage(int var1, int var2, int var3, int var4) {
- Image var5 = AWTCompatibility.awtApplet().createImage(new FilteredImageSource(this._glyphsImage.awtImage.getSource(), new CropImageFilter(var1, var2, var3, var4)));
- return var5;
- }
-
- void _loadGlyphs(URL var1) {
- URL var2;
- try {
- var2 = new URL(var1, this._name + ".font/" + "glyphs.gif");
- } catch (Exception var8) {
- System.err.println("Font.init() - Trouble creating font glyph URL " + var1 + this._name + ".font/" + "glyphs.gif" + " : " + var8);
- this._type = 0;
- return;
- }
-
- this._glyphsImage = Bitmap.bitmapFromURL(var2);
- this._glyphsImage.loadData();
- if (this._glyphsImage != null && this._glyphsImage.isValid()) {
- this._glyphsImage.loadData();
- int var5 = this._widthsArrayBase;
-
- for(int var6 = 0; var5 < this._widthsArray.length; ++var5) {
- Image var4 = this.croppedImage(var6, 0, this._widthsArray[var5], this._glyphsImage.height());
- this._glyphVector.addElement(AWTCompatibility.bitmapForAWTImage(var4));
- netscape.application.Image var3 = (netscape.application.Image)this._glyphVector.lastElement();
- var6 += this._widthsArray[var5];
- }
-
- } else {
- System.err.println("Font._loadGlyphs() - Trouble loading glyphs for " + this._name);
- }
- }
-
- boolean isValid() {
- return this._type != 0;
- }
-
- boolean wasDownloaded() {
- return this._type == 2;
- }
-
- public FontMetrics fontMetrics() {
- if (this._metrics == null) {
- this._metrics = new FontMetrics(this);
- }
-
- return this._metrics;
- }
-
- public String family() {
- if (this._type == 0) {
- return "";
- } else {
- return this._awtFont != null ? this._awtFont.getFamily() : (String)this._description.get("Family");
- }
- }
-
- public String name() {
- return this._type == 0 ? "" : this._name;
- }
-
- public int style() {
- if (this._type == 0) {
- return -1;
- } else {
- return this._awtFont != null ? this._awtFont.getStyle() : parseInt((String)this._description.get("Style"));
- }
- }
-
- public int size() {
- if (this._type == 0) {
- return -1;
- } else {
- return this._awtFont != null ? this._awtFont.getSize() : parseInt((String)this._description.get("Size"));
- }
- }
-
- public boolean isPlain() {
- return this.style() == 0;
- }
-
- public boolean isBold() {
- return (this.style() & 1) > 0;
- }
-
- public boolean isItalic() {
- return (this.style() & 2) > 0;
- }
-
- Vector glyphVector() {
- return this._glyphVector;
- }
-
- String _stringValueFromDescription(String var1) {
- return var1 != null && this._description != null ? (String)this._description.get(var1) : "";
- }
-
- int _intValueFromDescription(String var1) {
- return var1 != null && this._description != null ? parseInt((String)this._description.get(var1)) : 0;
- }
-
- public String toString() {
- if (this._type != 0 && !this.wasDownloaded()) {
- String var1;
- if (this.isBold()) {
- if (this.isItalic()) {
- var1 = "BoldItalic";
- } else {
- var1 = "Bold";
- }
- } else if (this.isItalic()) {
- var1 = "Italic";
- } else {
- var1 = "Plain";
- }
-
- return this.family() + ":" + var1 + ":" + this.size();
- } else {
- return this._name;
- }
- }
-
- public void describeClassInfo(ClassInfo var1) {
- var1.addClass("netscape.application.Font", 1);
- var1.addField("name", (byte)16);
- var1.addField("style", (byte)8);
- var1.addField("size", (byte)8);
- }
-
- public void encode(Encoder var1) throws CodingException {
- var1.encodeString("name", this.name());
- var1.encodeInt("style", this.style());
- var1.encodeInt("size", this.size());
- }
-
- public void decode(Decoder var1) throws CodingException {
- String var3 = var1.decodeString("name");
- int var4 = var1.decodeInt("style");
- int var5 = var1.decodeInt("size");
- Font var2 = fontNamed(var3, var4, var5);
- if (this.getClass() == fontClass()) {
- var1.replaceObject(var2);
- } else {
- this._name = var2._name;
- this._type = var2._type;
- this._awtFont = var2._awtFont;
- this.nameFont(this._name, this);
- }
- }
-
- public void finishDecoding() throws CodingException {
- }
- }
-