home *** CD-ROM | disk | FTP | other *** search
- package java.awt;
-
- import java.awt.font.FontRenderContext;
- import java.awt.font.GlyphVector;
- import java.awt.font.LineMetrics;
- import java.awt.font.TextAttribute;
- import java.awt.font.TextLayout;
- import java.awt.font.TransformAttribute;
- import java.awt.geom.AffineTransform;
- import java.awt.geom.Rectangle2D;
- import java.awt.peer.FontPeer;
- import java.io.BufferedInputStream;
- import java.io.File;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.ObjectInputStream;
- import java.io.ObjectOutputStream;
- import java.io.Serializable;
- import java.text.AttributedCharacterIterator;
- import java.text.CharacterIterator;
- import java.text.StringCharacterIterator;
- import java.util.Hashtable;
- import java.util.Locale;
- import java.util.Map;
- import java.util.MissingResourceException;
- import java.util.ResourceBundle;
- import sun.awt.font.NativeFontWrapper;
- import sun.awt.font.StandardGlyphVector;
- import sun.java2d.SunGraphicsEnvironment;
-
- public class Font implements Serializable {
- private Hashtable fRequestedAttributes;
- private static final Map EMPTY_MAP;
- public static final int PLAIN = 0;
- public static final int BOLD = 1;
- public static final int ITALIC = 2;
- public static final int ROMAN_BASELINE = 0;
- public static final int CENTER_BASELINE = 1;
- public static final int HANGING_BASELINE = 2;
- public static final int TRUETYPE_FONT = 0;
- protected String name;
- protected int style;
- protected int size;
- protected float pointSize;
- private transient FontPeer peer;
- private transient long pData;
- private transient long pNativeFont;
- private transient int numGlyphs = -1;
- private transient int missingGlyph = -1;
- private transient int canRotate = -1;
- private transient double[] matrix;
- private static final long serialVersionUID = -4206021311591459213L;
- private int fontSerializedDataVersion = 1;
- private static final String systemBundle = "java.text.resources.LocaleElements";
-
- public FontPeer getPeer() {
- return this.getPeer_NoClientCode();
- }
-
- final FontPeer getPeer_NoClientCode() {
- if (this.peer == null) {
- Toolkit var1 = Toolkit.getDefaultToolkit();
- this.peer = var1.getFontPeer(this.name, this.style);
- }
-
- return this.peer;
- }
-
- private void initializeFont(Hashtable var1) {
- if (this.name == null) {
- this.name = "Default";
- }
-
- if (var1 == null) {
- this.fRequestedAttributes = new Hashtable(5, 0.9F);
- this.fRequestedAttributes.put(TextAttribute.TRANSFORM, new TransformAttribute(new AffineTransform()));
- this.fRequestedAttributes.put(TextAttribute.FAMILY, this.name);
- this.fRequestedAttributes.put(TextAttribute.SIZE, new Float((float)this.size));
- if ((this.style & 1) != 0) {
- this.fRequestedAttributes.put(TextAttribute.WEIGHT, TextAttribute.WEIGHT_BOLD);
- }
-
- if ((this.style & 2) != 0) {
- this.fRequestedAttributes.put(TextAttribute.POSTURE, TextAttribute.POSTURE_OBLIQUE);
- }
- } else {
- this.fRequestedAttributes = ffApply(this.style, var1);
- }
-
- SunGraphicsEnvironment var2 = (SunGraphicsEnvironment)GraphicsEnvironment.getLocalGraphicsEnvironment();
- String var3 = var2.mapFamilyName(this.name, this.style);
- NativeFontWrapper.initializeFont(this, var3, this.style);
- }
-
- public Font(String var1, int var2, int var3) {
- this.name = var1;
- this.style = var2;
- this.size = var3;
- this.pointSize = (float)var3;
- this.initializeFont((Hashtable)null);
- }
-
- private Font(String var1, int var2, float var3) {
- this.name = var1;
- this.style = var2;
- this.size = (int)((double)var3 + (double)0.5F);
- this.pointSize = var3;
- this.initializeFont((Hashtable)null);
- }
-
- public Font(Map var1) {
- this.pointSize = 12.0F;
- this.size = 12;
- if (var1 != null && !var1.equals(EMPTY_MAP)) {
- this.fRequestedAttributes = new Hashtable(var1);
- Object var2;
- if ((var2 = var1.get(TextAttribute.FAMILY)) != null) {
- this.name = (String)var2;
- }
-
- if ((var2 = var1.get(TextAttribute.WEIGHT)) != null && var2.equals(TextAttribute.WEIGHT_BOLD)) {
- this.style |= 1;
- }
-
- if ((var2 = var1.get(TextAttribute.POSTURE)) != null && var2.equals(TextAttribute.POSTURE_OBLIQUE)) {
- this.style |= 2;
- }
-
- if ((var2 = var1.get(TextAttribute.SIZE)) != null) {
- this.pointSize = (Float)var2;
- this.size = (int)((double)this.pointSize + (double)0.5F);
- }
- }
-
- this.initializeFont(this.fRequestedAttributes);
- }
-
- public static Font getFont(Map var0) {
- Font var1 = (Font)var0.get(TextAttribute.FONT);
- return var1 != null ? var1 : new Font(var0);
- }
-
- public static Font createFont(int var0, InputStream var1) throws FontFormatException, IOException {
- if (var0 != 0) {
- throw new IllegalArgumentException("font format not recognized");
- } else {
- Object var2 = null;
- File var11 = File.createTempFile("font", ".ttf", (File)null);
- Object var3 = null;
- BufferedInputStream var12 = new BufferedInputStream(var1);
- Object var4 = null;
- FileOutputStream var13 = new FileOutputStream(var11);
- int var5 = 0;
- short var7 = 8192;
- byte[] var6 = new byte[var7];
-
- while(var5 != -1) {
- var5 = var12.read(var6, 0, var7);
- if (var5 != -1) {
- var13.write(var6, 0, var5);
- }
- }
-
- SunGraphicsEnvironment var8 = (SunGraphicsEnvironment)GraphicsEnvironment.getLocalGraphicsEnvironment();
- String var9 = SunGraphicsEnvironment.createFont(var11);
- if (var9 == null) {
- throw new FontFormatException("Unable to create font - bad font data");
- } else {
- Font var10 = new Font(var9, 0, 1);
- return var10;
- }
- }
- }
-
- public AffineTransform getTransform() {
- Object var1 = this.fRequestedAttributes.get(TextAttribute.TRANSFORM);
- if (var1 != null) {
- if (var1 instanceof TransformAttribute) {
- return ((TransformAttribute)var1).getTransform();
- }
-
- if (var1 instanceof AffineTransform) {
- return new AffineTransform((AffineTransform)var1);
- }
- } else {
- var1 = new AffineTransform();
- }
-
- return (AffineTransform)var1;
- }
-
- public String getFamily() {
- return this.getFamily_NoClientCode();
- }
-
- final String getFamily_NoClientCode() {
- return this.getFamily(Locale.getDefault());
- }
-
- public String getFamily(Locale var1) {
- short var2 = this.getLcidFromLocale(var1);
- return NativeFontWrapper.getFamilyName(this, var2);
- }
-
- public String getPSName() {
- return this.getFontName();
- }
-
- public String getName() {
- return new String(this.name);
- }
-
- public String getFontName() {
- return this.getFontName(Locale.getDefault());
- }
-
- public String getFontName(Locale var1) {
- short var2 = this.getLcidFromLocale(var1);
- return NativeFontWrapper.getFullName(this, var2);
- }
-
- public int getStyle() {
- return this.style;
- }
-
- public int getSize() {
- return this.size;
- }
-
- public float getSize2D() {
- return this.pointSize;
- }
-
- public boolean isPlain() {
- return this.style == 0;
- }
-
- public boolean isBold() {
- return (this.style & 1) != 0;
- }
-
- public boolean isItalic() {
- return (this.style & 2) != 0;
- }
-
- public static Font getFont(String var0) {
- return getFont(var0, (Font)null);
- }
-
- public static Font decode(String var0) {
- String var1 = var0;
- int var4 = 12;
- byte var5 = 0;
- if (var0 == null) {
- return new Font("dialog", var5, var4);
- } else {
- int var6 = var0.indexOf(45);
- if (var6 >= 0) {
- var1 = var0.substring(0, var6);
- var0 = var0.substring(var6 + 1);
- var0 = var0.toLowerCase();
- int var3 = var0.indexOf("bold-italic");
- if (var3 != -1) {
- var5 = 3;
- }
-
- if (var3 == -1) {
- var3 = var0.indexOf("bolditalic");
- if (var3 != -1) {
- var5 = 3;
- }
- }
-
- if (var3 == -1) {
- var3 = var0.indexOf("bold");
- if (var3 != -1) {
- var5 = 1;
- }
- }
-
- if (var3 == -1) {
- var3 = var0.indexOf("italic");
- if (var3 != -1) {
- var5 = 2;
- }
- }
-
- var3 = var0.lastIndexOf("-");
- if (var3 != -1) {
- var0 = var0.substring(var3 + 1);
- }
-
- try {
- var4 = Integer.valueOf(var0);
- } catch (NumberFormatException var9) {
- }
- } else if (var6 == -1) {
- var5 = 0;
- var4 = 12;
- var0 = var0.toLowerCase();
- int var17 = var0.indexOf("bolditalic");
- if (var17 != -1) {
- var5 = 3;
- }
-
- if (var17 == -1) {
- var17 = var0.indexOf("bold italic");
- if (var17 != -1) {
- var5 = 3;
- }
- }
-
- if (var17 == -1) {
- var17 = var0.indexOf("bold");
- if (var17 != -1) {
- var5 = 1;
- }
- }
-
- if (var17 == -1) {
- var17 = var0.indexOf("italic");
- if (var17 != -1) {
- var5 = 2;
- }
- }
-
- if (var17 != -1) {
- var1 = var1.substring(0, var17);
- var1 = var1.trim();
- }
-
- var17 = var0.lastIndexOf(" ");
- if (var17 != -1) {
- String var2 = var0.substring(var17);
- var2 = var2.trim();
-
- try {
- var4 = Integer.valueOf(var2);
- } catch (NumberFormatException var8) {
- }
- }
- }
-
- return new Font(var1, var5, var4);
- }
- }
-
- public static Font getFont(String var0, Font var1) {
- String var2 = null;
-
- try {
- var2 = System.getProperty(var0);
- } catch (SecurityException var4) {
- }
-
- return var2 == null ? var1 : decode(var2);
- }
-
- public int hashCode() {
- return this.name.hashCode() ^ this.style ^ this.size;
- }
-
- public boolean equals(Object var1) {
- if (var1 == this) {
- return true;
- } else {
- if (var1 != null) {
- try {
- Font var2 = (Font)var1;
- double[] var3 = this.getMatrix();
- double[] var4 = var2.getMatrix();
- return this.size == var2.size && this.pointSize == var2.pointSize && this.style == var2.style && this.name.equals(var2.name) && var3[0] == var4[0] && var3[1] == var4[1] && var3[2] == var4[2] && var3[3] == var4[3];
- } catch (ClassCastException var5) {
- }
- }
-
- return false;
- }
- }
-
- public String toString() {
- String var1;
- if (this.isBold()) {
- var1 = this.isItalic() ? "bolditalic" : "bold";
- } else {
- var1 = this.isItalic() ? "italic" : "plain";
- }
-
- return this.getClass().getName() + "[family=" + this.getFamily() + ",name=" + this.name + ",style=" + var1 + ",size=" + this.size + "]";
- }
-
- private void writeObject(ObjectOutputStream var1) throws ClassNotFoundException, IOException {
- var1.defaultWriteObject();
- }
-
- private void readObject(ObjectInputStream var1) throws ClassNotFoundException, IOException {
- var1.defaultReadObject();
- if (this.pointSize == 0.0F) {
- this.pointSize = (float)this.size;
- }
-
- this.initializeFont(this.fRequestedAttributes);
- }
-
- public int getNumGlyphs() {
- if (this.numGlyphs == -1) {
- this.numGlyphs = NativeFontWrapper.getNumGlyphs(this);
- }
-
- return this.numGlyphs;
- }
-
- public int getMissingGlyphCode() {
- if (this.missingGlyph == -1) {
- this.missingGlyph = NativeFontWrapper.getMissingGlyphCode(this);
- }
-
- return this.missingGlyph;
- }
-
- private double[] getMatrix() {
- if (this.matrix == null) {
- float var1 = this.getSize2D();
- AffineTransform var2 = this.getTransform();
- var2.scale((double)var1, (double)var1);
- this.matrix = new double[]{var2.getScaleX(), var2.getShearY(), var2.getShearX(), var2.getScaleY()};
- }
-
- return this.matrix;
- }
-
- public byte getBaselineFor(char var1) {
- return NativeFontWrapper.getBaselineFor(this, var1);
- }
-
- public Map getAttributes() {
- return (Map)this.fRequestedAttributes.clone();
- }
-
- public AttributedCharacterIterator.Attribute[] getAvailableAttributes() {
- AttributedCharacterIterator.Attribute[] var1 = new AttributedCharacterIterator.Attribute[]{TextAttribute.FAMILY, TextAttribute.WEIGHT, TextAttribute.POSTURE, TextAttribute.SIZE};
- return var1;
- }
-
- public Font deriveFont(int var1, float var2) {
- return new Font(ffApply(var1, ffApply(var2, this.fRequestedAttributes)));
- }
-
- public Font deriveFont(int var1, AffineTransform var2) {
- return new Font(ffApply(var1, ffApply((AffineTransform)var2, this.fRequestedAttributes)));
- }
-
- public Font deriveFont(float var1) {
- return new Font(ffApply(var1, this.fRequestedAttributes));
- }
-
- public Font deriveFont(AffineTransform var1) {
- return new Font(ffApply((AffineTransform)var1, this.fRequestedAttributes));
- }
-
- public Font deriveFont(int var1) {
- return new Font(ffApply(var1, this.fRequestedAttributes));
- }
-
- public Font deriveFont(Map var1) {
- Hashtable var2 = new Hashtable(this.getAttributes());
- AttributedCharacterIterator.Attribute[] var3 = this.getAvailableAttributes();
-
- for(int var5 = 0; var5 < var3.length; ++var5) {
- Object var4;
- if ((var4 = var1.get(var3[var5])) != null) {
- var2.put(var3[var5], var4);
- }
- }
-
- return new Font(var2);
- }
-
- public boolean canDisplay(char var1) {
- return NativeFontWrapper.canDisplay(this, var1);
- }
-
- public int canDisplayUpTo(String var1) {
- return this.canDisplayUpTo((CharacterIterator)(new StringCharacterIterator(var1)), 0, var1.length());
- }
-
- public int canDisplayUpTo(char[] var1, int var2, int var3) {
- while(var2 < var3 && this.canDisplay(var1[var2])) {
- ++var2;
- }
-
- return var2;
- }
-
- public int canDisplayUpTo(CharacterIterator var1, int var2, int var3) {
- for(char var4 = var1.setIndex(var2); var1.getIndex() < var3 && this.canDisplay(var4); var4 = var1.next()) {
- }
-
- return var1.getIndex();
- }
-
- public float getItalicAngle() {
- double[] var1 = this.getMatrix();
- return NativeFontWrapper.getItalicAngle(this, var1, false, false);
- }
-
- public boolean hasUniformLineMetrics() {
- return false;
- }
-
- private FontLineMetrics defaultLineMetrics(FontRenderContext var1) {
- FontLineMetrics var2 = new FontLineMetrics(this, (1)null);
- double[] var3 = this.getMatrix();
- float[] var4 = new float[4];
- NativeFontWrapper.getFontMetrics(this, var3, var1.isAntiAliased(), var1.usesFractionalMetrics(), var4);
- var2.ascent = var4[0];
- var2.descent = var4[1];
- var2.leading = var4[2];
- var2.height = var4[0] + var4[1] + var4[2];
- var2.baselineIndex = 0;
- var2.baselineOffsets = new float[3];
- var2.baselineOffsets[0] = 0.0F;
- var2.strikethroughOffset = -(var2.ascent / 3.0F);
- var2.strikethroughThickness = this.pointSize / 12.0F;
- var2.underlineOffset = 0.0F;
- var2.underlineThickness = this.pointSize / 12.0F;
- return var2;
- }
-
- public LineMetrics getLineMetrics(String var1, FontRenderContext var2) {
- FontLineMetrics var3 = this.defaultLineMetrics(var2);
- var3.numchars = var1.length();
- return var3;
- }
-
- public LineMetrics getLineMetrics(String var1, int var2, int var3, FontRenderContext var4) {
- FontLineMetrics var5 = this.defaultLineMetrics(var4);
- int var6 = var3 - var2;
- var5.numchars = var6 < 0 ? 0 : var6;
- return var5;
- }
-
- public LineMetrics getLineMetrics(char[] var1, int var2, int var3, FontRenderContext var4) {
- FontLineMetrics var5 = this.defaultLineMetrics(var4);
- int var6 = var3 - var2;
- var5.numchars = var6 < 0 ? 0 : var6;
- return var5;
- }
-
- public LineMetrics getLineMetrics(CharacterIterator var1, int var2, int var3, FontRenderContext var4) {
- FontLineMetrics var5 = this.defaultLineMetrics(var4);
- int var6 = var3 - var2;
- var5.numchars = var6 < 0 ? 0 : var6;
- return var5;
- }
-
- public Rectangle2D getStringBounds(String var1, FontRenderContext var2) {
- char[] var3 = var1.toCharArray();
- return this.getStringBounds((char[])var3, 0, var3.length, var2);
- }
-
- public Rectangle2D getStringBounds(String var1, int var2, int var3, FontRenderContext var4) {
- String var5 = var1.substring(var2, var3);
- return this.getStringBounds(var5, var4);
- }
-
- public Rectangle2D getStringBounds(char[] var1, int var2, int var3, FontRenderContext var4) {
- if (var2 < 0) {
- throw new IndexOutOfBoundsException("beginIndex: " + var2);
- } else if (var3 > var1.length) {
- throw new IndexOutOfBoundsException("limit: " + var3);
- } else if (var2 > var3) {
- throw new IndexOutOfBoundsException("range length: " + (var3 - var2));
- } else {
- boolean var5 = true;
-
- for(int var6 = var2; var6 < var3; ++var6) {
- char var7 = var1[var6];
- if (var7 >= 1424 && var7 <= 8303) {
- var5 = false;
- break;
- }
- }
-
- if (var5) {
- StandardGlyphVector var10 = new StandardGlyphVector(this, var1, var2, var3 - var2, var4);
- return ((GlyphVector)var10).getLogicalBounds();
- } else {
- String var9 = new String(var1, var2, var3 - var2);
- TextLayout var8 = new TextLayout(var9, this, var4);
- return new Rectangle2D.Float(0.0F, -var8.getAscent(), var8.getAdvance(), var8.getDescent() + var8.getLeading());
- }
- }
- }
-
- public Rectangle2D getStringBounds(CharacterIterator var1, int var2, int var3, FontRenderContext var4) {
- int var5 = var1.getBeginIndex();
- int var6 = var1.getEndIndex();
- if (var2 < var5) {
- throw new IndexOutOfBoundsException("beginIndex: " + var2);
- } else if (var3 > var6) {
- throw new IndexOutOfBoundsException("limit: " + var3);
- } else if (var2 > var3) {
- throw new IndexOutOfBoundsException("range length: " + (var3 - var2));
- } else {
- char[] var7 = new char[var3 - var2];
- var1.setIndex(var2);
-
- for(int var8 = 0; var8 < var7.length; ++var8) {
- var7[var8] = var1.current();
- var1.next();
- }
-
- return this.getStringBounds((char[])var7, 0, var7.length, var4);
- }
- }
-
- public Rectangle2D getMaxCharBounds(FontRenderContext var1) {
- double[] var2 = this.getMatrix();
- float[] var3 = new float[4];
- NativeFontWrapper.getFontMetrics(this, var2, var1.isAntiAliased(), var1.usesFractionalMetrics(), var3);
- return new Rectangle2D.Float(0.0F, -var3[0], var3[3], var3[0] + var3[1] + var3[2]);
- }
-
- public GlyphVector createGlyphVector(FontRenderContext var1, String var2) {
- return new StandardGlyphVector(this, var2, var1);
- }
-
- public GlyphVector createGlyphVector(FontRenderContext var1, char[] var2) {
- return new StandardGlyphVector(this, var2, var1);
- }
-
- public GlyphVector createGlyphVector(FontRenderContext var1, CharacterIterator var2) {
- return new StandardGlyphVector(this, var2, var1);
- }
-
- public GlyphVector createGlyphVector(FontRenderContext var1, int[] var2) {
- return new StandardGlyphVector(this, var2, var1);
- }
-
- private static Hashtable ffApply(String var0, Map var1) {
- Hashtable var2 = new Hashtable(var1);
- var2.put(TextAttribute.FAMILY, var0);
- return var2;
- }
-
- private static Hashtable ffApply(AffineTransform var0, Map var1) {
- Hashtable var2 = new Hashtable(var1);
- var2.put(TextAttribute.TRANSFORM, new TransformAttribute(var0));
- return var2;
- }
-
- private static Hashtable ffApply(int var0, Map var1) {
- Hashtable var2 = new Hashtable(var1);
- if ((var0 & 1) != 0) {
- var2.put(TextAttribute.WEIGHT, TextAttribute.WEIGHT_BOLD);
- } else {
- var2.remove(TextAttribute.WEIGHT);
- }
-
- if ((var0 & 2) != 0) {
- var2.put(TextAttribute.POSTURE, TextAttribute.POSTURE_OBLIQUE);
- } else {
- var2.remove(TextAttribute.POSTURE);
- }
-
- return var2;
- }
-
- private static Hashtable ffApply(float var0, Map var1) {
- Hashtable var2 = new Hashtable(var1);
- var2.put(TextAttribute.SIZE, new Float(var0));
- return var2;
- }
-
- private static Hashtable ffApply(String var0, int var1, float var2, Map var3) {
- return ffApply((String)var0, ffApply(var1, ffApply(var2, var3)));
- }
-
- private static native void initIDs();
-
- private native void pDispose();
-
- protected void finalize() throws Throwable {
- if (this.peer != null) {
- this.pDispose();
- }
-
- super.finalize();
- }
-
- private short getLcidFromLocale(Locale var1) {
- short var2 = 1033;
- if (var1.equals(Locale.US)) {
- return var2;
- } else {
- String var3;
- try {
- ResourceBundle var4 = ResourceBundle.getBundle("java.text.resources.LocaleElements", var1);
- var3 = var4.getString("LocaleID");
- } catch (MissingResourceException var6) {
- return var2;
- }
-
- try {
- var2 = (short)Integer.parseInt(var3, 16);
- } catch (NumberFormatException var5) {
- }
-
- return var2;
- }
- }
-
- static {
- Toolkit.loadLibraries();
- initIDs();
- EMPTY_MAP = new Hashtable(5, 0.9F);
- }
- }
-