home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 1999 April / DPPCPRO0499.ISO / April / Notes / 50b2wic.exe / DATA1.CAB / NotesProgramFilesJavaSupport / rt.jar / sun / awt / PlatformFont.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-04-23  |  6.3 KB  |  297 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.util.Hashtable;
  9. import java.util.Properties;
  10. import java.util.Vector;
  11. import sun.io.CharToByteConverter;
  12.  
  13. public abstract class PlatformFont implements FontPeer {
  14.    protected FontDescriptor[] componentFonts;
  15.    protected char defaultChar;
  16.    protected Properties props;
  17.    protected FontDescriptor defaultFont;
  18.    protected static Hashtable charsetRegistry = new Hashtable(5);
  19.    protected String aliasName;
  20.    protected String styleString;
  21.    private static Properties fprops;
  22.  
  23.    public PlatformFont(String var1, int var2) {
  24.       if (fprops == null) {
  25.          this.props = null;
  26.       } else {
  27.          this.props = fprops;
  28.          this.aliasName = this.props.getProperty("alias." + var1.toLowerCase());
  29.          if (this.aliasName == null) {
  30.             this.aliasName = var1.toLowerCase();
  31.          }
  32.  
  33.          if (this.props.getProperty(this.aliasName + ".0") == null && this.props.getProperty(this.aliasName + ".plain.0") == null) {
  34.             this.aliasName = "sansserif";
  35.          }
  36.  
  37.          this.styleString = styleStr(var2);
  38.          Vector var3 = new Vector(5);
  39.          int var4 = 0;
  40.  
  41.          while(true) {
  42.             String var5 = String.valueOf(var4);
  43.             String var6 = this.props.getProperty(this.aliasName + "." + this.styleString + "." + var5);
  44.             if (var6 == null) {
  45.                var6 = this.props.getProperty(this.aliasName + "." + var5);
  46.                if (var6 == null) {
  47.                   this.componentFonts = new FontDescriptor[var4];
  48.  
  49.                   for(int var21 = 0; var21 < var4; ++var21) {
  50.                      this.componentFonts[var21] = (FontDescriptor)var3.elementAt(var21);
  51.                   }
  52.  
  53.                   try {
  54.                      var22 = Integer.parseInt(this.props.getProperty("default.char", "003f"), 16);
  55.                   } catch (NumberFormatException var18) {
  56.                      var22 = 63;
  57.                   }
  58.  
  59.                   this.defaultChar = '?';
  60.                   if (this.componentFonts.length > 0) {
  61.                      this.defaultFont = this.componentFonts[0];
  62.                   }
  63.  
  64.                   for(int var23 = 0; var23 < this.componentFonts.length; ++var23) {
  65.                      if (!this.componentFonts[var23].isExcluded((char)var22) && this.componentFonts[var23].fontCharset.canConvert((char)var22)) {
  66.                         this.defaultFont = this.componentFonts[var23];
  67.                         this.defaultChar = (char)var22;
  68.                         return;
  69.                      }
  70.                   }
  71.  
  72.                   return;
  73.                }
  74.             }
  75.  
  76.             String var7 = this.props.getProperty("fontcharset." + this.aliasName + "." + this.styleString + "." + var5);
  77.             if (var7 == null) {
  78.                var7 = this.props.getProperty("fontcharset." + this.aliasName + "." + var5);
  79.                if (var7 == null) {
  80.                   var7 = "default";
  81.                }
  82.             }
  83.  
  84.             CharToByteConverter var8 = this.getFontCharset(var7.trim(), var6);
  85.             String var9 = this.props.getProperty("exclusion." + this.aliasName + "." + this.styleString + "." + var5);
  86.             if (var9 == null) {
  87.                var9 = this.props.getProperty("exclusion." + this.aliasName + "." + var5);
  88.                if (var9 == null) {
  89.                   var9 = "none";
  90.                }
  91.             }
  92.  
  93.             int[] var10;
  94.             if (var9.equals("none")) {
  95.                var10 = new int[0];
  96.             } else {
  97.                int var11 = 1;
  98.                int var24 = 0;
  99.  
  100.                label106:
  101.                while(true) {
  102.                   var24 = var9.indexOf(44, var24);
  103.                   if (var24 == -1) {
  104.                      var10 = new int[var11];
  105.  
  106.                      for(int var13 = 0; var13 < var11; ++var13) {
  107.                         int var16 = 0;
  108.                         int var17 = 0;
  109.  
  110.                         String var14;
  111.                         String var15;
  112.                         try {
  113.                            var14 = var9.substring(var13 * 10, var13 * 10 + 4);
  114.                            var15 = var9.substring(var13 * 10 + 5, var13 * 10 + 9);
  115.                         } catch (StringIndexOutOfBoundsException var20) {
  116.                            var10 = new int[0];
  117.                            break label106;
  118.                         }
  119.  
  120.                         try {
  121.                            var16 = Integer.parseInt(var14, 16);
  122.                            var17 = Integer.parseInt(var15, 16);
  123.                         } catch (NumberFormatException var19) {
  124.                            var10 = new int[0];
  125.                            break label106;
  126.                         }
  127.  
  128.                         var10[var13] = var16 << 16 | var17;
  129.                      }
  130.                      break;
  131.                   }
  132.  
  133.                   ++var24;
  134.                   ++var11;
  135.                }
  136.             }
  137.  
  138.             var3.addElement(new FontDescriptor(var6, var8, var10));
  139.             ++var4;
  140.          }
  141.       }
  142.    }
  143.  
  144.    public boolean mightHaveMultiFontMetrics() {
  145.       return this.props != null;
  146.    }
  147.  
  148.    public CharsetString[] makeMultiCharsetString(String var1) {
  149.       return this.makeMultiCharsetString(var1.toCharArray(), 0, var1.length());
  150.    }
  151.  
  152.    public CharsetString[] makeMultiCharsetString(char[] var1, int var2, int var3) {
  153.       if (var3 < 1) {
  154.          return new CharsetString[0];
  155.       } else {
  156.          Vector var4 = null;
  157.          char[] var5 = new char[var3];
  158.          char var6 = this.defaultChar;
  159.          FontDescriptor var7 = this.defaultFont;
  160.  
  161.          for(int var8 = 0; var8 < this.componentFonts.length; ++var8) {
  162.             if (!this.componentFonts[var8].isExcluded(var1[var2]) && this.componentFonts[var8].fontCharset.canConvert(var1[var2])) {
  163.                var7 = this.componentFonts[var8];
  164.                var6 = var1[var2];
  165.                break;
  166.             }
  167.          }
  168.  
  169.          var5[0] = var6;
  170.          int var9 = 0;
  171.  
  172.          for(int var10 = 1; var10 < var3; ++var10) {
  173.             char var11 = var1[var2 + var10];
  174.             FontDescriptor var12 = this.defaultFont;
  175.             var6 = this.defaultChar;
  176.  
  177.             for(int var13 = 0; var13 < this.componentFonts.length; ++var13) {
  178.                if (!this.componentFonts[var13].isExcluded(var11) && this.componentFonts[var13].fontCharset.canConvert(var11)) {
  179.                   var12 = this.componentFonts[var13];
  180.                   var6 = var11;
  181.                   break;
  182.                }
  183.             }
  184.  
  185.             var5[var10] = var6;
  186.             if (var7 != var12) {
  187.                if (var4 == null) {
  188.                   var4 = new Vector(3);
  189.                }
  190.  
  191.                var4.addElement(new CharsetString(var5, var9, var10 - var9, var7));
  192.                var7 = var12;
  193.                var12 = this.defaultFont;
  194.                var9 = var10;
  195.             }
  196.          }
  197.  
  198.          CharsetString var17 = new CharsetString(var5, var9, var3 - var9, var7);
  199.          CharsetString[] var15;
  200.          if (var4 == null) {
  201.             var15 = new CharsetString[]{var17};
  202.          } else {
  203.             var4.addElement(var17);
  204.             var15 = new CharsetString[var4.size()];
  205.  
  206.             for(int var18 = 0; var18 < var4.size(); ++var18) {
  207.                var15[var18] = (CharsetString)var4.elementAt(var18);
  208.             }
  209.          }
  210.  
  211.          return var15;
  212.       }
  213.    }
  214.  
  215.    protected abstract CharToByteConverter getFontCharset(String var1, String var2);
  216.  
  217.    public static String styleStr(int var0) {
  218.       switch (var0) {
  219.          case 1:
  220.             return "bold";
  221.          case 2:
  222.             return "italic";
  223.          case 3:
  224.             return "bolditalic";
  225.          default:
  226.             return "plain";
  227.       }
  228.    }
  229.  
  230.    static {
  231.       String var0 = System.getProperty("java.home");
  232.       String var1 = System.getProperty("user.home");
  233.       if (var0 == null) {
  234.          throw new Error("java.home property not set");
  235.       } else {
  236.          String var2 = System.getProperty("user.language", "en");
  237.          String var3 = System.getProperty("user.region");
  238.          String var4 = System.getProperty("file.encoding");
  239.  
  240.          try {
  241.             File var5 = null;
  242.             if (var3 != null) {
  243.                var5 = new File(var0 + File.separator + "lib" + File.separator + "font.properties." + var2 + "_" + var3 + "_" + var4);
  244.                if (var5 == null || !var5.canRead()) {
  245.                   var5 = new File(var0 + File.separator + "lib" + File.separator + "font.properties." + var2 + "_" + var3);
  246.                }
  247.             }
  248.  
  249.             if (var5 == null || !var5.canRead()) {
  250.                var5 = new File(var0 + File.separator + "lib" + File.separator + "font.properties." + var2 + "_" + var4);
  251.                if (var5 == null || !var5.canRead()) {
  252.                   var5 = new File(var0 + File.separator + "lib" + File.separator + "font.properties." + var2);
  253.                }
  254.  
  255.                if (!var5.canRead()) {
  256.                   var5 = new File(var0 + File.separator + "lib" + File.separator + "font.properties");
  257.                   if (!var5.canRead()) {
  258.                      if (var3 != null) {
  259.                         var5 = new File(var1 + File.separator + "lib" + File.separator + "font.properties." + var2 + "_" + var3 + "_" + var4);
  260.                         if (var5 == null || !var5.canRead()) {
  261.                            var5 = new File(var1 + File.separator + "lib" + File.separator + "font.properties." + var2 + "_" + var3);
  262.                         }
  263.                      }
  264.  
  265.                      if (!var5.canRead()) {
  266.                         var5 = new File(var1 + File.separator + "font.properties." + var2 + "_" + var4);
  267.                         if (var5 == null || !var5.canRead()) {
  268.                            var5 = new File(var1 + File.separator + "font.properties." + var2);
  269.                         }
  270.  
  271.                         if (!var5.canRead()) {
  272.                            var5 = new File(var1 + File.separator + "font.properties");
  273.                            if (!var5.canRead()) {
  274.                               throw new Exception();
  275.                            }
  276.                         }
  277.                      }
  278.                   }
  279.                }
  280.             }
  281.  
  282.             Properties var6 = new Properties();
  283.             ((Hashtable)var6).put("serif.0", "unknown");
  284.             ((Hashtable)var6).put("sansserif.0", "unknown");
  285.             ((Hashtable)var6).put("monospaced.0", "unknown");
  286.             ((Hashtable)var6).put("dialog.0", "unknown");
  287.             ((Hashtable)var6).put("dialoginput.0", "unknown");
  288.             fprops = new Properties(var6);
  289.             BufferedInputStream var7 = new BufferedInputStream(new FileInputStream(var5.getPath()));
  290.             fprops.load(var7);
  291.             ((InputStream)var7).close();
  292.          } catch (Exception var8) {
  293.          }
  294.       }
  295.    }
  296. }
  297.