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 / sun / awt / PlatformFont.class (.txt) < prev    next >
Encoding:
Java Class File  |  1979-12-31  |  7.4 KB  |  445 lines

  1. package sun.awt;
  2.  
  3. import java.awt.peer.FontPeer;
  4. import java.io.BufferedInputStream;
  5. import java.io.File;
  6. import java.io.FileInputStream;
  7. import java.io.InputStream;
  8. import java.security.AccessController;
  9. import java.util.Hashtable;
  10. import java.util.Properties;
  11. import java.util.Vector;
  12. import sun.io.CharToByteConverter;
  13. import sun.io.CharacterEncoding;
  14. import sun.io.ConversionBufferFullException;
  15. import sun.io.MalformedInputException;
  16.  
  17. public abstract class PlatformFont implements FontPeer {
  18.    protected FontDescriptor[] componentFonts;
  19.    protected char defaultChar;
  20.    protected Properties props;
  21.    protected FontDescriptor defaultFont;
  22.    protected static Hashtable charsetRegistry;
  23.    protected String aliasName;
  24.    protected String styleString;
  25.    private Object[] fontCache;
  26.    protected static int FONTCACHESIZE;
  27.    protected static int FONTCACHEMASK;
  28.    protected static String osVersion;
  29.    private static Properties fprops;
  30.  
  31.    public PlatformFont(String var1, int var2) {
  32.       if (fprops == null) {
  33.          this.props = null;
  34.       } else {
  35.          this.props = fprops;
  36.          this.aliasName = this.props.getProperty("alias." + var1.toLowerCase());
  37.          if (this.aliasName == null) {
  38.             this.aliasName = var1.toLowerCase();
  39.          }
  40.  
  41.          if (this.props.getProperty(this.aliasName + ".0") == null && this.props.getProperty(this.aliasName + ".plain.0") == null) {
  42.             this.aliasName = "sansserif";
  43.          }
  44.  
  45.          this.styleString = styleStr(var2);
  46.          Vector var3 = new Vector(5);
  47.          int var4 = 0;
  48.  
  49.          while(true) {
  50.             String var5 = String.valueOf(var4);
  51.             String var6 = this.props.getProperty(this.aliasName + "." + this.styleString + "." + var5);
  52.             if (var6 == null) {
  53.                var6 = this.props.getProperty(this.aliasName + "." + var5);
  54.                if (var6 == null) {
  55.                   this.componentFonts = new FontDescriptor[var4];
  56.  
  57.                   for(int var22 = 0; var22 < var4; ++var22) {
  58.                      this.componentFonts[var22] = (FontDescriptor)var3.elementAt(var22);
  59.                   }
  60.  
  61.                   try {
  62.                      var23 = Integer.parseInt(this.props.getProperty("default.char", "003f"), 16);
  63.                   } catch (NumberFormatException var19) {
  64.                      var23 = 63;
  65.                   }
  66.  
  67.                   this.defaultChar = '?';
  68.                   if (this.componentFonts.length > 0) {
  69.                      this.defaultFont = this.componentFonts[0];
  70.                   }
  71.  
  72.                   for(int var24 = 0; var24 < this.componentFonts.length; ++var24) {
  73.                      if (!this.componentFonts[var24].isExcluded((char)var23) && this.componentFonts[var24].fontCharset.canConvert((char)var23)) {
  74.                         this.defaultFont = this.componentFonts[var24];
  75.                         this.defaultChar = (char)var23;
  76.                         break;
  77.                      }
  78.                   }
  79.  
  80.                   return;
  81.                }
  82.             }
  83.  
  84.             String var7 = this.props.getProperty("fontcharset." + this.aliasName + "." + this.styleString + "." + var5);
  85.             if (var7 == null) {
  86.                var7 = this.props.getProperty("fontcharset." + this.aliasName + "." + var5);
  87.                if (var7 == null) {
  88.                   var7 = "default";
  89.                }
  90.             }
  91.  
  92.             CharToByteConverter var8 = this.getFontCharset(var7.trim(), var6);
  93.             String var9 = this.props.getProperty("exclusion." + this.aliasName + "." + this.styleString + "." + var5);
  94.             if (var9 == null) {
  95.                var9 = this.props.getProperty("exclusion." + this.aliasName + "." + var5);
  96.                if (var9 == null) {
  97.                   var9 = "none";
  98.                }
  99.             }
  100.  
  101.             int[] var10;
  102.             if (var9.equals("none")) {
  103.                var10 = new int[0];
  104.             } else {
  105.                int var11 = 1;
  106.                int var25 = 0;
  107.  
  108.                label110:
  109.                while(true) {
  110.                   var25 = var9.indexOf(44, var25);
  111.                   if (var25 == -1) {
  112.                      var10 = new int[var11];
  113.  
  114.                      for(int var13 = 0; var13 < var11; ++var13) {
  115.                         int var16 = 0;
  116.                         int var17 = 0;
  117.  
  118.                         String var14;
  119.                         String var15;
  120.                         try {
  121.                            var14 = var9.substring(var13 * 10, var13 * 10 + 4);
  122.                            var15 = var9.substring(var13 * 10 + 5, var13 * 10 + 9);
  123.                         } catch (StringIndexOutOfBoundsException var21) {
  124.                            var10 = new int[0];
  125.                            break label110;
  126.                         }
  127.  
  128.                         try {
  129.                            var16 = Integer.parseInt(var14, 16);
  130.                            var17 = Integer.parseInt(var15, 16);
  131.                         } catch (NumberFormatException var20) {
  132.                            var10 = new int[0];
  133.                            break label110;
  134.                         }
  135.  
  136.                         var10[var13] = var16 << 16 | var17;
  137.                      }
  138.                      break;
  139.                   }
  140.  
  141.                   ++var25;
  142.                   ++var11;
  143.                }
  144.             }
  145.  
  146.             var3.addElement(new FontDescriptor(var6, var8, var10));
  147.             ++var4;
  148.          }
  149.       }
  150.    }
  151.  
  152.    private static File tryOpeningFontProp(File var0, String var1, String var2, String var3) {
  153.       if (var0 != null) {
  154.          return var0;
  155.       } else {
  156.          String var4 = var1 + File.separator + "lib" + File.separator + "font.properties";
  157.          if (var2 != null) {
  158.             var4 = var4 + "." + var2;
  159.             if (var3 != null) {
  160.                var4 = var4 + "_" + var3;
  161.             }
  162.          }
  163.  
  164.          File var5 = new File(var4 + "." + osVersion);
  165.          if (var5 != null && var5.canRead()) {
  166.             return var5;
  167.          } else {
  168.             var5 = new File(var4);
  169.             return var5 != null && var5.canRead() ? var5 : null;
  170.          }
  171.       }
  172.    }
  173.  
  174.    private static void initializeProps() {
  175.       String var0 = System.getProperty("java.home");
  176.       String var1 = System.getProperty("user.home");
  177.       if (var0 == null) {
  178.          throw new Error("java.home property not set");
  179.       } else {
  180.          String var2 = System.getProperty("user.language", "en");
  181.          String var3 = System.getProperty("user.region");
  182.          String var4 = System.getProperty("file.encoding");
  183.          String var5 = CharacterEncoding.aliasName(var4);
  184.          if (var5 == null) {
  185.             var5 = var4;
  186.          }
  187.  
  188.          if (osVersion == null) {
  189.             osVersion = System.getProperty("os.version");
  190.          }
  191.  
  192.          try {
  193.             File var6 = null;
  194.             if (var3 != null) {
  195.                var6 = tryOpeningFontProp(var6, var1, var2, var3 + "_" + var5);
  196.                var6 = tryOpeningFontProp(var6, var0, var2, var3 + "_" + var5);
  197.                var6 = tryOpeningFontProp(var6, var1, var2, var3);
  198.                var6 = tryOpeningFontProp(var6, var0, var2, var3);
  199.             }
  200.  
  201.             var6 = tryOpeningFontProp(var6, var1, var2, var5);
  202.             var6 = tryOpeningFontProp(var6, var0, var2, var5);
  203.             var6 = tryOpeningFontProp(var6, var1, var2, (String)null);
  204.             var6 = tryOpeningFontProp(var6, var0, var2, (String)null);
  205.             var6 = tryOpeningFontProp(var6, var1, var5, (String)null);
  206.             var6 = tryOpeningFontProp(var6, var0, var5, (String)null);
  207.             var6 = tryOpeningFontProp(var6, var1, (String)null, (String)null);
  208.             var6 = tryOpeningFontProp(var6, var0, (String)null, (String)null);
  209.             Properties var7 = new Properties();
  210.             ((Hashtable)var7).put("serif.0", "unknown");
  211.             ((Hashtable)var7).put("sansserif.0", "unknown");
  212.             ((Hashtable)var7).put("monospaced.0", "unknown");
  213.             ((Hashtable)var7).put("dialog.0", "unknown");
  214.             ((Hashtable)var7).put("dialoginput.0", "unknown");
  215.             fprops = new Properties(var7);
  216.             BufferedInputStream var8 = new BufferedInputStream(new FileInputStream(var6.getPath()));
  217.             fprops.load(var8);
  218.             ((InputStream)var8).close();
  219.          } catch (Exception var9) {
  220.          }
  221.  
  222.       }
  223.    }
  224.  
  225.    public CharsetString[] makeMultiCharsetString(String var1) {
  226.       return this.makeMultiCharsetString(var1.toCharArray(), 0, var1.length());
  227.    }
  228.  
  229.    public CharsetString[] makeMultiCharsetString(char[] var1, int var2, int var3) {
  230.       if (var3 < 1) {
  231.          return new CharsetString[0];
  232.       } else {
  233.          Vector var4 = null;
  234.          char[] var5 = new char[var3];
  235.          char var6 = this.defaultChar;
  236.          FontDescriptor var7 = this.defaultFont;
  237.  
  238.          for(int var8 = 0; var8 < this.componentFonts.length; ++var8) {
  239.             if (!this.componentFonts[var8].isExcluded(var1[var2]) && this.componentFonts[var8].fontCharset.canConvert(var1[var2])) {
  240.                var7 = this.componentFonts[var8];
  241.                var6 = var1[var2];
  242.                break;
  243.             }
  244.          }
  245.  
  246.          var5[0] = var6;
  247.          int var9 = 0;
  248.  
  249.          for(int var10 = 1; var10 < var3; ++var10) {
  250.             char var11 = var1[var2 + var10];
  251.             FontDescriptor var12 = this.defaultFont;
  252.             var6 = this.defaultChar;
  253.  
  254.             for(int var13 = 0; var13 < this.componentFonts.length; ++var13) {
  255.                if (!this.componentFonts[var13].isExcluded(var11) && this.componentFonts[var13].fontCharset.canConvert(var11)) {
  256.                   var12 = this.componentFonts[var13];
  257.                   var6 = var11;
  258.                   break;
  259.                }
  260.             }
  261.  
  262.             var5[var10] = var6;
  263.             if (var7 != var12) {
  264.                if (var4 == null) {
  265.                   var4 = new Vector(3);
  266.                }
  267.  
  268.                var4.addElement(new CharsetString(var5, var9, var10 - var9, var7));
  269.                var7 = var12;
  270.                var12 = this.defaultFont;
  271.                var9 = var10;
  272.             }
  273.          }
  274.  
  275.          CharsetString var17 = new CharsetString(var5, var9, var3 - var9, var7);
  276.          CharsetString[] var15;
  277.          if (var4 == null) {
  278.             var15 = new CharsetString[]{var17};
  279.          } else {
  280.             var4.addElement(var17);
  281.             var15 = new CharsetString[var4.size()];
  282.  
  283.             for(int var18 = 0; var18 < var4.size(); ++var18) {
  284.                var15[var18] = (CharsetString)var4.elementAt(var18);
  285.             }
  286.          }
  287.  
  288.          return var15;
  289.       }
  290.    }
  291.  
  292.    public boolean mightHaveMultiFontMetrics() {
  293.       return this.props != null;
  294.    }
  295.  
  296.    public Object[] makeConvertedMultiFontString(String var1) throws MalformedInputException, ConversionBufferFullException {
  297.       return this.makeConvertedMultiFontChars(var1.toCharArray(), 0, var1.length());
  298.    }
  299.  
  300.    public Object[] makeConvertedMultiFontChars(char[] var1, int var2, int var3) throws MalformedInputException, ConversionBufferFullException {
  301.       Object[] var4 = new Object[2];
  302.       byte[] var6 = null;
  303.       int var7 = var2;
  304.       int var8 = 0;
  305.       int var9 = 0;
  306.       Object var11 = null;
  307.       FontDescriptor var12 = null;
  308.       int var15 = var2 + var3;
  309.       if (var2 >= 0 && var15 <= var1.length) {
  310.          if (var2 >= var15) {
  311.             return null;
  312.          } else {
  313.             for(; var7 < var15; ++var7) {
  314.                char var13 = var1[var7];
  315.                int var10 = var13 & FONTCACHEMASK;
  316.                PlatformFontCache var14 = (PlatformFontCache)this.getFontCache()[var10];
  317.                if (var14 == null || var14.uniChar != var13) {
  318.                   FontDescriptor var32 = this.defaultFont;
  319.                   var13 = this.defaultChar;
  320.                   char var16 = var1[var7];
  321.                   int var17 = this.componentFonts.length;
  322.  
  323.                   for(int var18 = 0; var18 < var17; ++var18) {
  324.                      FontDescriptor var19 = this.componentFonts[var18];
  325.                      var19.fontCharset.reset();
  326.                      var19.fontCharset.setSubstitutionMode(false);
  327.                      if (!var19.isExcluded(var16) && var19.fontCharset.canConvert(var16)) {
  328.                         var32 = var19;
  329.                         var13 = var16;
  330.                         break;
  331.                      }
  332.                   }
  333.  
  334.                   try {
  335.                      char[] var35 = new char[]{var13};
  336.                      var14 = new PlatformFontCache(this);
  337.                      var14.encodingSize = (byte)var32.fontCharset.convert(var35, 0, 1, var14.encoding, 0, 3);
  338.                      var14.fontDescriptor = var32;
  339.                      var14.uniChar = var1[var7];
  340.                      this.getFontCache()[var10] = var14;
  341.                   } catch (Exception var20) {
  342.                      System.err.println(var20);
  343.                      ((Throwable)var20).printStackTrace();
  344.                      return null;
  345.                   }
  346.                }
  347.  
  348.                if (var12 != var14.fontDescriptor) {
  349.                   if (var12 != null) {
  350.                      var4[var9++] = var12;
  351.                      var4[var9++] = var6;
  352.                      if (var6 != null) {
  353.                         var8 -= 4;
  354.                         var6[0] = (byte)(var8 >> 24);
  355.                         var6[1] = (byte)(var8 >> 16);
  356.                         var6[2] = (byte)(var8 >> 8);
  357.                         var6[3] = (byte)var8;
  358.                      }
  359.  
  360.                      if (var9 >= var4.length) {
  361.                         Object[] var34 = new Object[var4.length * 2];
  362.                         System.arraycopy(var4, 0, var34, 0, var4.length);
  363.                         var4 = var34;
  364.                      }
  365.                   }
  366.  
  367.                   var6 = new byte[(var15 - var7 + 1) * var14.fontDescriptor.fontCharset.getMaxBytesPerChar() + 4];
  368.                   var8 = 4;
  369.                   var12 = var14.fontDescriptor;
  370.                }
  371.  
  372.                if (var14.encodingSize == 1) {
  373.                   var6[var8++] = var14.encoding[0];
  374.                } else if (var14.encodingSize == 2) {
  375.                   var6[var8++] = var14.encoding[0];
  376.                   var6[var8++] = var14.encoding[1];
  377.                } else if (var14.encodingSize == 3) {
  378.                   var6[var8++] = var14.encoding[0];
  379.                   var6[var8++] = var14.encoding[1];
  380.                   var6[var8++] = var14.encoding[2];
  381.                } else if (var14.encodingSize == 4) {
  382.                   var6[var8++] = var14.encoding[0];
  383.                   var6[var8++] = var14.encoding[1];
  384.                   var6[var8++] = var14.encoding[2];
  385.                   var6[var8++] = var14.encoding[3];
  386.                }
  387.             }
  388.  
  389.             var4[var9++] = var12;
  390.             var4[var9++] = var6;
  391.             if (var6 != null) {
  392.                var8 -= 4;
  393.                var6[0] = (byte)(var8 >> 24);
  394.                var6[1] = (byte)(var8 >> 16);
  395.                var6[2] = (byte)(var8 >> 8);
  396.                var6[3] = (byte)var8;
  397.             }
  398.  
  399.             return var4;
  400.          }
  401.       } else {
  402.          throw new ArrayIndexOutOfBoundsException();
  403.       }
  404.    }
  405.  
  406.    protected abstract CharToByteConverter getFontCharset(String var1, String var2);
  407.  
  408.    protected final Object[] getFontCache() {
  409.       if (this.fontCache == null) {
  410.          this.fontCache = new Object[FONTCACHESIZE];
  411.       }
  412.  
  413.       return this.fontCache;
  414.    }
  415.  
  416.    public static String styleStr(int var0) {
  417.       switch (var0) {
  418.          case 1:
  419.             return "bold";
  420.          case 2:
  421.             return "italic";
  422.          case 3:
  423.             return "bolditalic";
  424.          default:
  425.             return "plain";
  426.       }
  427.    }
  428.  
  429.    private static native void initIDs();
  430.  
  431.    // $FF: synthetic method
  432.    static void access$000() {
  433.       initializeProps();
  434.    }
  435.  
  436.    static {
  437.       NativeLibLoader.loadLibraries();
  438.       initIDs();
  439.       charsetRegistry = new Hashtable(5);
  440.       FONTCACHESIZE = 256;
  441.       FONTCACHEMASK = FONTCACHESIZE - 1;
  442.       AccessController.doPrivileged(new 1());
  443.    }
  444. }
  445.