home *** CD-ROM | disk | FTP | other *** search
/ S283 Planetary Science &… the Search for Life CD 3 / 0_CD-ROM.iso / install / jre1_3 / lib / rt.jar / java / awt / Font.class (.txt) < prev    next >
Encoding:
Java Class File  |  1979-12-31  |  14.4 KB  |  721 lines

  1. package java.awt;
  2.  
  3. import java.awt.font.FontRenderContext;
  4. import java.awt.font.GlyphVector;
  5. import java.awt.font.LineMetrics;
  6. import java.awt.font.TextAttribute;
  7. import java.awt.font.TextLayout;
  8. import java.awt.font.TransformAttribute;
  9. import java.awt.geom.AffineTransform;
  10. import java.awt.geom.Rectangle2D;
  11. import java.awt.peer.FontPeer;
  12. import java.io.BufferedInputStream;
  13. import java.io.File;
  14. import java.io.FileOutputStream;
  15. import java.io.IOException;
  16. import java.io.InputStream;
  17. import java.io.ObjectInputStream;
  18. import java.io.ObjectOutputStream;
  19. import java.io.Serializable;
  20. import java.text.AttributedCharacterIterator;
  21. import java.text.CharacterIterator;
  22. import java.text.StringCharacterIterator;
  23. import java.util.Hashtable;
  24. import java.util.Locale;
  25. import java.util.Map;
  26. import java.util.MissingResourceException;
  27. import java.util.ResourceBundle;
  28. import sun.awt.font.NativeFontWrapper;
  29. import sun.awt.font.StandardGlyphVector;
  30. import sun.java2d.SunGraphicsEnvironment;
  31.  
  32. public class Font implements Serializable {
  33.    private Hashtable fRequestedAttributes;
  34.    private static final Map EMPTY_MAP;
  35.    public static final int PLAIN = 0;
  36.    public static final int BOLD = 1;
  37.    public static final int ITALIC = 2;
  38.    public static final int ROMAN_BASELINE = 0;
  39.    public static final int CENTER_BASELINE = 1;
  40.    public static final int HANGING_BASELINE = 2;
  41.    public static final int TRUETYPE_FONT = 0;
  42.    protected String name;
  43.    protected int style;
  44.    protected int size;
  45.    protected float pointSize;
  46.    private transient FontPeer peer;
  47.    private transient long pData;
  48.    private transient long pNativeFont;
  49.    private transient int numGlyphs = -1;
  50.    private transient int missingGlyph = -1;
  51.    private transient int canRotate = -1;
  52.    private transient double[] matrix;
  53.    private static final long serialVersionUID = -4206021311591459213L;
  54.    private int fontSerializedDataVersion = 1;
  55.    private static final String systemBundle = "java.text.resources.LocaleElements";
  56.  
  57.    public FontPeer getPeer() {
  58.       return this.getPeer_NoClientCode();
  59.    }
  60.  
  61.    final FontPeer getPeer_NoClientCode() {
  62.       if (this.peer == null) {
  63.          Toolkit var1 = Toolkit.getDefaultToolkit();
  64.          this.peer = var1.getFontPeer(this.name, this.style);
  65.       }
  66.  
  67.       return this.peer;
  68.    }
  69.  
  70.    private void initializeFont(Hashtable var1) {
  71.       if (this.name == null) {
  72.          this.name = "Default";
  73.       }
  74.  
  75.       if (var1 == null) {
  76.          this.fRequestedAttributes = new Hashtable(5, 0.9F);
  77.          this.fRequestedAttributes.put(TextAttribute.TRANSFORM, new TransformAttribute(new AffineTransform()));
  78.          this.fRequestedAttributes.put(TextAttribute.FAMILY, this.name);
  79.          this.fRequestedAttributes.put(TextAttribute.SIZE, new Float((float)this.size));
  80.          if ((this.style & 1) != 0) {
  81.             this.fRequestedAttributes.put(TextAttribute.WEIGHT, TextAttribute.WEIGHT_BOLD);
  82.          }
  83.  
  84.          if ((this.style & 2) != 0) {
  85.             this.fRequestedAttributes.put(TextAttribute.POSTURE, TextAttribute.POSTURE_OBLIQUE);
  86.          }
  87.       } else {
  88.          this.fRequestedAttributes = ffApply(this.style, var1);
  89.       }
  90.  
  91.       SunGraphicsEnvironment var2 = (SunGraphicsEnvironment)GraphicsEnvironment.getLocalGraphicsEnvironment();
  92.       String var3 = var2.mapFamilyName(this.name, this.style);
  93.       NativeFontWrapper.initializeFont(this, var3, this.style);
  94.    }
  95.  
  96.    public Font(String var1, int var2, int var3) {
  97.       this.name = var1;
  98.       this.style = var2;
  99.       this.size = var3;
  100.       this.pointSize = (float)var3;
  101.       this.initializeFont((Hashtable)null);
  102.    }
  103.  
  104.    private Font(String var1, int var2, float var3) {
  105.       this.name = var1;
  106.       this.style = var2;
  107.       this.size = (int)((double)var3 + (double)0.5F);
  108.       this.pointSize = var3;
  109.       this.initializeFont((Hashtable)null);
  110.    }
  111.  
  112.    public Font(Map var1) {
  113.       this.pointSize = 12.0F;
  114.       this.size = 12;
  115.       if (var1 != null && !var1.equals(EMPTY_MAP)) {
  116.          this.fRequestedAttributes = new Hashtable(var1);
  117.          Object var2;
  118.          if ((var2 = var1.get(TextAttribute.FAMILY)) != null) {
  119.             this.name = (String)var2;
  120.          }
  121.  
  122.          if ((var2 = var1.get(TextAttribute.WEIGHT)) != null && var2.equals(TextAttribute.WEIGHT_BOLD)) {
  123.             this.style |= 1;
  124.          }
  125.  
  126.          if ((var2 = var1.get(TextAttribute.POSTURE)) != null && var2.equals(TextAttribute.POSTURE_OBLIQUE)) {
  127.             this.style |= 2;
  128.          }
  129.  
  130.          if ((var2 = var1.get(TextAttribute.SIZE)) != null) {
  131.             this.pointSize = (Float)var2;
  132.             this.size = (int)((double)this.pointSize + (double)0.5F);
  133.          }
  134.       }
  135.  
  136.       this.initializeFont(this.fRequestedAttributes);
  137.    }
  138.  
  139.    public static Font getFont(Map var0) {
  140.       Font var1 = (Font)var0.get(TextAttribute.FONT);
  141.       return var1 != null ? var1 : new Font(var0);
  142.    }
  143.  
  144.    public static Font createFont(int var0, InputStream var1) throws FontFormatException, IOException {
  145.       if (var0 != 0) {
  146.          throw new IllegalArgumentException("font format not recognized");
  147.       } else {
  148.          Object var2 = null;
  149.          File var11 = File.createTempFile("font", ".ttf", (File)null);
  150.          Object var3 = null;
  151.          BufferedInputStream var12 = new BufferedInputStream(var1);
  152.          Object var4 = null;
  153.          FileOutputStream var13 = new FileOutputStream(var11);
  154.          int var5 = 0;
  155.          short var7 = 8192;
  156.          byte[] var6 = new byte[var7];
  157.  
  158.          while(var5 != -1) {
  159.             var5 = var12.read(var6, 0, var7);
  160.             if (var5 != -1) {
  161.                var13.write(var6, 0, var5);
  162.             }
  163.          }
  164.  
  165.          SunGraphicsEnvironment var8 = (SunGraphicsEnvironment)GraphicsEnvironment.getLocalGraphicsEnvironment();
  166.          String var9 = SunGraphicsEnvironment.createFont(var11);
  167.          if (var9 == null) {
  168.             throw new FontFormatException("Unable to create font - bad font data");
  169.          } else {
  170.             Font var10 = new Font(var9, 0, 1);
  171.             return var10;
  172.          }
  173.       }
  174.    }
  175.  
  176.    public AffineTransform getTransform() {
  177.       Object var1 = this.fRequestedAttributes.get(TextAttribute.TRANSFORM);
  178.       if (var1 != null) {
  179.          if (var1 instanceof TransformAttribute) {
  180.             return ((TransformAttribute)var1).getTransform();
  181.          }
  182.  
  183.          if (var1 instanceof AffineTransform) {
  184.             return new AffineTransform((AffineTransform)var1);
  185.          }
  186.       } else {
  187.          var1 = new AffineTransform();
  188.       }
  189.  
  190.       return (AffineTransform)var1;
  191.    }
  192.  
  193.    public String getFamily() {
  194.       return this.getFamily_NoClientCode();
  195.    }
  196.  
  197.    final String getFamily_NoClientCode() {
  198.       return this.getFamily(Locale.getDefault());
  199.    }
  200.  
  201.    public String getFamily(Locale var1) {
  202.       short var2 = this.getLcidFromLocale(var1);
  203.       return NativeFontWrapper.getFamilyName(this, var2);
  204.    }
  205.  
  206.    public String getPSName() {
  207.       return this.getFontName();
  208.    }
  209.  
  210.    public String getName() {
  211.       return new String(this.name);
  212.    }
  213.  
  214.    public String getFontName() {
  215.       return this.getFontName(Locale.getDefault());
  216.    }
  217.  
  218.    public String getFontName(Locale var1) {
  219.       short var2 = this.getLcidFromLocale(var1);
  220.       return NativeFontWrapper.getFullName(this, var2);
  221.    }
  222.  
  223.    public int getStyle() {
  224.       return this.style;
  225.    }
  226.  
  227.    public int getSize() {
  228.       return this.size;
  229.    }
  230.  
  231.    public float getSize2D() {
  232.       return this.pointSize;
  233.    }
  234.  
  235.    public boolean isPlain() {
  236.       return this.style == 0;
  237.    }
  238.  
  239.    public boolean isBold() {
  240.       return (this.style & 1) != 0;
  241.    }
  242.  
  243.    public boolean isItalic() {
  244.       return (this.style & 2) != 0;
  245.    }
  246.  
  247.    public static Font getFont(String var0) {
  248.       return getFont(var0, (Font)null);
  249.    }
  250.  
  251.    public static Font decode(String var0) {
  252.       String var1 = var0;
  253.       int var4 = 12;
  254.       byte var5 = 0;
  255.       if (var0 == null) {
  256.          return new Font("dialog", var5, var4);
  257.       } else {
  258.          int var6 = var0.indexOf(45);
  259.          if (var6 >= 0) {
  260.             var1 = var0.substring(0, var6);
  261.             var0 = var0.substring(var6 + 1);
  262.             var0 = var0.toLowerCase();
  263.             int var3 = var0.indexOf("bold-italic");
  264.             if (var3 != -1) {
  265.                var5 = 3;
  266.             }
  267.  
  268.             if (var3 == -1) {
  269.                var3 = var0.indexOf("bolditalic");
  270.                if (var3 != -1) {
  271.                   var5 = 3;
  272.                }
  273.             }
  274.  
  275.             if (var3 == -1) {
  276.                var3 = var0.indexOf("bold");
  277.                if (var3 != -1) {
  278.                   var5 = 1;
  279.                }
  280.             }
  281.  
  282.             if (var3 == -1) {
  283.                var3 = var0.indexOf("italic");
  284.                if (var3 != -1) {
  285.                   var5 = 2;
  286.                }
  287.             }
  288.  
  289.             var3 = var0.lastIndexOf("-");
  290.             if (var3 != -1) {
  291.                var0 = var0.substring(var3 + 1);
  292.             }
  293.  
  294.             try {
  295.                var4 = Integer.valueOf(var0);
  296.             } catch (NumberFormatException var9) {
  297.             }
  298.          } else if (var6 == -1) {
  299.             var5 = 0;
  300.             var4 = 12;
  301.             var0 = var0.toLowerCase();
  302.             int var17 = var0.indexOf("bolditalic");
  303.             if (var17 != -1) {
  304.                var5 = 3;
  305.             }
  306.  
  307.             if (var17 == -1) {
  308.                var17 = var0.indexOf("bold italic");
  309.                if (var17 != -1) {
  310.                   var5 = 3;
  311.                }
  312.             }
  313.  
  314.             if (var17 == -1) {
  315.                var17 = var0.indexOf("bold");
  316.                if (var17 != -1) {
  317.                   var5 = 1;
  318.                }
  319.             }
  320.  
  321.             if (var17 == -1) {
  322.                var17 = var0.indexOf("italic");
  323.                if (var17 != -1) {
  324.                   var5 = 2;
  325.                }
  326.             }
  327.  
  328.             if (var17 != -1) {
  329.                var1 = var1.substring(0, var17);
  330.                var1 = var1.trim();
  331.             }
  332.  
  333.             var17 = var0.lastIndexOf(" ");
  334.             if (var17 != -1) {
  335.                String var2 = var0.substring(var17);
  336.                var2 = var2.trim();
  337.  
  338.                try {
  339.                   var4 = Integer.valueOf(var2);
  340.                } catch (NumberFormatException var8) {
  341.                }
  342.             }
  343.          }
  344.  
  345.          return new Font(var1, var5, var4);
  346.       }
  347.    }
  348.  
  349.    public static Font getFont(String var0, Font var1) {
  350.       String var2 = null;
  351.  
  352.       try {
  353.          var2 = System.getProperty(var0);
  354.       } catch (SecurityException var4) {
  355.       }
  356.  
  357.       return var2 == null ? var1 : decode(var2);
  358.    }
  359.  
  360.    public int hashCode() {
  361.       return this.name.hashCode() ^ this.style ^ this.size;
  362.    }
  363.  
  364.    public boolean equals(Object var1) {
  365.       if (var1 == this) {
  366.          return true;
  367.       } else {
  368.          if (var1 != null) {
  369.             try {
  370.                Font var2 = (Font)var1;
  371.                double[] var3 = this.getMatrix();
  372.                double[] var4 = var2.getMatrix();
  373.                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];
  374.             } catch (ClassCastException var5) {
  375.             }
  376.          }
  377.  
  378.          return false;
  379.       }
  380.    }
  381.  
  382.    public String toString() {
  383.       String var1;
  384.       if (this.isBold()) {
  385.          var1 = this.isItalic() ? "bolditalic" : "bold";
  386.       } else {
  387.          var1 = this.isItalic() ? "italic" : "plain";
  388.       }
  389.  
  390.       return this.getClass().getName() + "[family=" + this.getFamily() + ",name=" + this.name + ",style=" + var1 + ",size=" + this.size + "]";
  391.    }
  392.  
  393.    private void writeObject(ObjectOutputStream var1) throws ClassNotFoundException, IOException {
  394.       var1.defaultWriteObject();
  395.    }
  396.  
  397.    private void readObject(ObjectInputStream var1) throws ClassNotFoundException, IOException {
  398.       var1.defaultReadObject();
  399.       if (this.pointSize == 0.0F) {
  400.          this.pointSize = (float)this.size;
  401.       }
  402.  
  403.       this.initializeFont(this.fRequestedAttributes);
  404.    }
  405.  
  406.    public int getNumGlyphs() {
  407.       if (this.numGlyphs == -1) {
  408.          this.numGlyphs = NativeFontWrapper.getNumGlyphs(this);
  409.       }
  410.  
  411.       return this.numGlyphs;
  412.    }
  413.  
  414.    public int getMissingGlyphCode() {
  415.       if (this.missingGlyph == -1) {
  416.          this.missingGlyph = NativeFontWrapper.getMissingGlyphCode(this);
  417.       }
  418.  
  419.       return this.missingGlyph;
  420.    }
  421.  
  422.    private double[] getMatrix() {
  423.       if (this.matrix == null) {
  424.          float var1 = this.getSize2D();
  425.          AffineTransform var2 = this.getTransform();
  426.          var2.scale((double)var1, (double)var1);
  427.          this.matrix = new double[]{var2.getScaleX(), var2.getShearY(), var2.getShearX(), var2.getScaleY()};
  428.       }
  429.  
  430.       return this.matrix;
  431.    }
  432.  
  433.    public byte getBaselineFor(char var1) {
  434.       return NativeFontWrapper.getBaselineFor(this, var1);
  435.    }
  436.  
  437.    public Map getAttributes() {
  438.       return (Map)this.fRequestedAttributes.clone();
  439.    }
  440.  
  441.    public AttributedCharacterIterator.Attribute[] getAvailableAttributes() {
  442.       AttributedCharacterIterator.Attribute[] var1 = new AttributedCharacterIterator.Attribute[]{TextAttribute.FAMILY, TextAttribute.WEIGHT, TextAttribute.POSTURE, TextAttribute.SIZE};
  443.       return var1;
  444.    }
  445.  
  446.    public Font deriveFont(int var1, float var2) {
  447.       return new Font(ffApply(var1, ffApply(var2, this.fRequestedAttributes)));
  448.    }
  449.  
  450.    public Font deriveFont(int var1, AffineTransform var2) {
  451.       return new Font(ffApply(var1, ffApply((AffineTransform)var2, this.fRequestedAttributes)));
  452.    }
  453.  
  454.    public Font deriveFont(float var1) {
  455.       return new Font(ffApply(var1, this.fRequestedAttributes));
  456.    }
  457.  
  458.    public Font deriveFont(AffineTransform var1) {
  459.       return new Font(ffApply((AffineTransform)var1, this.fRequestedAttributes));
  460.    }
  461.  
  462.    public Font deriveFont(int var1) {
  463.       return new Font(ffApply(var1, this.fRequestedAttributes));
  464.    }
  465.  
  466.    public Font deriveFont(Map var1) {
  467.       Hashtable var2 = new Hashtable(this.getAttributes());
  468.       AttributedCharacterIterator.Attribute[] var3 = this.getAvailableAttributes();
  469.  
  470.       for(int var5 = 0; var5 < var3.length; ++var5) {
  471.          Object var4;
  472.          if ((var4 = var1.get(var3[var5])) != null) {
  473.             var2.put(var3[var5], var4);
  474.          }
  475.       }
  476.  
  477.       return new Font(var2);
  478.    }
  479.  
  480.    public boolean canDisplay(char var1) {
  481.       return NativeFontWrapper.canDisplay(this, var1);
  482.    }
  483.  
  484.    public int canDisplayUpTo(String var1) {
  485.       return this.canDisplayUpTo((CharacterIterator)(new StringCharacterIterator(var1)), 0, var1.length());
  486.    }
  487.  
  488.    public int canDisplayUpTo(char[] var1, int var2, int var3) {
  489.       while(var2 < var3 && this.canDisplay(var1[var2])) {
  490.          ++var2;
  491.       }
  492.  
  493.       return var2;
  494.    }
  495.  
  496.    public int canDisplayUpTo(CharacterIterator var1, int var2, int var3) {
  497.       for(char var4 = var1.setIndex(var2); var1.getIndex() < var3 && this.canDisplay(var4); var4 = var1.next()) {
  498.       }
  499.  
  500.       return var1.getIndex();
  501.    }
  502.  
  503.    public float getItalicAngle() {
  504.       double[] var1 = this.getMatrix();
  505.       return NativeFontWrapper.getItalicAngle(this, var1, false, false);
  506.    }
  507.  
  508.    public boolean hasUniformLineMetrics() {
  509.       return false;
  510.    }
  511.  
  512.    private FontLineMetrics defaultLineMetrics(FontRenderContext var1) {
  513.       FontLineMetrics var2 = new FontLineMetrics(this, (1)null);
  514.       double[] var3 = this.getMatrix();
  515.       float[] var4 = new float[4];
  516.       NativeFontWrapper.getFontMetrics(this, var3, var1.isAntiAliased(), var1.usesFractionalMetrics(), var4);
  517.       var2.ascent = var4[0];
  518.       var2.descent = var4[1];
  519.       var2.leading = var4[2];
  520.       var2.height = var4[0] + var4[1] + var4[2];
  521.       var2.baselineIndex = 0;
  522.       var2.baselineOffsets = new float[3];
  523.       var2.baselineOffsets[0] = 0.0F;
  524.       var2.strikethroughOffset = -(var2.ascent / 3.0F);
  525.       var2.strikethroughThickness = this.pointSize / 12.0F;
  526.       var2.underlineOffset = 0.0F;
  527.       var2.underlineThickness = this.pointSize / 12.0F;
  528.       return var2;
  529.    }
  530.  
  531.    public LineMetrics getLineMetrics(String var1, FontRenderContext var2) {
  532.       FontLineMetrics var3 = this.defaultLineMetrics(var2);
  533.       var3.numchars = var1.length();
  534.       return var3;
  535.    }
  536.  
  537.    public LineMetrics getLineMetrics(String var1, int var2, int var3, FontRenderContext var4) {
  538.       FontLineMetrics var5 = this.defaultLineMetrics(var4);
  539.       int var6 = var3 - var2;
  540.       var5.numchars = var6 < 0 ? 0 : var6;
  541.       return var5;
  542.    }
  543.  
  544.    public LineMetrics getLineMetrics(char[] var1, int var2, int var3, FontRenderContext var4) {
  545.       FontLineMetrics var5 = this.defaultLineMetrics(var4);
  546.       int var6 = var3 - var2;
  547.       var5.numchars = var6 < 0 ? 0 : var6;
  548.       return var5;
  549.    }
  550.  
  551.    public LineMetrics getLineMetrics(CharacterIterator var1, int var2, int var3, FontRenderContext var4) {
  552.       FontLineMetrics var5 = this.defaultLineMetrics(var4);
  553.       int var6 = var3 - var2;
  554.       var5.numchars = var6 < 0 ? 0 : var6;
  555.       return var5;
  556.    }
  557.  
  558.    public Rectangle2D getStringBounds(String var1, FontRenderContext var2) {
  559.       char[] var3 = var1.toCharArray();
  560.       return this.getStringBounds((char[])var3, 0, var3.length, var2);
  561.    }
  562.  
  563.    public Rectangle2D getStringBounds(String var1, int var2, int var3, FontRenderContext var4) {
  564.       String var5 = var1.substring(var2, var3);
  565.       return this.getStringBounds(var5, var4);
  566.    }
  567.  
  568.    public Rectangle2D getStringBounds(char[] var1, int var2, int var3, FontRenderContext var4) {
  569.       if (var2 < 0) {
  570.          throw new IndexOutOfBoundsException("beginIndex: " + var2);
  571.       } else if (var3 > var1.length) {
  572.          throw new IndexOutOfBoundsException("limit: " + var3);
  573.       } else if (var2 > var3) {
  574.          throw new IndexOutOfBoundsException("range length: " + (var3 - var2));
  575.       } else {
  576.          boolean var5 = true;
  577.  
  578.          for(int var6 = var2; var6 < var3; ++var6) {
  579.             char var7 = var1[var6];
  580.             if (var7 >= 1424 && var7 <= 8303) {
  581.                var5 = false;
  582.                break;
  583.             }
  584.          }
  585.  
  586.          if (var5) {
  587.             StandardGlyphVector var10 = new StandardGlyphVector(this, var1, var2, var3 - var2, var4);
  588.             return ((GlyphVector)var10).getLogicalBounds();
  589.          } else {
  590.             String var9 = new String(var1, var2, var3 - var2);
  591.             TextLayout var8 = new TextLayout(var9, this, var4);
  592.             return new Rectangle2D.Float(0.0F, -var8.getAscent(), var8.getAdvance(), var8.getDescent() + var8.getLeading());
  593.          }
  594.       }
  595.    }
  596.  
  597.    public Rectangle2D getStringBounds(CharacterIterator var1, int var2, int var3, FontRenderContext var4) {
  598.       int var5 = var1.getBeginIndex();
  599.       int var6 = var1.getEndIndex();
  600.       if (var2 < var5) {
  601.          throw new IndexOutOfBoundsException("beginIndex: " + var2);
  602.       } else if (var3 > var6) {
  603.          throw new IndexOutOfBoundsException("limit: " + var3);
  604.       } else if (var2 > var3) {
  605.          throw new IndexOutOfBoundsException("range length: " + (var3 - var2));
  606.       } else {
  607.          char[] var7 = new char[var3 - var2];
  608.          var1.setIndex(var2);
  609.  
  610.          for(int var8 = 0; var8 < var7.length; ++var8) {
  611.             var7[var8] = var1.current();
  612.             var1.next();
  613.          }
  614.  
  615.          return this.getStringBounds((char[])var7, 0, var7.length, var4);
  616.       }
  617.    }
  618.  
  619.    public Rectangle2D getMaxCharBounds(FontRenderContext var1) {
  620.       double[] var2 = this.getMatrix();
  621.       float[] var3 = new float[4];
  622.       NativeFontWrapper.getFontMetrics(this, var2, var1.isAntiAliased(), var1.usesFractionalMetrics(), var3);
  623.       return new Rectangle2D.Float(0.0F, -var3[0], var3[3], var3[0] + var3[1] + var3[2]);
  624.    }
  625.  
  626.    public GlyphVector createGlyphVector(FontRenderContext var1, String var2) {
  627.       return new StandardGlyphVector(this, var2, var1);
  628.    }
  629.  
  630.    public GlyphVector createGlyphVector(FontRenderContext var1, char[] var2) {
  631.       return new StandardGlyphVector(this, var2, var1);
  632.    }
  633.  
  634.    public GlyphVector createGlyphVector(FontRenderContext var1, CharacterIterator var2) {
  635.       return new StandardGlyphVector(this, var2, var1);
  636.    }
  637.  
  638.    public GlyphVector createGlyphVector(FontRenderContext var1, int[] var2) {
  639.       return new StandardGlyphVector(this, var2, var1);
  640.    }
  641.  
  642.    private static Hashtable ffApply(String var0, Map var1) {
  643.       Hashtable var2 = new Hashtable(var1);
  644.       var2.put(TextAttribute.FAMILY, var0);
  645.       return var2;
  646.    }
  647.  
  648.    private static Hashtable ffApply(AffineTransform var0, Map var1) {
  649.       Hashtable var2 = new Hashtable(var1);
  650.       var2.put(TextAttribute.TRANSFORM, new TransformAttribute(var0));
  651.       return var2;
  652.    }
  653.  
  654.    private static Hashtable ffApply(int var0, Map var1) {
  655.       Hashtable var2 = new Hashtable(var1);
  656.       if ((var0 & 1) != 0) {
  657.          var2.put(TextAttribute.WEIGHT, TextAttribute.WEIGHT_BOLD);
  658.       } else {
  659.          var2.remove(TextAttribute.WEIGHT);
  660.       }
  661.  
  662.       if ((var0 & 2) != 0) {
  663.          var2.put(TextAttribute.POSTURE, TextAttribute.POSTURE_OBLIQUE);
  664.       } else {
  665.          var2.remove(TextAttribute.POSTURE);
  666.       }
  667.  
  668.       return var2;
  669.    }
  670.  
  671.    private static Hashtable ffApply(float var0, Map var1) {
  672.       Hashtable var2 = new Hashtable(var1);
  673.       var2.put(TextAttribute.SIZE, new Float(var0));
  674.       return var2;
  675.    }
  676.  
  677.    private static Hashtable ffApply(String var0, int var1, float var2, Map var3) {
  678.       return ffApply((String)var0, ffApply(var1, ffApply(var2, var3)));
  679.    }
  680.  
  681.    private static native void initIDs();
  682.  
  683.    private native void pDispose();
  684.  
  685.    protected void finalize() throws Throwable {
  686.       if (this.peer != null) {
  687.          this.pDispose();
  688.       }
  689.  
  690.       super.finalize();
  691.    }
  692.  
  693.    private short getLcidFromLocale(Locale var1) {
  694.       short var2 = 1033;
  695.       if (var1.equals(Locale.US)) {
  696.          return var2;
  697.       } else {
  698.          String var3;
  699.          try {
  700.             ResourceBundle var4 = ResourceBundle.getBundle("java.text.resources.LocaleElements", var1);
  701.             var3 = var4.getString("LocaleID");
  702.          } catch (MissingResourceException var6) {
  703.             return var2;
  704.          }
  705.  
  706.          try {
  707.             var2 = (short)Integer.parseInt(var3, 16);
  708.          } catch (NumberFormatException var5) {
  709.          }
  710.  
  711.          return var2;
  712.       }
  713.    }
  714.  
  715.    static {
  716.       Toolkit.loadLibraries();
  717.       initIDs();
  718.       EMPTY_MAP = new Hashtable(5, 0.9F);
  719.    }
  720. }
  721.