home *** CD-ROM | disk | FTP | other *** search
- package sun.awt;
-
- import java.awt.Toolkit;
- import java.awt.peer.FontPeer;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.PrintWriter;
- import java.util.Hashtable;
- import java.util.Properties;
- import java.util.Vector;
- import sun.io.CharToByteConverter;
-
- public abstract class PlatformFont implements FontPeer {
- protected FontDescriptor[] componentFonts;
- protected char defaultChar;
- protected Properties props;
- protected FontDescriptor defaultFont;
- protected static Hashtable charsetRegistry = new Hashtable(5);
- protected String aliasName;
- protected String styleString;
- private static Properties fprops;
- private static PrintWriter log;
- private static final String LOG_FONT_PROPERTIES = "AWT.LogFontProperties";
- private static final String LOG_FONT_PROPERTIES_FILE = "AWT.LogFontPropertiesFile";
-
- public PlatformFont(String var1, int var2) {
- if (fprops == null) {
- this.props = null;
- } else {
- this.props = fprops;
- this.aliasName = this.props.getProperty("alias." + var1.toLowerCase());
- if (this.aliasName == null) {
- this.aliasName = var1.toLowerCase();
- }
-
- if (this.props.getProperty(this.aliasName + ".0") == null && this.props.getProperty(this.aliasName + ".plain.0") == null) {
- this.aliasName = "sansserif";
- }
-
- this.styleString = styleStr(var2);
- Vector var3 = new Vector(5);
- int var4 = 0;
-
- while(true) {
- String var5 = String.valueOf(var4);
- String var6 = this.props.getProperty(this.aliasName + "." + this.styleString + "." + var5);
- if (var6 == null) {
- var6 = this.props.getProperty(this.aliasName + "." + var5);
- if (var6 == null) {
- this.componentFonts = new FontDescriptor[var4];
-
- for(int var21 = 0; var21 < var4; ++var21) {
- this.componentFonts[var21] = (FontDescriptor)var3.elementAt(var21);
- }
-
- try {
- var22 = Integer.parseInt(this.props.getProperty("default.char", "003f"), 16);
- } catch (NumberFormatException var18) {
- var22 = 63;
- }
-
- this.defaultChar = '?';
- if (this.componentFonts.length > 0) {
- this.defaultFont = this.componentFonts[0];
- }
-
- for(int var23 = 0; var23 < this.componentFonts.length; ++var23) {
- if (!this.componentFonts[var23].isExcluded((char)var22) && this.componentFonts[var23].fontCharset.canConvert((char)var22)) {
- this.defaultFont = this.componentFonts[var23];
- this.defaultChar = (char)var22;
- return;
- }
- }
-
- return;
- }
- }
-
- String var7 = this.props.getProperty("fontcharset." + this.aliasName + "." + this.styleString + "." + var5);
- if (var7 == null) {
- var7 = this.props.getProperty("fontcharset." + this.aliasName + "." + var5);
- if (var7 == null) {
- var7 = "default";
- }
- }
-
- CharToByteConverter var8 = this.getFontCharset(var7.trim(), var6);
- String var9 = this.props.getProperty("exclusion." + this.aliasName + "." + this.styleString + "." + var5);
- if (var9 == null) {
- var9 = this.props.getProperty("exclusion." + this.aliasName + "." + var5);
- if (var9 == null) {
- var9 = "none";
- }
- }
-
- int[] var10;
- if (var9.equals("none")) {
- var10 = new int[0];
- } else {
- int var11 = 1;
- int var24 = 0;
-
- label106:
- while(true) {
- var24 = var9.indexOf(44, var24);
- if (var24 == -1) {
- var10 = new int[var11];
-
- for(int var13 = 0; var13 < var11; ++var13) {
- int var16 = 0;
- int var17 = 0;
-
- String var14;
- String var15;
- try {
- var14 = var9.substring(var13 * 10, var13 * 10 + 4);
- var15 = var9.substring(var13 * 10 + 5, var13 * 10 + 9);
- } catch (StringIndexOutOfBoundsException var20) {
- var10 = new int[0];
- break label106;
- }
-
- try {
- var16 = Integer.parseInt(var14, 16);
- var17 = Integer.parseInt(var15, 16);
- } catch (NumberFormatException var19) {
- var10 = new int[0];
- break label106;
- }
-
- var10[var13] = var16 << 16 | var17;
- }
- break;
- }
-
- ++var24;
- ++var11;
- }
- }
-
- var3.addElement(new FontDescriptor(var6, var8, var10));
- ++var4;
- }
- }
- }
-
- public boolean mightHaveMultiFontMetrics() {
- return this.props != null;
- }
-
- private static void logMessage(String var0) {
- if (log != null) {
- log.println(var0);
- }
-
- }
-
- private static boolean loadProperties(String var0) {
- SecurityManager.enablePrivilege("UniversalPropertyRead");
- logMessage("loadProperties(" + var0 + ")");
- String var1 = System.getProperty("java.font.property.path");
- if (var1 != null) {
- logMessage("MOZILLA_JAVA_FONT_PROPERTY_PATH is set to \"" + var1 + "\", trying it...");
- if (loadPropertiesFromFile(var1, var0)) {
- return true;
- }
-
- logMessage("Read failed from MOZILLA_JAVA_FONT_PROPERTY_PATH.");
- }
-
- logMessage("Trying to read from system classpath...");
-
- try {
- InputStream var2 = ClassLoader.getSystemResourceAsStream(var0);
- if (var2 != null) {
- fprops.load(var2);
- return true;
- }
- } catch (IOException var3) {
- System.err.println("Exception occurred while loading " + var0 + ": " + var3);
- }
-
- logMessage("System classpath failed; unable to load \"" + var0 + "\"");
- String var4 = System.getProperty("mozilla.home", ".");
- var4 = var4 + File.separator + "java" + File.separator + "classes";
- logMessage("MOZILLA_HOME is set to \"" + var4 + "\", trying it...");
- if (loadPropertiesFromFile(var4, var0)) {
- return true;
- } else {
- logMessage("Read faild from MOZILLA_HOME.");
- return false;
- }
- }
-
- private static boolean loadPropertiesFromFile(String var0, String var1) {
- SecurityManager.enablePrivilege("UniversalFileRead");
- String var2 = var0 + File.separator + var1;
-
- try {
- FileInputStream var3 = new FileInputStream(var2);
- fprops.load(var3);
- return true;
- } catch (FileNotFoundException var4) {
- } catch (IOException var5) {
- System.err.println("Exception occurred while loading " + var2 + ": " + var5);
- }
-
- return false;
- }
-
- public CharsetString[] makeMultiCharsetString(String var1) {
- return this.makeMultiCharsetString(var1.toCharArray(), 0, var1.length());
- }
-
- public CharsetString[] makeMultiCharsetString(char[] var1, int var2, int var3) {
- if (var3 < 1) {
- return new CharsetString[0];
- } else {
- Vector var4 = null;
- char[] var5 = new char[var3];
- char var6 = this.defaultChar;
- FontDescriptor var7 = this.defaultFont;
-
- for(int var8 = 0; var8 < this.componentFonts.length; ++var8) {
- if (!this.componentFonts[var8].isExcluded(var1[var2]) && this.componentFonts[var8].fontCharset.canConvert(var1[var2])) {
- var7 = this.componentFonts[var8];
- var6 = var1[var2];
- break;
- }
- }
-
- var5[0] = var6;
- int var9 = 0;
-
- for(int var10 = 1; var10 < var3; ++var10) {
- char var11 = var1[var2 + var10];
- FontDescriptor var12 = this.defaultFont;
- var6 = this.defaultChar;
-
- for(int var13 = 0; var13 < this.componentFonts.length; ++var13) {
- if (!this.componentFonts[var13].isExcluded(var11) && this.componentFonts[var13].fontCharset.canConvert(var11)) {
- var12 = this.componentFonts[var13];
- var6 = var11;
- break;
- }
- }
-
- var5[var10] = var6;
- if (var7 != var12) {
- if (var4 == null) {
- var4 = new Vector(3);
- }
-
- var4.addElement(new CharsetString(var5, var9, var10 - var9, var7));
- var7 = var12;
- var12 = this.defaultFont;
- var9 = var10;
- }
- }
-
- CharsetString var17 = new CharsetString(var5, var9, var3 - var9, var7);
- CharsetString[] var15;
- if (var4 == null) {
- var15 = new CharsetString[]{var17};
- } else {
- var4.addElement(var17);
- var15 = new CharsetString[var4.size()];
-
- for(int var18 = 0; var18 < var4.size(); ++var18) {
- var15[var18] = (CharsetString)var4.elementAt(var18);
- }
- }
-
- return var15;
- }
- }
-
- protected abstract CharToByteConverter getFontCharset(String var1, String var2);
-
- public static String styleStr(int var0) {
- switch (var0) {
- case 1:
- return "bold";
- case 2:
- return "italic";
- case 3:
- return "bolditalic";
- default:
- return "plain";
- }
- }
-
- static {
- try {
- SecurityManager.enablePrivilege("UniversalPropertyRead");
- String var2 = Toolkit.getProperty("AWT.LogFontProperties", "false");
- if (Boolean.valueOf(var2)) {
- String var3 = Toolkit.getProperty("AWT.LogFontPropertiesFile", "props.log");
- SecurityManager.enablePrivilege("UniversalFileAccess");
- log = new PrintWriter(new FileOutputStream(var3), true);
- logMessage("font.properties log \"" + var3 + "\" opened.");
- }
- } catch (IOException var7) {
- } finally {
- SecurityManager.revertPrivilege();
- }
-
- SecurityManager.enablePrivilege("UniversalPropertyRead");
- String var0 = System.getProperty("user.language", "en");
- String var1 = System.getProperty("user.region");
- String var9 = System.getProperty("file.encoding");
- Properties var10 = new Properties();
- ((Hashtable)var10).put("serif.0", "unknown");
- ((Hashtable)var10).put("sansserif.0", "unknown");
- ((Hashtable)var10).put("monospaced.0", "unknown");
- ((Hashtable)var10).put("dialog.0", "unknown");
- ((Hashtable)var10).put("dialoginput.0", "unknown");
- fprops = new Properties(var10);
- boolean var4 = false;
- if (var1 != null) {
- var4 = loadProperties("font.properties." + var0 + "_" + var1 + "_" + var9);
- if (!var4) {
- var4 = loadProperties("font.properties." + var0 + "_" + var1);
- }
- }
-
- if (!var4) {
- var4 = loadProperties("font.properties." + var0 + "_" + var9);
- }
-
- if (!var4) {
- var4 = loadProperties("font.properties." + var0);
- }
-
- if (!var4) {
- var4 = loadProperties("font.properties");
- }
-
- if (log != null) {
- fprops.list(log);
- }
-
- }
- }
-