home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 June / CHIPHEFT062001.ISO / browser / nc32lyc / comm.z / java40.jar / sun / awt / PlatformFont.class (.txt) < prev    next >
Encoding:
Java Class File  |  2000-08-15  |  7.6 KB  |  349 lines

  1. package sun.awt;
  2.  
  3. import java.awt.Toolkit;
  4. import java.awt.peer.FontPeer;
  5. import java.io.File;
  6. import java.io.FileInputStream;
  7. import java.io.FileNotFoundException;
  8. import java.io.FileOutputStream;
  9. import java.io.IOException;
  10. import java.io.InputStream;
  11. import java.io.PrintWriter;
  12. import java.util.Hashtable;
  13. import java.util.Properties;
  14. import java.util.Vector;
  15. import sun.io.CharToByteConverter;
  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 = new Hashtable(5);
  23.    protected String aliasName;
  24.    protected String styleString;
  25.    private static Properties fprops;
  26.    private static PrintWriter log;
  27.    private static final String LOG_FONT_PROPERTIES = "AWT.LogFontProperties";
  28.    private static final String LOG_FONT_PROPERTIES_FILE = "AWT.LogFontPropertiesFile";
  29.  
  30.    public PlatformFont(String var1, int var2) {
  31.       if (fprops == null) {
  32.          this.props = null;
  33.       } else {
  34.          this.props = fprops;
  35.          this.aliasName = this.props.getProperty("alias." + var1.toLowerCase());
  36.          if (this.aliasName == null) {
  37.             this.aliasName = var1.toLowerCase();
  38.          }
  39.  
  40.          if (this.props.getProperty(this.aliasName + ".0") == null && this.props.getProperty(this.aliasName + ".plain.0") == null) {
  41.             this.aliasName = "sansserif";
  42.          }
  43.  
  44.          this.styleString = styleStr(var2);
  45.          Vector var3 = new Vector(5);
  46.          int var4 = 0;
  47.  
  48.          while(true) {
  49.             String var5 = String.valueOf(var4);
  50.             String var6 = this.props.getProperty(this.aliasName + "." + this.styleString + "." + var5);
  51.             if (var6 == null) {
  52.                var6 = this.props.getProperty(this.aliasName + "." + var5);
  53.                if (var6 == null) {
  54.                   this.componentFonts = new FontDescriptor[var4];
  55.  
  56.                   for(int var21 = 0; var21 < var4; ++var21) {
  57.                      this.componentFonts[var21] = (FontDescriptor)var3.elementAt(var21);
  58.                   }
  59.  
  60.                   try {
  61.                      var22 = Integer.parseInt(this.props.getProperty("default.char", "003f"), 16);
  62.                   } catch (NumberFormatException var18) {
  63.                      var22 = 63;
  64.                   }
  65.  
  66.                   this.defaultChar = '?';
  67.                   if (this.componentFonts.length > 0) {
  68.                      this.defaultFont = this.componentFonts[0];
  69.                   }
  70.  
  71.                   for(int var23 = 0; var23 < this.componentFonts.length; ++var23) {
  72.                      if (!this.componentFonts[var23].isExcluded((char)var22) && this.componentFonts[var23].fontCharset.canConvert((char)var22)) {
  73.                         this.defaultFont = this.componentFonts[var23];
  74.                         this.defaultChar = (char)var22;
  75.                         return;
  76.                      }
  77.                   }
  78.  
  79.                   return;
  80.                }
  81.             }
  82.  
  83.             String var7 = this.props.getProperty("fontcharset." + this.aliasName + "." + this.styleString + "." + var5);
  84.             if (var7 == null) {
  85.                var7 = this.props.getProperty("fontcharset." + this.aliasName + "." + var5);
  86.                if (var7 == null) {
  87.                   var7 = "default";
  88.                }
  89.             }
  90.  
  91.             CharToByteConverter var8 = this.getFontCharset(var7.trim(), var6);
  92.             String var9 = this.props.getProperty("exclusion." + this.aliasName + "." + this.styleString + "." + var5);
  93.             if (var9 == null) {
  94.                var9 = this.props.getProperty("exclusion." + this.aliasName + "." + var5);
  95.                if (var9 == null) {
  96.                   var9 = "none";
  97.                }
  98.             }
  99.  
  100.             int[] var10;
  101.             if (var9.equals("none")) {
  102.                var10 = new int[0];
  103.             } else {
  104.                int var11 = 1;
  105.                int var24 = 0;
  106.  
  107.                label106:
  108.                while(true) {
  109.                   var24 = var9.indexOf(44, var24);
  110.                   if (var24 == -1) {
  111.                      var10 = new int[var11];
  112.  
  113.                      for(int var13 = 0; var13 < var11; ++var13) {
  114.                         int var16 = 0;
  115.                         int var17 = 0;
  116.  
  117.                         String var14;
  118.                         String var15;
  119.                         try {
  120.                            var14 = var9.substring(var13 * 10, var13 * 10 + 4);
  121.                            var15 = var9.substring(var13 * 10 + 5, var13 * 10 + 9);
  122.                         } catch (StringIndexOutOfBoundsException var20) {
  123.                            var10 = new int[0];
  124.                            break label106;
  125.                         }
  126.  
  127.                         try {
  128.                            var16 = Integer.parseInt(var14, 16);
  129.                            var17 = Integer.parseInt(var15, 16);
  130.                         } catch (NumberFormatException var19) {
  131.                            var10 = new int[0];
  132.                            break label106;
  133.                         }
  134.  
  135.                         var10[var13] = var16 << 16 | var17;
  136.                      }
  137.                      break;
  138.                   }
  139.  
  140.                   ++var24;
  141.                   ++var11;
  142.                }
  143.             }
  144.  
  145.             var3.addElement(new FontDescriptor(var6, var8, var10));
  146.             ++var4;
  147.          }
  148.       }
  149.    }
  150.  
  151.    public boolean mightHaveMultiFontMetrics() {
  152.       return this.props != null;
  153.    }
  154.  
  155.    private static void logMessage(String var0) {
  156.       if (log != null) {
  157.          log.println(var0);
  158.       }
  159.  
  160.    }
  161.  
  162.    private static boolean loadProperties(String var0) {
  163.       SecurityManager.enablePrivilege("UniversalPropertyRead");
  164.       logMessage("loadProperties(" + var0 + ")");
  165.       String var1 = System.getProperty("java.font.property.path");
  166.       if (var1 != null) {
  167.          logMessage("MOZILLA_JAVA_FONT_PROPERTY_PATH is set to \"" + var1 + "\", trying it...");
  168.          if (loadPropertiesFromFile(var1, var0)) {
  169.             return true;
  170.          }
  171.  
  172.          logMessage("Read failed from MOZILLA_JAVA_FONT_PROPERTY_PATH.");
  173.       }
  174.  
  175.       logMessage("Trying to read from system classpath...");
  176.  
  177.       try {
  178.          InputStream var2 = ClassLoader.getSystemResourceAsStream(var0);
  179.          if (var2 != null) {
  180.             fprops.load(var2);
  181.             return true;
  182.          }
  183.       } catch (IOException var3) {
  184.          System.err.println("Exception occurred while loading " + var0 + ": " + var3);
  185.       }
  186.  
  187.       logMessage("System classpath failed; unable to load \"" + var0 + "\"");
  188.       String var4 = System.getProperty("mozilla.home", ".");
  189.       var4 = var4 + File.separator + "java" + File.separator + "classes";
  190.       logMessage("MOZILLA_HOME is set to \"" + var4 + "\", trying it...");
  191.       if (loadPropertiesFromFile(var4, var0)) {
  192.          return true;
  193.       } else {
  194.          logMessage("Read faild from MOZILLA_HOME.");
  195.          return false;
  196.       }
  197.    }
  198.  
  199.    private static boolean loadPropertiesFromFile(String var0, String var1) {
  200.       SecurityManager.enablePrivilege("UniversalFileRead");
  201.       String var2 = var0 + File.separator + var1;
  202.  
  203.       try {
  204.          FileInputStream var3 = new FileInputStream(var2);
  205.          fprops.load(var3);
  206.          return true;
  207.       } catch (FileNotFoundException var4) {
  208.       } catch (IOException var5) {
  209.          System.err.println("Exception occurred while loading " + var2 + ": " + var5);
  210.       }
  211.  
  212.       return false;
  213.    }
  214.  
  215.    public CharsetString[] makeMultiCharsetString(String var1) {
  216.       return this.makeMultiCharsetString(var1.toCharArray(), 0, var1.length());
  217.    }
  218.  
  219.    public CharsetString[] makeMultiCharsetString(char[] var1, int var2, int var3) {
  220.       if (var3 < 1) {
  221.          return new CharsetString[0];
  222.       } else {
  223.          Vector var4 = null;
  224.          char[] var5 = new char[var3];
  225.          char var6 = this.defaultChar;
  226.          FontDescriptor var7 = this.defaultFont;
  227.  
  228.          for(int var8 = 0; var8 < this.componentFonts.length; ++var8) {
  229.             if (!this.componentFonts[var8].isExcluded(var1[var2]) && this.componentFonts[var8].fontCharset.canConvert(var1[var2])) {
  230.                var7 = this.componentFonts[var8];
  231.                var6 = var1[var2];
  232.                break;
  233.             }
  234.          }
  235.  
  236.          var5[0] = var6;
  237.          int var9 = 0;
  238.  
  239.          for(int var10 = 1; var10 < var3; ++var10) {
  240.             char var11 = var1[var2 + var10];
  241.             FontDescriptor var12 = this.defaultFont;
  242.             var6 = this.defaultChar;
  243.  
  244.             for(int var13 = 0; var13 < this.componentFonts.length; ++var13) {
  245.                if (!this.componentFonts[var13].isExcluded(var11) && this.componentFonts[var13].fontCharset.canConvert(var11)) {
  246.                   var12 = this.componentFonts[var13];
  247.                   var6 = var11;
  248.                   break;
  249.                }
  250.             }
  251.  
  252.             var5[var10] = var6;
  253.             if (var7 != var12) {
  254.                if (var4 == null) {
  255.                   var4 = new Vector(3);
  256.                }
  257.  
  258.                var4.addElement(new CharsetString(var5, var9, var10 - var9, var7));
  259.                var7 = var12;
  260.                var12 = this.defaultFont;
  261.                var9 = var10;
  262.             }
  263.          }
  264.  
  265.          CharsetString var17 = new CharsetString(var5, var9, var3 - var9, var7);
  266.          CharsetString[] var15;
  267.          if (var4 == null) {
  268.             var15 = new CharsetString[]{var17};
  269.          } else {
  270.             var4.addElement(var17);
  271.             var15 = new CharsetString[var4.size()];
  272.  
  273.             for(int var18 = 0; var18 < var4.size(); ++var18) {
  274.                var15[var18] = (CharsetString)var4.elementAt(var18);
  275.             }
  276.          }
  277.  
  278.          return var15;
  279.       }
  280.    }
  281.  
  282.    protected abstract CharToByteConverter getFontCharset(String var1, String var2);
  283.  
  284.    public static String styleStr(int var0) {
  285.       switch (var0) {
  286.          case 1:
  287.             return "bold";
  288.          case 2:
  289.             return "italic";
  290.          case 3:
  291.             return "bolditalic";
  292.          default:
  293.             return "plain";
  294.       }
  295.    }
  296.  
  297.    static {
  298.       try {
  299.          SecurityManager.enablePrivilege("UniversalPropertyRead");
  300.          String var2 = Toolkit.getProperty("AWT.LogFontProperties", "false");
  301.          if (Boolean.valueOf(var2)) {
  302.             String var3 = Toolkit.getProperty("AWT.LogFontPropertiesFile", "props.log");
  303.             SecurityManager.enablePrivilege("UniversalFileAccess");
  304.             log = new PrintWriter(new FileOutputStream(var3), true);
  305.             logMessage("font.properties log \"" + var3 + "\" opened.");
  306.          }
  307.       } catch (IOException var7) {
  308.       } finally {
  309.          SecurityManager.revertPrivilege();
  310.       }
  311.  
  312.       SecurityManager.enablePrivilege("UniversalPropertyRead");
  313.       String var0 = System.getProperty("user.language", "en");
  314.       String var1 = System.getProperty("user.region");
  315.       String var9 = System.getProperty("file.encoding");
  316.       Properties var10 = new Properties();
  317.       ((Hashtable)var10).put("serif.0", "unknown");
  318.       ((Hashtable)var10).put("sansserif.0", "unknown");
  319.       ((Hashtable)var10).put("monospaced.0", "unknown");
  320.       ((Hashtable)var10).put("dialog.0", "unknown");
  321.       ((Hashtable)var10).put("dialoginput.0", "unknown");
  322.       fprops = new Properties(var10);
  323.       boolean var4 = false;
  324.       if (var1 != null) {
  325.          var4 = loadProperties("font.properties." + var0 + "_" + var1 + "_" + var9);
  326.          if (!var4) {
  327.             var4 = loadProperties("font.properties." + var0 + "_" + var1);
  328.          }
  329.       }
  330.  
  331.       if (!var4) {
  332.          var4 = loadProperties("font.properties." + var0 + "_" + var9);
  333.       }
  334.  
  335.       if (!var4) {
  336.          var4 = loadProperties("font.properties." + var0);
  337.       }
  338.  
  339.       if (!var4) {
  340.          var4 = loadProperties("font.properties");
  341.       }
  342.  
  343.       if (log != null) {
  344.          fprops.list(log);
  345.       }
  346.  
  347.    }
  348. }
  349.